swift學習記錄(swift的型別推斷)
阿新 • • 發佈:2018-12-23
今天聽斯坦福大學Paul Hegarty 教授關於IOS開發的公開課,其中強調了swift的型別推斷 讓我明白了swift語法中一些奇怪的東西:
1、賦值中的型別推斷:
let value = 1
這是有型別推斷是很容易理解的。
2、閉包的型別推斷:
func hasAnyMatches(list:Array<Int>,condition:Int -> Bool) ->Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number:Int) -> Bool {
return number < 10
}
var numbers = [20,19,2,6]
hasAnyMatches(numbers,lessThanTen)
我們知道lessThanTen可以在呼叫hasAnyMatches時直接寫成一個閉包,這樣就不用單獨申明函式。也就是寫成hasAnyMatches(numbers,{(number:Int)
-> Bool in return number < 10
})
但是考慮到swift是有良好的型別推斷功能,所以實際上可以刪除不必要的型別,寫成
hasAnyMatches(numbers,{
number in return number < 10
})
因為swift可以推斷出閉包的返回型別,所以其實不需要return
hasAnyMatches(numbers,{
number in number
< 10
})
同時,引數是可以不申明的,所以hasAnyMatches(numbers,{
$0 < 10
})
如果閉包是函式的最後一個引數,還可以把閉包拿出來hasAnyMatches(numbers){$0 <