iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
1

20190925

前言

今天要介紹的是Swift中的Closure。我們可以把Closure想成無名的function。一般來說會有兩種使用方式,一是將Closure存在變數內,另外一種是當作function內的(傳入)參數使用。

現在,我們馬上開始!

如何建立playground,請參考Day4的文章
https://ithelp.ithome.com.tw/articles/10217428
function介紹,請參考Day8的文章
https://ithelp.ithome.com.tw/articles/10219686

無參數與無回傳的Closure

一樣先來看看程式碼

// 定義一個的方法
func sayHi() {
    print("Hi")
}
sayHi()

// closure的寫法
let sayHi2 = {
    () -> () in
    print("Hi")
}
sayHi

let sayHi3 = { print("Hi") }
  • 這邊可以看出此方法中無參數也無回傳
  • 而in關鍵字,精簡的寫法中,也可省略掉,如sayHi3

有參數與回傳值的Closure

// 定義一個帶參數有回傳值的方法
func sayHello(name: String) -> String {
    return "Hello, \(name)."
}
sayHello(name: "mike")

// closure 的寫法
let sayHello2 = {
    (name: String) -> String in
    return "Hello, \(name)."
}
sayHello2("mike")
  • 其中name傳入的參數,型別為String
  • 回傳的型別也是 String

當Closure遇到func參數

var names = ["mike", "bonnie", "peter"]
//names.sort(by: {
//    (name1: String, name2: String) -> Bool in
//    return name1.count > name2.count
//})

// 更簡潔的寫法
names.sort { (name1, name2) -> Bool in
    return name1.count > name2.count
}
names // ["bonnie", "peter", "mike"]
  • 由於型別String已知,可以省略
  • 如果不想更動原本的array,可以使用Array.sorted()
  • 由於Trailing Closures特性,closure如果是最後一個參數,可以將大括弧{}移動到外面

同樣的這個例子也可以縮寫,以下用反排序做示範

names.sort { $0.count < $1.count }
names // ["mike", "peter", "bonnie"]
  • 其中第一個與第二個參數可以省略,並使用$0代表第一個,$1代表第二個參數
  • 同時也可以省略in 關鍵字

總結

在今天的文章裡,我們做了Closure的基本介紹,以及更為精簡的寫法,在App的實作中,常會遇到內建的方法中,所帶入的參數為Closure,因此,Closure的觀念也是十分重要的。
今天的內容就到這邊,感謝讀者們的閱讀。


Github:

https://github.com/chiron-wang/IT30_11

參考資料與延伸閱讀

  1. 彼得潘的 Swift iOS App 開發問題解答集
    https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86

  2. iOS 13 & Swift 5 - The Complete iOS App Development Bootcamp - Angela Yu
    https://www.udemy.com/course/ios-13-app-development-bootcamp/

  3. 深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
    https://www.udemy.com/course/iphone-swift4/

  4. 心智圖軟體Xmind
    https://www.xmind.net/

  5. 彼得潘的Swift程式設計入門
    https://www.tenlong.com.tw/products/9789572246573

  6. 《The Swift Programming Language》正體中文版
    https://tommy60703.gitbooks.io/swift-language-traditional-chinese/content/chapter2/01_The_Basics.html#floating-point_numbers

  7. Apple Developer Document
    https://developer.apple.com/documentation/swift/double

[Closure相關參考]

  1. swift doc Closures
    https://docs.swift.org/swift-book/LanguageGuide/Closures.html

  2. 【Swift3 - Closure(閉包)】
    https://medium.com/@mikru168/ios-closure-%E9%96%89%E5%8C%85-cf8ab16d6efc

  3. Swift 學習筆記
    https://hugolu.gitbooks.io/learn-swift/content/Basic/Closure.html


上一篇
Day8 function(func)的基本介紹
下一篇
Day10 Optional
系列文
iOS App 實作開發新手村36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言