Outline
JavaのGenericsをSwiftで似たように表現する方法を調べました。
わかりやすいようにJavaと合わせて書きます。
やりたかったこと
Javaで可能な仮型引数に複数Interface制約
Hoge<T:InterfaceA & InterFaceB>
を実現したかった。
結論
Swift3以降では Javaと構文としては同じだった。
Container.swift
// Swift3
struct Container<T:ProtocolA & ProtocolB> {
var val:T
}
ContainerOldSyntax.swift
// Swift2 old syntax これでも可
struct Container<T> where T:ProtocolA, T:ProtocolB {
var val:T
}
Method.swift
class Hoge {
func someMethodA<T:ProtocolA & ProtocolB>(val:T) {
}
func someMethodB<T>(val:T) where T:ProtocolA & ProtocolB {
}
}
感想
Java Interfaceと似ている。
ただしできないこともあるので、Android/iOSで共通のAPIを持つそれぞれのライブラリを作成するときには要注意。