如何在 Swift 中创建接受双精度和整数的通用 class
How to create a generic class in Swift that accepts Doubles and Ints
我有一个观点class。我希望能够使用 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)
我似乎想不出解决这个问题的方法。 Swift不让你这样做吗?
Int
和Double
都符合IntegerLiteralConvertible
,
因此您可以将 class 定义为
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
例如如何做到这一点。
我有一个观点class。我希望能够使用 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)
我似乎想不出解决这个问题的方法。 Swift不让你这样做吗?
Int
和Double
都符合IntegerLiteralConvertible
,
因此您可以将 class 定义为
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 例如如何做到这一点。