委托(代理)是一種設計模式差牛,它允許類或結構體將一些需要它們負責的功能交由(委托)給其他的類型狞换。下面這篇文章主要介紹了Swift代理模式的相關資料达罗,文章開始先介紹了Objective-C相關的內容低斋,需要的朋友可以參考借鑒赃春,下面來一起看看吧愉择。
在iOS開發(fā)中,無論是 Objective-C 還是 Swift 织中,Delegate 有著具足輕重的位置锥涕,如TabelViewDelegate 與 TableViewDataSource。
Swift 中的代理模式 和 Objective-C 除了語法外狭吼,幾乎一樣层坠。
Objective-C 代理模式
在介紹 Swift 代理模式前,先來看回顧一下 Objective-C 中的代理模式如何實現(xiàn)
Objective-C 中用代理實現(xiàn)反向傳值:
委托方(.h)
委托方需要實現(xiàn)
1刁笙、創(chuàng)建協(xié)議 破花、聲明協(xié)議方法
@protocol SubViewDelegate <NSObject>
- (void)backWithStr:(NSString *) str;
@end
2谦趣、創(chuàng)建一個代理屬性
// weak聲明
@property (nonatomic, weak) id<SubViewDelegate> delegate;
3、執(zhí)行協(xié)議方法(.m)
// 判斷代理是實現(xiàn)該方法座每,避免carsh
if([self.delegate respondsToSelector:@selector(backWithStr:)]) {
[self.delegate backWithStr:self.textField.text];
}
代理方(主控制器)
代理方需要實現(xiàn)
4前鹅、遵守(繼承)協(xié)議
@interface ViewController () <SubViewDelegate>
5、將代理設為自己
subVC.delegate = self;
6峭梳、實現(xiàn)代理方法
- (void)backWithStr:(NSString *)str {
self.label.text = str;
}
Swift 代理模式
Swift 代理模式 與 Objective-C 一樣舰绘,只是語法不同。
Swift 中用代理實現(xiàn)反向傳值:
委托方(子控制器)
1延赌、創(chuàng)建協(xié)議 除盏、聲明協(xié)議方法
protocol SubViewDelegate {
func backStr(str: String)
}
2、創(chuàng)建一個代理屬性并執(zhí)行協(xié)議方法
class DelegateModel: NSObject {
創(chuàng)建一個代理屬性
? ?var delegate: SubViewDelegate?
? ? ? ?funcsaveInfo() {
? ? ? ? // Check to see if the delegate is there, then call it
? ? ? //?執(zhí)行協(xié)議方法
/// 執(zhí)行代理方法挫以,將值回傳
self.delegate?.backStr(str: textField.text ?? "")
?? ? ? }
}
代理方(主控制器)
3者蠕、繼承協(xié)議
classViewController: UIViewController, SubViewDelegate
4赃梧、將代理設為自己
subVC.delegate = self
5逮刨、實現(xiàn)代理方法
func backStr(str: String) {
?self.textF.text = str
}
總結
對比可以方法 Swift 代理模式 與 Objective-C 用法完全相同,只是語法發(fā)生了變化趟畏。
值得一提的是Swift 的擴展 extension可以用來繼承協(xié)議,實現(xiàn)代碼隔離大磺,便于維護抡句。
/// 使用擴展繼承協(xié)議 實現(xiàn)協(xié)議方法 可以分離代碼
extension ViewController: SubViewDelegate{
?/// 實現(xiàn)代理方法
?func backStr(str: String) {
??self.textF.text = str
?}
}