ジェネリック型の変数を弱いとしてマークしようとしています:
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>
?のようなジェネリック パラメータの特別な修飾子。