为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

莫回无 2019-12-13 09:46:11
是否可以使用范围运算符...和..<if语句。可能是这样的:let statusCode = 204if statusCode in 200 ..< 299 {  NSLog("Success")}
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

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


if 200 ... 299 ~= statusCode {

    print("success")

}

或带有表达式模式的切换语句(内部使用模式匹配运算符):


switch statusCode {

case 200 ... 299:

    print("success")

default:

    print("failure")

}

请注意,它..<表示忽略上限值的范围,因此您可能需要 200 ... 299或200 ..< 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 -emit-assembly main.swift

从Swift 2开始,这可以写成


if case 200 ... 299 = statusCode {

    print("success")

}

对if语句使用新引入的模式匹配。


查看完整回答
反对 回复 2019-12-13
?
侃侃无极

TA贡献2051条经验 获得超10个赞

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


if (200 ... 299).contains(statusCode) {

    print("Success")

}


查看完整回答
反对 回复 2019-12-13
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

这是一个旧线程,但在我看来,我们对此考虑过度。在我看来,最好的答案就是


if statusCode >= 200 && statusCode <= 299

没有啦


if 200 > statusCode > 299

我知道的其他形式,以及其他建议的解决方案都在进行函数调用,这将变得更慢且更难以阅读。模式匹配方法是一个有用的技巧,但似乎不适合解决此问题


查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 491 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信