21

ジェネリック型の変数を弱いとしてマークしようとしています:

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>?のようなジェネリック パラメータの特別な修飾子。

4

1 に答える 1