弱觀察員我想實現的結構,讓我來存儲一組弱觀察員。坐落在斯威夫特
這裏是觀察包裝:
public func ==<T: Hashable>(lhs: WeakObserver<T>, rhs: WeakObserver<T>) -> Bool {
return lhs.hashValue == rhs.hashValue
}
public struct WeakObserver<T where T: AnyObject, T: Hashable> : Hashable {
private weak var weakObserver : T?
public init(weakObserver: T){
self.weakObserver = weakObserver
}
public var hashValue : Int {
return self.weakObserver!.hashValue
}
}
這裏是每一個觀察者需要符合協議:
public protocol DataModelObserverProtocol : class, Hashable, AnyObject {
func someFunc()
}
用法:
public class DataModel: NSObject, DataModelInterface {
public var observers = Set<WeakObserver<DataModelObserverProtocol>>()
//^^^^^ Using 'DataModelObserverProtocol' as a concrete type conforming to protocol 'AnyObject' is not supported
}
現在,當我意識到這可能是Swift本身的限制,我正在尋找一種替代解決方案,而不需要具體的cl屁股作爲類型約束(如果這是不可能的,我恐怕是這種情況,我仍然喜歡得到替代的「非哈克」解決方案)。
它的價值檢查https://gist.github.com/preble/13ab713ac044876c89b5 – Kirsteins
@Kirsteins這實際上看起來非常像我要找的東西,但它也看起來有點矯枉過正(沒有明顯的原因) –
@Kirsteins即使使用'WeakSet',我也會得到'使用協議作爲符合協議的具體類型'的錯誤。 –