双打在Swift中是否可以比较

时间:2016-07-12 12:12:17

标签: swift3 xcode8-beta2

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

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

我是否正确假设双打是可比较的,如果是,我如何消除上述错误?
THX。

2 个答案:

答案 0 :(得分:1)

此代码的问题

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

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

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

答案 1 :(得分:0)

您的属性具有泛型类型T:它不能被声明为持有具体类型。只需在声明中使用[T],并在实例化类时使用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]

正如所料。