🍁
Swift: ジェネリクスのプレースホルダの型とtypealiasの優先度とアクセス方法
protocol
を用いた依存性の注入の勉強をしていて、ジェネリクスのプレースホルダの型名とtypealias
で定義した型名が一致した場合、優先度はどうなるのかが気になったので実験してみました。
class Piyo {
let str = ""
}
class Pico {
let num: Int = 0
}
protocol HogeProtocol {
associatedtype P: Piyo
}
class Hoge<P: Pico>: HogeProtocol {
typealias P = Piyo
init() {
Swift.print(type(of: P.self))
Swift.print(type(of: Hoge.P.self))
}
}
let hoge = Hoge()
結果
Pico.Type
Piyo.Type
P
単体だとPicoとなっているため、ジェネリクスのプレースホルダの型の方が優先されているようです。typealiasの方にアクセスしたい場合は、Hoge.P
のように親を指定してあげれば良いようです。
Discussion