Я пытаюсь реализовать простую ситуацию с несколькими делегатами:
protocol Subscribable: class {
associatedtype Subscriber: AnyObject
var subscribers: NSHashTable<Subscriber> { get }
}
protocol ControllerSubscriber: class {
func controllerDidSomething()
}
class Controller: Subscribable {
typealias Subscriber = ControllerSubscriber
var subscribers = NSHashTable<Subscriber>.weakObjects() // Error
}
Ошибка: использование "ControllerSubscriber" в качестве конкретного типа, соответствующего протоколу "AnyObject", не поддерживается.
Мой вопрос:
- Что означает эта ошибка?
- Каковы основные понятия, к которым я пытаюсь выполнить, не удается?
- Почему это "не поддерживается"?
И, конечно, как мне обойти это? В смысле реального решения не работает.
Мне так сложно понять систему Swift generics. Кажется, я постоянно сталкиваюсь с такими непростыми ситуациями. Я просто хочу поставить вещь, соответствующую протоколу, в другую вещь:( Я хотел бы знать, где мое мышление идет не так, поэтому я могу исправить это и никогда больше не видеть эти ошибки.
Существует этот связанный вопрос, но обратите внимание, что ответы дают только обходные пути, отсутствие объяснений или решений.