我可以在Swift中用if语句使用范围运算符吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

是否可以使用范围运算符?.....<用IF语句。也许是这样的:

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

提问于
用户回答回答于

你可以使用“模式匹配”运算符~=

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

或者使用表达式模式的switch-statement(内部使用模式匹配运算符):

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

请注意,..<表示省略上限值的范围,因此您可能需要 200 ... 299200 ..< 300

附加信息:当上面的代码在Xcode 6.3中编译时,优化打开,然后进行测试

if 200 ... 299 ~= statusCode

实际上根本没有生成函数调用,只有三个汇编指令:

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

这与为其生成的汇编代码完全相同

if statusCode >= 200 && statusCode <= 299

你可以用这个来验证

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

从Swift 2开始,这可以写成

if case 200 ... 299 = statusCode {
    print("success")
}
用户回答回答于

这个版本似乎比模式匹配更具可读性:

if (200 ... 299).contains(statusCode) {
    print("Success")
}

扫码关注云+社区