swift - 如何在 Swift 中创建接受 Double 和 Int 的泛型类

标签 swift generics

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

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 不允许你这样做吗?

最佳答案

IntDouble 均符合 IntegerLiteralConvertible, 因此你可以将类定义为

class Point<T:IntegerLiteralConvertible> {

    let point : [T]

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

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

关于swift - 如何在 Swift 中创建接受 Double 和 Int 的泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28302650/

相关文章:

java - 为什么此代码会因 sourceCompatibility=1.8 而失败

c# - 为什么 C# 4.0 中的类没有泛型变化?

objective-c - 如何同步运行WebView.mainFrame.loadRequest?

swift - RxSwift "tableView.rx.modelSelected"多次调用

ios - 可以重新调整 SKPayment.applicationUsername 的用途吗?

generics - Rust image::SubImage,找不到类型为 `put_pixel`的方法吗?

ios - 尝试重新访问之前在 SwiftUI 中单击的 NavigationLink 时,NavigationLink 卡住

ios - 我如何在 IOS 谷歌地图 SDK 中计算从 A 点到 B 点的距离?

去泛型 - 联合

C# 泛型类运算符不工作