この記事はyurueアドベントカレンダーの7日目の記事です!
SwiftでAPIクライアントを書いていて、リクエストごとにクラス・構造体を作成した経験はありませんか?
そのリクエストについて記載したものの中には恐らく、Responseの型が記述されているのではないでしょうか。
今回は、protocolで宣言されたassociatedtypeの型を判定するサンプルを書こうと思います。
##ソースコード
playground
protocol P {
associatedtype Response
}
func typeDetect<T: P>(instance: T) {
switch T.Response.self {
case is String.Type:
print("String")
case is Int.Type:
print("Int")
default:
print("else")
}
}
class C1: P {
typealias Response = String
}
class C2: P {
typealias Response = Int
}
let c1 = C1()
let c2 = C2()
typeDetect(instance: c1) // String
typeDetect(instance: c2) // Int