Swift 4.0及以上協議寫法 option 可選協議實現
由於swift中類和結構體都可以遵循協議,所以導致所有的協議必須實現
那麼怎麼實現OC中的可選協議呢?廢話不多說,上程式碼:
//前面新增 objc 關鍵字 表示這個協議是oc的協議 class關鍵之表示這個協議只能類才可以遵循 @objc protocol SomeDelegate:class { //前面新增 objc optional 關鍵字 表示這個協議的實現是可選的 @objc optional func someFunc() -> Bool }
上面的方法前加入optional
本質上是實現了swift的可選型特性
上面還說到 協議@objc protocol SomeDelegate:class
前面的@objc
表示這個協議只能類才可以遵循
這樣在什麼delegate
屬性時就可以用weak
關鍵字來修飾
像這樣:
weak var delegate:SomeDelegate?
如果不用@objc
來修飾協議,依然用weak
來修飾delegate
屬性編譯器就會給你報錯
'weak' must not be applied to non-class-bound 'XXXDelegate'; consider adding a protocol conformance that has a class bound
接下來是可選協議是否實現的判斷,
無返回值
//無參 delegate?.someFunc?() 這樣的可選型鏈就保證了就算代理沒有實現該代理方法也不會報錯 //有參 delegate?.someFunc?(someParam)
有返回值->可選型解包
if let value = delegate?.someFunc?() { return value }
基本上就是這樣,還有什麼遺漏的看反饋再補充,哦了~