ジェネリックタイプの要件を参照タイプに制限しようとすると問題が発生します。ここではいくつかのサンプルコードです:Swiftジェネリックリファレンスタイプ
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
を取得します。
これはジェネリックの制限ですか?プロトコルをクラスとしてマークするだけで、そのプロトコルへの弱い参照を持つことができます。ジェネリックには同等のものはありませんか?
Dogはプロトコルであるため、DogはAnyObjectではありません –
私の小さな経験に基づいて、これはswift 2.3のようにジェネリックには限界があります。あなたはプロトコルの代わりにクラスを使用してこれを修正することができるかもしれません –
私の実装でプロトコルを使用する必要があります。 – Mark