Я пытаюсь реализовать структуру, которая позволяет мне хранить набор слабых наблюдателей.Набор слабых наблюдателей в Swift
Вот обертка наблюдатель:
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» на месте я получаю сообщение об ошибке «Использование протокола как конкретного типа, соответствующего протоколу, не поддерживается». –