1.代理方法
这里先上代码了
①创建一个代理方法
protocol FirstViewControllerDelegate{
fun firstDelegate()
}
上面为swift声明的最简单的一种代理格式
@objc protocol FirstViewControllerDelegate: NSObjectProtocol{
optional func firstDelegate(returnString:String)
}
在这个代理的声明中,可以明显看出,增加了一些额外的修饰符
1》引入@objc是为了引入 optional,用 optional 修饰代理方法,那么这个方法就变成可选方法,无论在代理对象中是否实现,都不受影响。
2》引入 NSObjectProtocol 是因为我们如果想用 weak 修饰代理属性,需要继承自这个类,这里有一篇关于 weak 修饰 Delegate,防止循环引用的文章,不明白的可以看看
②声明一个代理对象
weak var delegate: FirstViewControllerDelegate?
这里用 weak 修饰,防止循环引用的产生
③触发代理事件
if self.delegate!.respondsToSelector(Selector("firstDelegate:")){
self.delegate!.firstDelegate!("delegate")
}
1》self.delegate!.respondsToSelector(Selector("firstDelegate:"))方法来判断是否有对象执行代理事件
2》self.delegate!.firstDelegate("delegate")触发代理事件
④在代理的实现控制器中引入代理
class ViewController: UIViewController,FirstViewControllerDelegate
与 Object-C 不同,只需要“,”添加即可
⑤实现代理方法
func firstDelegate(returnString: String) {
print(returnString)
}
不知道是不是我的打开方式有问题~在 swift 里边,好多 Object-C 里边的智能补全,在这儿都不管用了自己慢慢打吧