У меня возникли проблемы с попыткой ограничить общие требования типа только к ссылочным типам. Вот пример кода:Тип ссылочного типа быстрого типа
class WeakHolder<Element: AnyObject> {
weak var element: Element?
init(element: Element) {
self.element = element
}
}
protocol Animal: class { }
class Dog: Animal { }
let dog: Animal = Dog()
let holder = WeakHolder<Animal>(element: dog) // Error: Using "Animal" as a concrete type conforming to protocol 'AnyObject' is not supported.
Если изменить общие требования к <Element: class>
, я получаю ошибку class constraint can only appear on protocol declarations
.
Это ограничение дженериков? Пометить протокол как класс достаточно, чтобы иметь слабую ссылку на этот протокол, нет ли эквивалента в дженериках?
Собака не является объектом AnyObject, поскольку собака является протоколом –
Основываясь на моем небольшом опыте, это может быть ограничение для дженериков с быстрым 2.3. Возможно, вы сможете исправить это, используя классы вместо протоколов. –
Мне нужно использовать протоколы в моей реализации. – Mark