Swift 3必看:typealias支持泛型

一个很有用的新特性,可以在别名添加泛型。例子如下:

typealias StringDictionary = Dictionary
typealias DictionaryOfStrings = Dictionary
typealias IntFunction = (T) -> Int
typealias Vec3 = (T, T, T)

别名的使用会更加灵活。
如例子所展示,可以声明一个key为字符串的类型,或者值为字符串的类型。

//一个key为String,value为T的字典
typealias StringDictionary = Dictionary

//一个value为String的字典
typealias DictionaryOfStrings = Dictionary

let keyIsStringDict: StringDictionary = ["key":6]
let valueIsStringDict: DictionaryOfStrings = [5:"value"]

//当然也可以使用在函数参数里
func joinKey(dict: StringDictionary) -> 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) -> Int

上面的例子就定义了一个参数类型为T,返回值为Int的闭包。

在指定tuple时也很有用,比如:

typealias Vec3 = (T, T, T)

func perimeter(data: Vec3) -> Int {
    return data.0 + data.1 + data.2
}

let triangle = (1,2,3)
let result = perimeter(data: triangle)

//result 为 6

声明了一个有三个元素并且元素类型都一致的tuple,例子中用来表示一个三角形,写了一个perimeter方法来求周长。

相关链接:
SE048-Generic Type Aliases

你可能感兴趣的:(Swift 3必看:typealias支持泛型)