我在尝试将泛型类型要求限制为仅引用类型时遇到问题。这是一些示例代码:
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
。
这是泛型的限制吗?将协议标记为类就足以对该协议进行弱引用,泛型中是否没有等效项?