iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
佛心分享-IT 人自學之術

自學swift語法系列 第 24

Day24-Closure 基本介紹 & sorted(by:)

  • 分享至 

  • xImage
  •  

Function 類型寫法
(參數類型)-> 回傳值
func min(a: Int, b: Int) -> Int
=>(Int, Int) -> Int
func constains(Element) -> Bool
=>(Element) -> Bool
func isEqual(to: Double) -> Bool
=>(Double) -> Bool

什麼是 Closure

  • 一段可以被傳遞的 code。
  • Closure 可以被分成三種。

Closure 類型寫法
(參數類型) -> 回傳值

  • Closure 可以被預設為參數類型,可以被當引數傳遞,也可以被當作回傳類型。
  • 這個類型的寫法其實代表的是「Closure」。

Closure 表達式
{ (a: Int, b: Int)->Int in
a < b ? a : b
}

  • in 表示宣告類型結束。
  • 參數不能有預設值。
  • 沒有引數名稱,使用 closure 時一律直接寫值。
  • 因為沒有引數名稱,如果類型是「可以接受多個引數」的(T...),在後面不能再放其他參數。

Closure 用處
let minClosure = {(a: Int, b: Int, c: Int...)->Int in
a < b ? a : b
}
minClosure(2,5)

  • closure 語法可以被存在變數裡。
  • 主要是用在設定引數時,直接寫簡短的 closure 語法。

.sorted(by:)
func sorted(by: (Elment, Element)->Bool)->[Element]
假如第一個值應該被排在前面就回傳 true。

簡短寫法:自動簡稱
array.sorted(by:{a, b in a.身高 < b.身高})

  • 假如沒有設定參數名稱,Swift 會自動根據參數位置順序產生簡稱。
  • 第一個參數是$0、第二個$1......。
    array.sorted(by:{ $0.身高 < $1.身高})
  • 只能在沒有明確設定任何參數名稱時用。
  • 不能跨 Closure 使用。

簡短寫法:結尾 Closure
array.sorted(by:{ $0.身高 < $1.身高 })

  • 如果最後一個參數是 closure,可以把整個{}拉到()外面,並省略引數名稱。
    array.sorted() { $0.身高 < $1.身高 }
  • 如果拉出去之後沒有其他參數,括號可以省略。
    array.sorted { $0.身高 < $1.身高 }

簡短寫法:Operator
[1,2,3,4].sorted(by: >)

  • 直接輸入 Operator 的話,swift 會自動去找對應的 Operator,如果類型跟 Closure 的要求一樣就會直接套用,反之就會報錯。
    func sorted(by: (Element, Element) -> Bool) -> [Element]
    static func > (Self, Self) -> Bool
  1. Function 跟 Closure 的差別是什麼?
    => Function 是 Closure 的其中一種。
  2. 什麼時候可以不用寫 Closure 的參數類型和回傳類型?
    => 當 swift 可以判斷類型的時候,像是作為引數的時候。
  3. $0、$1 代表什麼?可以使用的範圍限制是哪裡?
    => Closure 中參數的簡稱,當沒有明確提供參數名稱時,swift 會自動按照順序給予這些簡稱。不能跨不同 Closure 使用。

影片連結:https://youtu.be/J2p8eYN0QSM?si=KdJHlxOJ_4PsPM7o


上一篇
Day23-建立你的 Function
下一篇
Day25-map、reduce、filter 高階函氏用法
系列文
自學swift語法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言