我想寫一個弱性能需求的協議。符合它的類必須能夠爲該屬性指定任何類型。另外我不想指定實際的類型,所以它應該是用某種協議指定的類型。此代碼顯示了我對非弱財產的想法:Swift協議中關聯類型的弱性要求
protocol ObjectProtocol: class {
typealias PropertyType
var property: PropertyType {get set}
}
protocol FirstPropertyProtocol: class {}
protocol SecondPropertyProtocol: class {}
class FirstObjectImpl: ObjectProtocol {
var property: FirstPropertyProtocol?
}
class SecondObjectImpl: ObjectProtocol {
var property: SecondPropertyProtocol?
}
它按預期工作。
我想弱財產做同樣的:
protocol ObjectProtocol: class {
typealias WeakPropertyType: AnyObject //must be a class type
weak var weakProperty: WeakPropertyType? {get set}
}
protocol WeakPropertyProtocol: class {}
class ObjectImpl: ObjectProtocol {
weak var weakProperty: WeakPropertyProtocol?
}
而且我得到了一個編譯器錯誤:
Type 'ObjectImpl' does not conform to protocol 'ObjectProtocol'
有沒有什麼辦法可以使這項工作?
的問題是,協議不符合本身,而不是它從繼承的任何協議,見http://stackoverflow.com/questions/33112559/protocol對於類似的問題,不符合自己。在你的情況下,WeakPropertyProtocol類型不符合AnyObject。 –
感謝您的評論,馬丁。有沒有其他的方式來指定我的'WeakPropertyType'是沒有這個'AnyObject'約束的類類型? –
協議當前不需要將屬性實現爲弱存儲屬性。 https://stackoverflow.com/questions/47699813/weak-property-in-a-swift-protocol – Adobels