1.sorted方法舉例閉包的方法閉包
不用閉包傳入方法(String, String) -> Bool
.須要有這同樣一個方法函數
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]spa
func backward(_ s1: String, _ s2: String) -> Bool {code
return s1 > s2rem
}class
var reversedNames = names.sorted(by: backward)sed
利用閉包方法
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool insort
return s1 > s2make
})
根據上下文自動判斷類型
reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )
隱藏return隱藏返回的類型
reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )
參數也能夠省略
reversedNames = names.sorted(by: { $0 > $1 } )
只留符號做爲表達式
reversedNames = names.sorted(by: >)
改爲尾隨包
reversedNames = names.sorted() { $0 > $1 }
若是閉包表達式是函數或方法的惟一參數,使用尾隨閉包時,能夠把 ()
省略掉
reversedNames = names.sorted{ $0 > $1 }
2.值捕獲栗子
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
let incrementByTen = makeIncrementer(forIncrement: 10)
incrementByTen()//10
incrementByTen()//20
let incrementBySeven = makeIncrementer(forIncrement: 7)
incrementBySeven()//7
incrementBySeven()//14
incrementByTen()//30
3.逃逸閉包。。這是啥
4.自動閉包。。沒看懂