我在试图限制泛型类型的要求,只是引用类型的问题。下面是一些示例代码:斯威夫特通用引用类型
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因为狗是根据我的经验,小的协议 –
这可能是仿制药限制SWIFT 2.3。您可以通过使用类而不是协议来修复此问题 –
我需要在我的实施中使用协议。 – Mark