基本クラスを指定する型を必要とする Swift プロトコルを作成し、その基本クラスのサブクラスで動作するメソッドを実装したいと考えています。これは次のようになります (コンパイルされません)。
protocol Repository {
associatedtype BaseModel
//T must subclass BaseModel
func all<T: BaseModel>(from type: T.Type) -> [T]
}
ただし、これにより次のコンパイラ エラーが生成されます。
Inheritance from non-protocol, non-class type 'Self.BaseModel'
BaseModel は構造体型で指定でき、サブクラス化は許可されないため、これは理にかなっています。そこで、クラスに制約された空のプロトコルを作成して、この型がクラス型になり、サブクラスの制約を許可することをコンパイラに通知しようとしました。
protocol Model: class { }
次に、Model クラス プロトコルを使用して BaseModel 型を制約しました。
associatedtype BaseModel: Model
しかし、これは上記と同じコンパイラ エラーを生成します。associatedtype
プロトコルからサブクラスの制約を適用することは可能ですか? 上記がコンパイルされるか、Swift が次のようなものを許可してサブクラスの制約を許可することを期待します。
associatedtype BaseModel: class