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本身的限制,但我正在寻找一种没有具体类作为类型限制的替代解决方案(如果不可能,我很担心这种情况,我仍然希望得到替代的“非hacky”解决方案)。
WeakSet
,我还是会得到错误信息“不支持将协议用作符合协议的具体类型”。 - the_critic