關(guān)于協(xié)議




協(xié)議(Protocol)

  • AnyObject、class
    Runnable1、Runnable2都是只能被類遵守的協(xié)議
protocol Runnable1: AnyObject {}
protocol Runnable2: class {}


  • @objc
    下面定義的協(xié)議是被@objc修飾的協(xié)議,可以暴露給OC去遵守實(shí)現(xiàn)
@objc protocol Runnable {}


  • @objc optional
    可以通過@objc optional定義可選協(xié)議,這種協(xié)議只能被類遵守,如下:
@objc protocol Runnable {
    func run1()
    @objc optional func run2()
    func run3()
}

class Dog: Runnable {
    func run3() { print("Dog run3") }
    func run1() { print("Dog run1") }
}

var d = Dog()
d.run1() // Dog run1
d.run3() // Dog run3


  • @objc dynamic
    @objc dynamic修飾的內(nèi)容會具有動態(tài)性,比如調(diào)用方法會走Runtime那一套流程
class Dog: NSObject {
    @objc dynamic func test1() {}
    func test2() {}
}

var d = Dog()
d.test1() // test1走的是objc_msgSend
d.test2() // test2走的是Swift虛表那一套




  • 總結(jié)
    • ① 以前我們說過,可以給協(xié)議添加擴(kuò)展,在擴(kuò)展里面提供協(xié)議的默認(rèn)實(shí)現(xiàn),這樣間接實(shí)現(xiàn)可選協(xié)議的效果。
    • ② 可以通過@objc optional定義可選協(xié)議,這種協(xié)議只能被類遵守,可以暴露給OC去遵守實(shí)現(xiàn)。





【從OC到Swift】




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

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

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