gpt4 book ai didi

swift 泛型 : Constraining Argument Types

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:26 25 4
gpt4 key购买 nike

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

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

return reversedCollection
}

我的理解是T是一个通用类型,我不对其施加任何约束( <T> )并声明 array类型为 Array<T> .然而这会产生以下错误:

Ambiguous reference to member 'sort()'

我知道可以使用协议(protocol)对泛型类型施加约束。但是,在这种情况下,我不希望对 T 有任何限制。 .相反,我想限制第一个参数的类型。

我已经阅读了 Apple 关于泛型类型的文档几个小时了,但我仍然没有变得更聪明。我的印象是这是不可能的,并且约束仅适用于声明的类型,但据我所知。

所以问题是:如果可能的话,我该如何限制函数参数的类型?如果不是,我如何获得相同的结果?

最佳答案

sort(>) 仅当 ElementComparable 时才合法。由于 [T] 的元素类型是 TT 必须符合 Comparable 以便数组 [T] 可通过 > 排序:

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

return reversedCollection
}

关于 swift 泛型 : Constraining Argument Types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36825358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com