1. ホーム
  2. ios

Swift における ~= 演算子

2023-09-26 17:23:17

質問

最近ダウンロードした アドバンスドNSOperations のサンプルアプリをダウンロードしたところ、このようなコードが見つかりました...。

// Operators to use in the switch statement.
private func ~=(lhs: (String, Int, String?), rhs: (String, Int, String?)) -> Bool {
    return lhs.0 ~= rhs.0 && lhs.1 ~= rhs.1 && lhs.2 == rhs.2
}

private func ~=(lhs: (String, OperationErrorCode, String), rhs: (String, Int, String?)) -> Bool {
    return lhs.0 ~= rhs.0 && lhs.1.rawValue ~= rhs.1 && lhs.2 == rhs.2
}

を使うようです。 ~= 演算子に対して StringsInts がありますが、見たことがありません。

それは何ですか?

どのように解決するのですか?

でのパターンマッチングに使われる演算子です。 case ステートメントで使用される演算子です。

これをどのように利用し、独自の実装を提供できるかは、ここを見てください。

ここでは、カスタムを定義し、それを使用する簡単な例を示します。

struct Person {
    let name : String
}

// Function that should return true if value matches against pattern
func ~=(pattern: String, value: Person) -> Bool {
    return value.name == pattern
}

let p = Person(name: "Alessandro")

switch p {
// This will call our custom ~= implementation, all done through type inference
case "Alessandro":
    print("Hey it's me!")
default:
    print("Not me")
}
// Output: "Hey it's me!"

if case "Alessandro" = p {
    print("It's still me!")
}
// Output: "It's still me!"