? ? ? ? swift協議代理的使用跟oc的協議代理差不套多,不過語法上還是有不小的區別。swift使用協議的關鍵字:protocol,協議的語法:protocol Pro1{//這里定義屬性或者方法},
? ? ? ? swift創建協議并聲明代理屬性:
? ? ? ? protocol ? ?ViewControllerSDelegate {
? ? ? ? ? ? ? ? ? ? funcViewControllerDelegateLoadDataOne(); ? // 不帶參的
? ? ? ? ? ? ? ? ? ? funcViewControllerDelegateLoadDataTwo(str:String); // 帶參的
? ? ? ? }
? ? ? ?func doClick() { ?// 點擊觸發的方法
? ? ? ? ? ? ? ? ? self.delegate?.funcViewControllerDelegateLoadDataOne()//讓代理去執行代理方法
? ? ? }
? ? ? ? 控制器方法實現
? ? ? ? class ?ViewController:UIViewController,ViewControllerDelegate {
? ? ? ? ? ? ? var ? delegate:ViewControllerDelegate?;
? ? ? ? ? ? ? override ? func ? viewDidLoad() {
? ? ? ? ? ? ? ? ? ? ? ?super.viewDidLoad()
? ? ? ? ? ? ? ? ? ? ? ?self.delegate=self;
? ? ? ? ? ? ? }
? ? ? ? ? ? ? internal ?func ?ViewControllerDelegateLoadDataOne() {
? ? ? ? ? ? ? }
? ? ? ? ? ? ? func ? ViewControllerDelegateLoadDataTwo(str:String) {
? ? ? ? ? ? ?}
? ? ? ?}
? ? ? oc擬定協議:
? ? ? ? ? ? @protocol? ViewControllerDelegate ?<NSObject>
? ? ? ? ? ? @required//缺省屬性,必須要實現
? ? ? ? ? ? - (void)show;//show是必須要實現
? ? ? ? ? ? ?@optional//可選實現
? ? ? ? ? ? ?- (void)show1;//show1是可實現也可不實現
? ? ? ? ? ? @end
? ? ? ? ? ?- (void) onClick {?
? ? ? ? ? ? ? ? ? ? if([self.delegate respondsToSelector:@selector(show)]) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [self.delegate show];
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? }
? ? ? ? ? ? 遵守協議
? ? ? ? ? @interface? ViewController()<ViewControllerDelegate>
? ? ? ? ? ?@end
? ? ? ? ? ?設置代理實現方法 ??
? ? ? ? ? ? - (void)viewDidLoad {
? ? ? ? ? ? ? ? ? ? ?[superviewDidLoad];
? ? ? ? ? ? ? ? ? ? ?self.delegate = self; // 設置代理
? ? ? ? ? ? ?}
? ? ? ? ? ? ?-(void) show {
? ? ? ? ? ? }
? ? ? ? ? ? -(void) show1{
? ? ? ? ? ? }