一個很有用的新特性,可以在別名新增泛型。例子如下:
typealias StringDictionary<T> = Dictionary<String, T>
typealias DictionaryOfStrings<T : Hashable> = Dictionary<T, String>
typealias IntFunction<T> = (T) -> Int
typealias Vec3<T> = (T, T, T)複製程式碼
別名的使用會更加靈活。 如例子所展示,可以宣告一個key為字串的型別,或者值為字串的型別。
//一個key為String,value為T的字典
typealias StringDictionary<T> = Dictionary<String, T>
//一個value為String的字典
typealias DictionaryOfStrings<T : Hashable> = Dictionary<T, String>
let keyIsStringDict: StringDictionary<Int> = ["key":6]
let valueIsStringDict: DictionaryOfStrings<Int> = [5:"value"]
//當然也可以使用在函式引數裡
func joinKey<T: Equatable>(dict: StringDictionary<T>) -> String {
return dict.map {
return $0.key
}.reduce("") { (result, key) -> String in
return "\(result) \(key)"
}
}
let testDict = ["first":6, "second":6, "third":6]
let joinedKey = joinKey(dict: testDict)
//結果為" second third first"複製程式碼
在指定閉包型別的時候也很有用:
typealias IntFunction<T> = (T) -> Int複製程式碼
上面的例子就定義了一個引數型別為T,返回值為Int的閉包。
在指定tuple時也很有用,比如:
typealias Vec3<T> = (T, T, T)
func perimeter(data: Vec3<Int>) -> Int {
return data.0 + data.1 + data.2
}
let triangle = (1,2,3)
let result = perimeter(data: triangle)
//result 為 6複製程式碼
宣告瞭一個有三個元素並且元素型別都一致的tuple,例子中用來表示一個三角形,寫了一個perimeter方法來求周長。