謎のワードだったassociatedtypeを調べてみた。
associatedtype
キーワードでプロトコルの連想型を定義することができる。
通常であればプロトコルを宣言した際に引数や戻り値の型を指定する必要があると思うが、associatedTypeを指定するとデリゲートした際に
型を指定することができる。
連想型を使用指定していけば、より抽象的なプロトコルを定義できる。
書き方
protocol プロトコル {
associatedType 連想型名
var プロパティ名:連想型
func メソッド名(引数:連想型名)
func メソッド名()→連想型名
}
連想型の実際の型は、プロトコルにdelegateする型ごとに指定できる。
準拠側
1 typeliasで指定
typelias 連想型名 = Int
2 実装から自動的に決めることもできる
var プロパティ名 :Int
func メソッド名(引数:Int)
func メソッド名()→Int {return 3}
3.型を定義せずに再度ネストする形で要求を満たすことも可能である
struct 連想型名()
var プロパティ名 :連想型名
func (引数:連想型名){}
func ()→連想型名{}
型の制約
連想型とはいえ準拠しなくてはならないプロトコル、継承していて欲しいスーパークラスがある場合は下記のように指定する
指定したプロトコルに準拠、もしくはスーパークラスを継承していない場合はコンパイルエラーになってしまう。
associatedType 連想型名 :プロトコルやスーパークラス