我试图将泛型类型的变量标记为弱:
class X<T> {
weak var t: T?
}
如果我不设置任何约束,T
我会得到错误weak cannot be applied to non-class type 'T'
。
如果我只将它与 NSObject 派生类一起使用,这将起作用:
class X<T: NSObject> {
weak var t: T?
}
但我也希望能够使用纯 Swift 类。
class
对于协议,可以通过使用关键字来要求实现者是类类型:
protocol ClassType: class {
}
使用ClassType
协议,我现在可以将变量标记为弱:
class X<T: ClassType> {
weak var t: T?
}
但我不能class
直接将关键字添加到泛型参数:
class X<T: class> { // Compile error
weak var t: T?
}
我可以使协议解决方案适用于所有具有扩展名的 NSObject 派生类:
extension NSObject: ClassType {
}
但是对于纯 Swift 类,没有可以添加此扩展的通用超类。有没有办法在不向ClassType
我想使用X
该类的每个类添加协议的情况下完成这项工作?例如,通用参数的一些特殊限定符,例如class X<T:ThisIsAClass>
?