Swift 中的双打是否具有可比性

Are Doubles Comparable in Swift

Swift3,Xcode8β2.
我已经实现了一个 class 来对 Comparable 数据进行排序,并尝试使用 Doubles 对其进行测试。不幸的是,我收到错误 "Cannot convert value of type '[Double]' to specified type '[T]'."。我在下面的示例代码中重现了错误:

class foo<T: Comparable> {
    let data: [T]  = [Double]()
}

我假设 Doubles 是 Comparable 是否正确?如果是这样,我该如何消除上述错误?
谢谢

您的 属性 具有通用类型,T:它不能声明为持有具体类型。只需在声明中使用 [T],并在实例化 class.

时使用 Double

对于我的示例,我还将 属性 设为 var 以便我可以对其进行修改:

class Foo<T: Comparable> {
    var data: [T] = [T]()
}

let f = Foo<Double>()
f.data = [42.0, 33.0]
f.data.sort()
print(f.data)

给予

[33.0, 42.0]

符合预期。

这段代码的问题

class Foo<T: Comparable> {
    let data: [T]  = [Double]()
}

是你将data声明为泛型,必须是Comparable。这意味着它可以包含 T 类型的任何值。 T是在使用class时定义的。

Foo<String>()
Foo<Double>()
Foo<Bool>()

看上面的例子。在第一种情况下 TString。有了这些信息,应该清楚这一行无法编译

let data: [T]  = [Double]()

因为这相当于写作

let data: [String]  = [Double]()

这显然是错误的。

解决方案

正如 @Eric D 所建议的那样。

class Foo<T: Comparable> {
    let data: [T]  = []
}

现在数据中填充了正确类型的空数组。

例子

所以在这种情况下

Foo<String>()

String的数组。

在这种情况下

Foo<Double>()

它填充了一个数组 Double

最后在这种情况下

Foo<Bool>()

数组 Bool.