Jim*_*mmy 177 if-statement range swift
是否可以使用范围运算符...和..<if语句.Maye是这样的:
let statusCode = 204
if statusCode in 200 ..< 299 {
NSLog("Success")
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 389
您可以使用"模式匹配"运算符~=:
if 200 ... 299 ~= statusCode {
print("success")
}
Run Code Online (Sandbox Code Playgroud)
或者带有表达式模式的switch语句(在内部使用模式匹配运算符):
switch statusCode {
case 200 ... 299:
print("success")
default:
print("failure")
}
Run Code Online (Sandbox Code Playgroud)
注意,..<表示省略上限值的范围,因此您可能需要
200 ... 299或200 ..< 300.
附加信息:当上述代码在Xcode 6.3中编译并且优化开启时,则进行测试
if 200 ... 299 ~= statusCode
Run Code Online (Sandbox Code Playgroud)
实际上根本没有生成函数调用,只有三个汇编指令:
addq $-200, %rdi
cmpq $99, %rdi
ja LBB0_1
Run Code Online (Sandbox Code Playgroud)
这与生成的汇编代码完全相同
if statusCode >= 200 && statusCode <= 299
Run Code Online (Sandbox Code Playgroud)
您可以验证
xcrun -sdk macosx swiftc -O -emit-assembly main.swift
从Swift 2开始,这可以写成
if case 200 ... 299 = statusCode {
print("success")
}
Run Code Online (Sandbox Code Playgroud)
使用新引入的if语句模式匹配.另请参见Swift 2 - "if"中的模式匹配.
Ser*_*nko 87
这个版本似乎比模式匹配更具可读性:
if (200 ... 299).contains(statusCode) {
print("Success")
}
Run Code Online (Sandbox Code Playgroud)
这是一个老线程,但在我看来,我们过度思考这个问题.在我看来,最好的答案就是
if statusCode >= 200 && statusCode <= 299
Run Code Online (Sandbox Code Playgroud)
没有
if 200 > statusCode > 299
Run Code Online (Sandbox Code Playgroud)
我知道的形式,其他建议的解决方案正在进行函数调用,这将更慢并且更难阅读.模式匹配方法是一个有用的技巧,但似乎不适合这个问题