Swift プロトコルの連想型(associatedtype)

1.プロトコルの連想型(associatedtype)の基本

プロトコルの基本的な定義では、

  • プロパティの型
  • メソッドの引数の型
  • メソッドの戻り値の型

上記のような型をプロトコルの定義で決定するのが普通ですが、プロトコル定義時ではなく、準拠する型(クラス・構造体など)の定義時に上記の型を決定する方法もあります。これがプロトコルの連想型(associatedtype)。

プロトコルの連想型(associatedtype)の定義方法

protocol プロトコル名{
    associatedtype 連想型名
    
    var プロパティ名:連想型名
    func メソッド名(引数名:連想型名)
    func メソッド名()->連想型名
}

プロトコル定義時に上記のように連想型を宣言し、そのプロトコルを準拠する型の定義で連想型の型を具体的に指定する、という感じですね。


連想型の指定方法

typealias 連想型名=指定する型名

sample1-1

protocol Container{  //(1)
    associatedtype SVT
}

protocol SomeData{  //(2)
    associatedtype ValueContainer:Container where ValueContainer.SVT:Equatable
}


struct IntContainer:Container{  //(3)