1

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

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

我是正确的假设双打是可比的,如果是这样,我该如何消除上述错误?
谢谢。

4

2 回答 2

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]  = []
}

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

例子

所以在这种情况下

Foo<String>()

它是一个数组String

在这种情况下

Foo<Double>()

它填充了一个数组Double

最后在这种情况下

Foo<Bool>()

有一个数组Bool

于 2016-07-12T12:22:32.227 回答
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]

正如预期的那样。

于 2016-07-12T12:16:32.150 回答