这是我的代码:
public protocol Subjectable: class {
associatedtype T
var observers: [T] { get set }
func addObserver(_ observer: T)
func removeObserver(_ observer: T)
func removeAllObservers()
}
public extension Subjectable {
func removeAllObservers() {
observers.removeAll()
}
func removeObserver(_ observer: T) {
observers = observers.filter { $0 !== observer.self } // error
}
func addObserver(_ observer: T) {
observers.append(observer.self)
}
}
我有个错误说
二元运算符'!=='不能应用于“”和“”类型的操作数
“自我。T”
我不知道它想告诉我什么。我可以添加观察者没有问题
.self
后缀。但是,我可以通过添加
: AnyObject
后面
associatedtype T
,但是我不能创建一个协议和一个编译类(我得到了一个错误,说协议不符合
AnyObject
任何对象
协议背后)
我有没有办法用协议和默认实现创建一个观察者模式,它可以编译和使用(创建协议和类:)。
编辑:观察者也是一个协议,而不是一个类。
编辑2:这行得通(但我必须一直重新实现addObserver方法)
public protocol MyProtocol: AnyObject {}
public class MyClass: Subjectable {
public var observers = [MyProtocol]()
public func removeObserver(_ observer: MyProtocol) {
observers = observers.filter { $0 === observer }
}
}