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