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>()
看上面的例子。在第一种情况下 T
是 String
。有了这些信息,应该清楚这一行无法编译
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
.
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>()
看上面的例子。在第一种情况下 T
是 String
。有了这些信息,应该清楚这一行无法编译
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
.