如何在Swift中创建一个接受双打和Ints的泛型类

时间:2015-02-03 15:29:47

标签: swift generics

我有一个Point类。我希望能够使用Ints和Doubles,如下所示:

var p1 = Point<Int>(dimensions:3)
var p2 = Point<Double>(dimension:3)

我认为以下内容可能有用:

  class Point<T> {
/* n dimensional point
 multiline comments ...
*/
let point : [T]
init(dimensions: Int, repeatedValue:T=0.0){
    self.point = Array(count: dimensions, repeatedValue: repeatedValue)

}

}

但事实并非如此。

然后我尝试了:

  class Point<T:FloatLiteralConvertible> {
/* n dimensional point
 multiline comments ...
*/
let point : [T]
init(dimensions: Int, repeatedValue:T=0.0){
    self.point = Array(count: dimensions, repeatedValue: repeatedValue)

}

}

但后来我无法创建

 var p2 = Point<Int>(dimension:3)

我似乎无法找到解决这个问题的方法。斯威夫特不允许你这样做吗?

1 个答案:

答案 0 :(得分:1)

IntDouble都符合IntegerLiteralConvertible, 因此,您可以将类定义为

class Point<T:IntegerLiteralConvertible> {

    let point : [T]

    init(dimensions: Int, repeatedValue: T = 0){
        self.point = Array(count: dimensions, repeatedValue: repeatedValue)
    }
}

但请注意,如果您想对值进行一些算术运算,那么您将会这样做 必须定义一个定义所需操作的自定义协议。 见Swift generics: requiring addition and multiplication abilities of a type 例如,如何做到这一点。