Swift另一个重大的特性是泛型。如果你熟悉C++,你会想起像模板这样的东西。因为Swift是明确类型的,所以你必须在声明一个函数时传递确定的类型。但是有时一些功能对于多个不同的类型是一样的。这种情况的例子就是是经常用到的一对数值构成的一个结构体类型。在Swift中对于整数可以像下面这么实现:
struct IntPair {
let a: Int!
let b: Int!
init(a: Int, b: Int) {
self.a = a
self.b = b
}
func equal() -> Bool {
return a == b
}
}
let intPair = IntPair(a: 5, b: 10)
intPair.a // 5
intPair.b // 10
intPair.equal() // false
稍微有用。但是现在你想让这个类对于浮点数也适用。你可以定义FloatPair类,但是它会和上面的类非常相似。因此泛型出现了。无需再声明一个全新的类,你只要简单的像下面这样做即可:
struct Pair<T: Equatable> {
let a: T!
let b: T!
init(a: T, b: T) {
self.a = a
self.b = b
}
func equal() -> Bool {
return a == b
}
}
let pair = Pair(a: 5, b: 10)
pair.a // 5
pair.b // 10
pair.equal() // false
let floatPair = Pair(a: 3.14159, b: 2.0)
floatPair.a // 3.14159
floatPair.b // 2.0
floatPair.equal() // false
相当的有用!为什么你这次会想到这个特性似乎并不清楚,但是相信我:机会是无穷无尽的。你会很快开始明白在自己的代码里何处会用到这些。