どのように私には本当に明確ではありません let
で使用されます switch
ステートメント。
このことを考慮:
let greeting = (1,10)
switch greeting {
case let (x,y) where x == y:
print("hello")
case (x,y) where x < y: //error here
print("what"s up")
default: "No match"
}
による Apple docs:
[..。]ケースのパターンは、letキーワードを使用して定数をバインドすることもできます(varキーワードを使用して変数をバインドすることもできます)。これらの定数(または変数)は、対応するwhere句で、およびケースのスコープ内の残りのコード全体で参照できます。とはいえ、ケースに制御式に一致する複数のパターンが含まれている場合、それらのパターンのいずれにも定数または変数のバインディングを含めることはできません。
タプルとは (x, y)
私の例にバインドされていますが、なぜ再度参照できないのですか?
回答:
回答№1は1Swiftドキュメントからの引用から:
...次に、対応するwhere句および全体で参照できます。 残りのコード ケースの範囲内。
だから最初のケースでは
case let (x,y) where x == y:
print("hello")
greeting
(これはタプルです (1, 10)
)と照合されます パターン
let (x,y) where x == y
一致する場合は x
最初のタプル要素にバインドされています そして y
秒に。
このバインディングは、最初のケースの範囲に制限されています。 2番目以降の場合は使用できません。
コードをコンパイルするには、別のコードを追加します let
2番目のバインディング 場合:
switch greeting {
case let (x,y) where x == y:
print("(x) is equal to (y)")
case let (x,y) where x < y:
print("(x) is less than (y)")
default:
print("No match")
}