Swift泛型:约束参数类型

时间:2016-04-24 15:43:18

标签: swift generics

来自C ++背景(模板),我很难理解为什么下面的Swift代码(泛型)不能编译:

func backwards<T>(array: [T]) -> [T] {
    let reversedCollection = array.sort(>)

    return reversedCollection
}

我理解的方式是T是一种泛型类型,我没有对其进行任何约束(<T>)并声明arrayArray<T>类型。然而,这会产生以下错误:

  

对成员&#39; sort()&#39;

的模糊引用

我知道可以使用协议将约束放在泛型类型上。但是,在这种情况下,我不希望T有任何约束。相反,我想约束第一个参数的类型。

我已经阅读了Apple关于通用类型的文档几个小时了,但我仍然没有那么明智。我的印象是,这是不可能的,并且仅仅对已声明的类型施加约束,但就我而言,这只是约束。

所以问题是:如果可能的话,我如何对函数参数的类型设置约束?如果没有,我如何获得相同的结果?

1 个答案:

答案 0 :(得分:3)

仅当ElementComparable时,

[T]才合法。由于T的元素类型为TComparable必须符合[T]才能使数组>可以通过func backwards<T: Comparable>(array: [T]) -> [T] { let reversedCollection = array.sort(>) return reversedCollection } 进行排序:

Textdocument
相关问题