来自C ++背景(模板),我很难理解为什么下面的Swift代码(泛型)不能编译:
func backwards<T>(array: [T]) -> [T] {
let reversedCollection = array.sort(>)
return reversedCollection
}
我理解的方式是T
是一种泛型类型,我没有对其进行任何约束(<T>
)并声明array
为Array<T>
类型。然而,这会产生以下错误:
对成员&#39; sort()&#39;
的模糊引用
我知道可以使用协议将约束放在泛型类型上。但是,在这种情况下,我不希望T
有任何约束。相反,我想约束第一个参数的类型。
我已经阅读了Apple关于通用类型的文档几个小时了,但我仍然没有那么明智。我的印象是,这是不可能的,并且仅仅对已声明的类型施加约束,但就我而言,这只是约束。
所以问题是:如果可能的话,我如何对函数参数的类型设置约束?如果没有,我如何获得相同的结果?
答案 0 :(得分:3)
Element
为Comparable
时, [T]
才合法。由于T
的元素类型为T
,Comparable
必须符合[T]
才能使数组>
可以通过func backwards<T: Comparable>(array: [T]) -> [T] {
let reversedCollection = array.sort(>)
return reversedCollection
}
进行排序:
Textdocument