1. ホーム
  2. if-statement

[解決済み】Swiftでif文に範囲演算子を使うことはできますか?

2022-04-11 17:19:34

質問

範囲演算子 .....< をif文とする。こんな感じでしょうか。

let statusCode = 204
if statusCode in 200 ..< 299 {
  NSLog("Success")
}

解決方法は?

パターンマッチ演算子を使用することができます。 ~= :

if 200 ... 299 ~= statusCode {
    print("success")
}

あるいは、式パターンを持つ switch 文(pattern-match が使われます)。 演算子を使用します。)

switch statusCode {
case 200 ... 299:
    print("success")
default:
    print("failure")
}

なお ..< は上の値を省略した範囲を表すので、おそらくは 200 ... 299 または 200 ..< 300 .

追加情報です。 上記のコードをXcode 6.3でコンパイルし 最適化をオンにした場合、テストでは

if 200 ... 299 ~= statusCode

実際には、関数コールは全く生成されず、3つのアセンブリ命令が生成されるだけです。

addq    $-200, %rdi
cmpq    $99, %rdi
ja  LBB0_1

のために生成されるアセンブリコードとまったく同じものです。

if statusCode >= 200 && statusCode <= 299

で確認することができます。

xcrun -sdk macosx swiftc -O -emit-assembly main.swift

Swift 2の時点では。 これは次のように書くことができます。

if case 200 ... 299 = statusCode {
    print("success")
}

は、新しく導入された if-statementのパターンマッチングを使用しています。 また Swift 2 - "if"におけるパターンマッチ。 .