Swift 2 に問題があります - XCode バージョン 7.0 ベータ 5 (7A176x)
2 つのジェネリック型を持つ enum State があります。関数printState
は State 引数を取り、引数に基づいて「One」または「Two」を出力します
protocol Protocol1 {
}
struct Struct1: Protocol1 {
}
protocol Protocol2 {
}
struct Struct2: Protocol2 {
}
enum State<T:Protocol1, U:Protocol2> {
case One(firstStruct: T, secondStruct:U)
case Two(secondStruct:U)
}
func printState<T:Protocol1, U:Protocol2>(state: State<T,U>) {
switch state {
case .One( _):
print("One")
case .Two( _):
print("Two")
}
}
以下のようにprintStateを呼び出すと。
printState(State.One(firstStruct:Struct1(), secondStruct:Struct2()))
printState(State.Two(secondStruct:Struct2())) // This fails on compilation
printState の 2 回目の呼び出しでコンパイル エラーが発生する -
エラー: タイプ '(secondStruct: Struct2)' の引数リストで 'Two' を呼び出せません printState(State.Two(secondStruct:Struct2()))
T と U がクラス型に制約されている場合、すべてが正常に機能します。しかし、T と U がプロトコル タイプの場合にのみ、このエラーが発生します。また、case Two も Protocol1 を受け入れるようにすることで、このエラーを取り除くことができますが、実際には必要ありません。
このエラーが発生するのはなぜですか? ケース 2 が Protocol1 のみを受け入れるようにするには、どうすればこれを機能させることができますか。