Swift 4.0及以上協(xié)議寫法 option 可選協(xié)議實現(xiàn)

由于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
}

基本上就是這樣,還有什么遺漏的看反饋再補充,哦了~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容