麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Swift > 正文

Swift實現“或”操作符的3種方法示例

2020-03-09 17:31:11
字體:
來源:轉載
供稿:網友

前言

我在看喵神的書的時候,發現書中有個練習(如下圖),我覺得挺有意思,就把其中的“||”操作符實現了一下,跟大家分享一下。

Swift,或,操作符

使用Swift實現“||”操作符,我發現有三種方式,各自特點如下:

  • 第一種:普通方式
  • 第二種:性能優化
  • 第三種:性能優化+寫法優雅

“||”操作符,其實就是比較其左右兩側的值。所以我先定義一個常量vLeft代表左側的值。因為右側的值比較特殊,所以我定義了一個返回值為Bool值的函數getRightRes來獲取右側的值,代碼如下:

let vLeft = 31 > 12 // 代表操作符左側的值 // 代表操作符右側的值func getRightRes() -> Bool { print("getting the right value...") return 2 < 10}

第一種:

這是最普通,也是最容易想到的方式。函數有兩個Bool類型的參數,value1為true是直接返回true,value1為false時,再判斷value2的值。代碼如下:

func or(_ value1: Bool, _ value2: Bool) -> Bool {  if value1 {    return true  }  if value2 {    return true  }    return false}

然后使用定義好的值調用一下:

let res = or(vLeft, getRightRes())print("or: /(res)/n")

打印結果為:

getting the right value...
or: true

大家有沒有發現一個問題,即使我左側的值vLeft為true了,獲取右側值的函數getRightRes依然被執行了。試想如果右側函數是個比較消耗性能或費時的操作,在已經確定結果為true的情況下,再去執行右側函數,則非常沒有必要了!

那有沒有辦法解決這個問題呢?當然有,請看第二種方式。

第二種:

這種方式使用了閉包的概念。函數的第一個參數還是Bool類型的值,但第二個參數改為了一個返回值為Bool類型的閉包。(我們會把getRightRes函數放在閉包中執行)代碼如下:

func or(_ value1: Bool, _ value2: () -> Bool) -> Bool {  if value1 {    return true  }  return value2()}

這段代碼的意思就是,如果value1為true直接返回true,如果value1為false,則返回value2閉包的返回值。

這個函數的調用如下:

let res = or(vLeft) { () -> Bool in  return getRightRes()}print("or: /(res)/n")

執行結果如下:

or: true

大家發現沒有,在vLeft為true的情況下,并沒有再去調用getRightRes函數。這就解決了第一種方式中存在的問題。
現在我們把vLeft的值改為let vLeft = 3 > 12,再次運行代碼,會發現結果如下:

getting the right value...
or: true

這就說明,在左側值value1為false的情況時,會執行value2的閉包,閉包中的函數getRightRes會被執行,并返回結果。
這個函數的調用方式還可以簡寫為如下方式:

let res = or(vLeft) {  getRightRes()}

第三種:

這種方式只是在第二種方式的寫法上進行了優化,即在閉包參數的前面加了@autoclosure關鍵字,作用就是在調用這個函數的時候,寫法非常優雅,你甚至都感受不到閉包的存在!代碼如下:

func or(_ value1: Bool, _ value2: @autoclosure() -> Bool) -> Bool {  if value1 {    return true  }  return value2()}

調用代碼:

let res = or(vLeft, getRightRes())print("or: /(res)/n")

運行結果是跟第二種方式是一樣的,但寫法上比第二種簡潔了很多。跟第一種普通方式的調用代碼竟然是一模一樣的。
以上就是我總結的使用Swift實現“或”操作符的三種方式了,希望對大家有幫助。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美综合在线观看视频 | 曰韩一二三区 | 国产成人高潮免费观看精品 | 免费a视频在线观看 | 污视频在线免费播放 | 欧美精品v国产精品v日韩精品 | 免费毛片观看 | 国产成人精品一区在线播放 | 久久精品国产99久久6动漫亮点 | av在线免费观看中文字幕 | 狠狠操视频网站 | www.91操 | 色综合激情 | 精品在线视频播放 | 成人综合一区二区 | 青热久思思 | 欧美一级小视频 | 曰韩av在线 | 粉嫩一区| 精品一区二区三区免费看 | 一区二区三区国产视频 | h视频在线观看免费 | 毛片视频播放 | 亚洲午夜一区二区三区 | 精品中文字幕视频 | 人人做人人看 | 91精品动漫在线观看 | 高清国产福利 | 超碰一区 | 国产在线观看免费视频软件 | 欧美一级黄色片在线观看 | 成人男男视频拍拍拍在线观看 | 91成| 日韩视频一区二区三区四区 | 蜜桃网在线 | 看免费黄色一级片 | 欧美激情区 | 国产精品久久久久久久久久久久久久久久 | 久久久久久久久久一本门道91 | 久久国产精品二国产精品中国洋人 | jj视频在线播放 |