[swift]閉包的簡寫

一、閉包的完整格式

   {(parameters) -> return type in    // 閉包的類型描述
       statements                     // 閉包體
   }

二、 閉包簡寫的幾個依據

1.閉包可更具上下文推斷參數和返回值的類型

  • 如果閉包沒有參數,那么in和之前的描述可以省略。

2.從單行表達式閉包中隱式返回(也就是閉包體只有一行代碼,可以省略return)

3.可以簡化閉包的參數名,如$0,$1(從0開始,表示第i個參數...)

  • 結合第一點,就是即使閉包有參數,使用簡化參數名,那么in和之前的描述可以省略。

4.提供尾隨閉包語法(Trailing closure syntax)

  • 4.1如果傳入的參數,最后一個參數是閉包,那么可以把閉包放在()外面
  • 4.2如果傳入的參數只有一個,且是一個閉包,那么這個()可以省略

三、結合具體案例分析

  • 1.sort函數(排序函數)
let names = ["g","b","a", "c", "d", "f"]

// 傳入閉包(完整寫法)
names.sort({ (num1, num2) -> Bool in
    return num1 > num2
})

// 簡寫1 (依據上面第4點)
// 4.1
names.sort(){ (num1, num2) -> Bool in
    return num1 > num2
}
// 4.2
names.sort{ (num1, num2) -> Bool in
    return num1 > num2
}

// 簡寫1(依據上面第2.4點)
names.sort{ (num1, num2) -> Bool in
    num1 > num2
}

// 簡寫2(依據上面第1.3.4點)
names.sort{ return $0 > $1 }

// 簡寫3(依據上面的1.2.3.4點)
names.sort{ $0 > $1 }

// 簡寫4(這不屬于閉包的簡寫,是sort函數的簡寫)
names.sort(>)
names.sort(<)
names.sort()     // 排序函數(默認從小到大)

2.reduce函數 (歸整函數)

var numbers = [1, 2, 3]
// numbers.reduce(initial: T, combine: (T, Int) throws -> T)
// 傳入了兩個參數,最后一個參數是一個閉包
// 完整的寫法
let result = numbers.reduce( 10 , { (sum, elemt) -> Int in
   return sum + elemt
})

// 簡寫1(依據上面的第4點)
let result01 = numbers.reduce(10) { (sum, elemt) -> Int in
    return sum + elemt
}
// 最終簡寫 (依據上面的1.2.3.4點)
let result02 = numbers.reduce(10) {$0 + $1}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本章將會介紹 閉包表達式尾隨閉包值捕獲閉包是引用類型逃逸閉包自動閉包枚舉語法使用Switch語句匹配枚舉值關聯值原...
    寒橋閱讀 1,576評論 0 3
  • 閉包是自包含的函數代碼塊,可以在代碼中被傳遞和使用。Swift 中的閉包與 C 和 Objective-C 中的代...
    窮人家的孩紙閱讀 1,749評論 1 5
  • 86.復合 Cases 共享相同代碼塊的多個switch 分支 分支可以合并, 寫在分支后用逗號分開。如果任何模式...
    無灃閱讀 1,443評論 1 5
  • “垃圾游戲毀我青春”,一句常聽的話。 毀掉我們青春的只有游戲而已?目前大二,和身邊的人一樣,正值青春年少過著最美好...
    楊向昜閱讀 1,009評論 1 2
  • 今日體驗: 今天5點起床比原計劃早起了1個半小時,聽了半小時書,看了1小時的書,7:09分出門去菜市場給爸媽買早餐...
    劉詩嫻閱讀 124評論 0 0