開始之前,先普及一下Protocol協(xié)議及委托代理(Delegate)傳值翻翩,不清楚的可以先看看
1.代理方法
這里先上代碼了
①創(chuàng)建一個代理方法
protocol FirstViewControllerDelegate{
fun firstDelegate()
}
上面為swift聲明的最簡單的一種代理格式
@objc protocol FirstViewControllerDelegate: NSObjectProtocol{
optional func firstDelegate(returnString:String)
}
在這個代理的聲明中阔涉,可以明顯看出仆嗦,增加了一些額外的修飾符
1》引入@objc是為了引入 optional嘿般,用 optional 修飾代理方法,那么這個方法就變成可選方法沃但,無論在代理對象中是否實現(xiàn),都不受影響佛吓。
2》引入 NSObjectProtocol 是因為我們?nèi)绻胗?weak 修飾代理屬性绽慈,需要繼承自這個類,這里有一篇關(guān)于 weak 修飾 Delegate辈毯,防止循環(huán)引用的文章坝疼,不明白的可以看看
②聲明一個代理對象
weak var delegate: FirstViewControllerDelegate?
這里用 weak 修飾,防止循環(huán)引用的產(chǎn)生
③觸發(fā)代理事件
if self.delegate!.respondsToSelector(Selector("firstDelegate:")){
self.delegate!.firstDelegate!("delegate")
}
1》self.delegate!.respondsToSelector(Selector("firstDelegate:"))方法來判斷是否有對象執(zhí)行代理事件
2》self.delegate谆沃!.firstDelegate("delegate")觸發(fā)代理事件
④在代理的實現(xiàn)控制器中引入代理
class ViewController: UIViewController,FirstViewControllerDelegate
與 Object-C 不同钝凶,只需要“,”添加即可
⑤實現(xiàn)代理方法
func firstDelegate(returnString: String) {
print(returnString)
}
不知道是不是我的打開方式有問題~在 swift 里邊,好多 Object-C 里邊的智能補全耕陷,在這兒都不管用了自己慢慢打吧