C 开发者对 Swift 亮点的点评(2)

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

相当的有用!为什么你这次会想到这个特性似乎并不清楚,但是相信我:机会是无穷无尽的。你会很快开始明白在自己的代码里何处会用到这些。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/97c0734d66e501553a4fb740d6d48d05.html