私はすでに使用して、配列の配列を比較してみました場合には、このような:Swiftのスイッチケースを使って配列と配列を比較する方法はありますか?
let ArrayA = ["A", "B"]
if ArrayA == ["A", "B"] {
print("true")
} else {
print("false")
}
そして結果はtrue
になり、その後、私たちは、スイッチとケースでそれを行う方法? Swift言語でそれをすることは可能ですか?
私はすでに使用して、配列の配列を比較してみました場合には、このような:Swiftのスイッチケースを使って配列と配列を比較する方法はありますか?
let ArrayA = ["A", "B"]
if ArrayA == ["A", "B"] {
print("true")
} else {
print("false")
}
そして結果はtrue
になり、その後、私たちは、スイッチとケースでそれを行う方法? Swift言語でそれをすることは可能ですか?
あなたはwhere
述語で例を使用することができます:あなたが本当に望んでいた場合、あなたは==
を呼び出すパターンマッチ演算子(~=
)を定義することができ
let array = ["A", "B"]
switch array {
case _ where array == ["A", "B"]: print("AB")
case _ where array == ["C", "D"]: print("CD")
default: print("default")
}
。 switch
文はcase
が一致しているかどうかを判断するために与えられたパターンと候補を受け入れるパターンマッチ演算子の定義を探します。
let array = ["A", "B"]
func ~= <T: Equatable>(pattern: [T], candidate: [T]) -> Bool {
return pattern == candidate
}
switch array {
case ["A", "B"]: print("AB")
case ["C", "D"]: print("CD")
default: print("default")
}
それはどうかはっきりしていないので、私はしかし、この、反対アドバイスを希望このような場合は==
チェック、contains(_:)
、hasPrefix(_:)
などを実行しています。
さまざまな種類のスイッチを切り替えることはできますが、すぐに使用するアレイとは一致しません。 〜=を適切にオーバーロードして配列をマッチングさせることができます
func ~=<T: Equatable>(lhs: [T], rhs: [T]) -> Bool {
return lhs == rhs
}
let ArrayA = ["A","B"]
switch ArrayA {
case (["A","B"]):
print("true")
default:
print("false")
}
私はこれが存在していたのか知らなかった...笑。 https://stackoverflow.com/questions/38371870/operator-in-swift – Pochi
"func〜= ...."コードはどこに行きますか? Array型の拡張の中で宣言されるべきですか?またはそれはちょうど "どこに行く"とそのコード内で私はそれが[文字列]型のチェックする必要がありますか?実際の例を投稿してもよろしいですか? – Pochi
@Pochi私は2つの実例を投稿しました... '〜='関数は、Array上の拡張モジュール内のスタティックメンバでも、グローバルスコープ内のスタンドアロン関数としても構いません。 – Alexander
ああ、私はちょうど遊び場で試しました。私が理解していないことは、どのように "func(〜=)"がそのスコープを知っているかということです。私のファイルでこれを宣言すると、すべてのスイッチの比較に影響しますか?これは他のタイプに影響しないでしょうか?配列拡張内の静的メンバーとして宣言すると、より安全になりますか? (申し訳ありません、前にこのパターン一致するものは見たことがありません) – Pochi