1. 程式人生 > >swift學習記錄(swift的型別推斷)

swift學習記錄(swift的型別推斷)

今天聽斯坦福大學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 < 

10}