這個SO post很好地解釋瞭如何解決創建delegate
的問題,即weak
。在協議聲明中,`:class`做了什麼?
從本質上講,有2種方法:
使用@objc
關鍵字:
@objc protocol MyClassDelegate {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
使用:class
關鍵字:
protocol MyClassDelegate: class {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
我試圖做一些研究瞭解究竟有什麼區別這兩種方法之間的關係是。該docs是關於使用@objc
很清楚:
要在Objective-C的訪問和使用,迅捷的類必須是一個Objective-C類的子類或必須註明
@objc
。
但是,無處我找到了一些關於:class
究竟做什麼的信息。仔細考慮整個概念,實際上並沒有多大意義。我的理解是,class
是Swift中的一個關鍵字,用於聲明類。所以,在這裏,我們似乎使用關鍵字class
本身作爲協議(因爲我們在協議聲明後將其附加在:
之後)。
那麼,爲什麼它甚至在語法上起作用,它究竟做了什麼?
相關:[Swift:如何解決類型'協議'的弱變量是非法的問題](http://stackoverflow.com/questions/37132190/swift-how-to-work-around-issue-where - 弱變量類型協議是非法的) – Hamish
也有關:[swift協議'弱'不能應用於非類類型](http://stackoverflow.com/q/33471858/2976878) – Hamish
也許在這種情況下也是有趣的:[從AnyObject擴展的協議和類專用協議有什麼區別?](http://stackoverflow.com/questions/30176814/whats-the-difference-between-a-protocol-從anybject和a-class-onl擴展)(和答案*似乎*爲「無」)。 –