亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以在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 關注
  • 583 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號