最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift實現(xiàn)“或”操作符的3種方法示例

 更新時間:2019年03月03日 11:32:24   作者:悟飯哪  
這篇文章主要給大家介紹了關(guān)于Swift實現(xiàn)“或”操作符的3種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

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

使用Swift實現(xiàn)“||”操作符,我發(fā)現(xiàn)有三種方式,各自特點如下:

  • 第一種:普通方式
  • 第二種:性能優(yōu)化
  • 第三種:性能優(yōu)化+寫法優(yōu)雅

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

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

第一種:

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

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

然后使用定義好的值調(diào)用一下:

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

打印結(jié)果為:

getting the right value...
or: true

大家有沒有發(fā)現(xiàn)一個問題,即使我左側(cè)的值vLeft為true了,獲取右側(cè)值的函數(shù)getRightRes依然被執(zhí)行了。試想如果右側(cè)函數(shù)是個比較消耗性能或費時的操作,在已經(jīng)確定結(jié)果為true的情況下,再去執(zhí)行右側(cè)函數(shù),則非常沒有必要了!

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

第二種:

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

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

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

這個函數(shù)的調(diào)用如下:

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

執(zhí)行結(jié)果如下:

or: true

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

getting the right value...
or: true

這就說明,在左側(cè)值value1為false的情況時,會執(zhí)行value2的閉包,閉包中的函數(shù)getRightRes會被執(zhí)行,并返回結(jié)果。
這個函數(shù)的調(diào)用方式還可以簡寫為如下方式:

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

第三種:

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

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

調(diào)用代碼:

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

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

總結(jié)

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

相關(guān)文章

  • SwiftUI中TabView組件的常規(guī)使用

    SwiftUI中TabView組件的常規(guī)使用

    這篇文章主要給大家介紹了關(guān)于SwiftUI中TabView組件的常規(guī)使用,文中通過實例代碼介紹的非常詳細,對大家學習或者使用SwiftUI具有一定的參考學習價值,需要的朋友可以參考下
    2022-06-06
  • Swift中defer的正確使用方法

    Swift中defer的正確使用方法

    準備把 swift 文檔再掃一遍,發(fā)現(xiàn)了defer這個關(guān)鍵字,所以下面這篇文章主要給大家介紹了關(guān)于Swift中defer的正確使用方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-11-11
  • Swift學習教程之訪問控制詳解

    Swift學習教程之訪問控制詳解

    訪問控制可以限定你在源文件或模塊中訪問代碼的級別,也就是說可以控制哪些代碼你可以訪問,哪些代碼你不能訪問。下面這篇文章主要給大家介紹了關(guān)于Swift學習教程之訪問控制的相關(guān)資料,需要的朋友可以參考下。
    2017-08-08
  • Swift?reduce函數(shù)使用示例詳解

    Swift?reduce函數(shù)使用示例詳解

    這篇文章主要為大家介紹了Swift?reduce函數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Swift操作Quartz 2D進行簡單的繪圖與坐標變換的教程

    Swift操作Quartz 2D進行簡單的繪圖與坐標變換的教程

    這篇文章主要介紹了Swift操作Quartz 2D進行簡單的繪圖與坐標變換的教程,Quartz 2D是Core Graphics框架中的一個重要組件,經(jīng)常被Mac OS或和iOS開發(fā)者用來繪圖,需要的朋友可以參考下
    2016-04-04
  • Swift算法之二叉樹實現(xiàn)的方法示例

    Swift算法之二叉樹實現(xiàn)的方法示例

    二叉樹是計算機科學中最基本也是最重要的樹型結(jié)構(gòu),最常見的二叉樹生成算法通常是使用遞歸或者其他描述類語言的方法來實現(xiàn)。本文主要介紹了Swift算法之二叉樹實現(xiàn)的方法,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • 實例講解Swift中引用類型的ARC自動引用計數(shù)

    實例講解Swift中引用類型的ARC自動引用計數(shù)

    自動引用計數(shù)是在Objective-C中就有的特性,用來輔助管理對象的引用,這里我們就來以實例講解Swift中引用類型的ARC自動引用計數(shù):
    2016-07-07
  • Swift學習筆記之邏輯分支與循環(huán)體

    Swift學習筆記之邏輯分支與循環(huán)體

    這篇文章主要給大家介紹了關(guān)于Swift學習筆記之邏輯分支與循環(huán)體的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-12-12
  • Swift利用CoreData如何存儲多種數(shù)據(jù)類的通訊錄

    Swift利用CoreData如何存儲多種數(shù)據(jù)類的通訊錄

    這篇文章主要給大家介紹了關(guān)于Swift利用CoreData如何存儲多種數(shù)據(jù)類的通訊錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。
    2017-12-12
  • Swift實現(xiàn)倒計時5秒功能

    Swift實現(xiàn)倒計時5秒功能

    這篇文章主要為大家詳細介紹了Swift實現(xiàn)倒計時5秒功能,在“登錄”和“注冊”頁面也有相似功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論

丹巴县| 青河县| 湟源县| 象州县| 驻马店市| 大荔县| 正蓝旗| 珲春市| 衡南县| 会理县| 平度市| 孝感市| 长沙县| 靖安县| 晋中市| 柳州市| 德阳市| 若尔盖县| 太和县| 固原市| 丹巴县| 方正县| 凤冈县| 荔浦县| 大兴区| 青州市| 延安市| 临漳县| 余庆县| 延庆县| 射阳县| 洛浦县| 漯河市| 宁波市| 确山县| 抚宁县| 富民县| 托里县| 玉田县| 黑龙江省| 万年县|