gpt4 book ai didi

swift - 无法在 Swift 数组扩展中使用包含

转载 作者:IT王子 更新时间:2023-10-29 05:29:30 26 4
gpt4 key购买 nike

我正在尝试编写一个提供“不同”方法的简单数组扩展。这是我目前所拥有的:

extension Array {
func distinct() -> T[] {
var rtn = T[]()

for x in self {
var containsItem = contains(rtn, x)
if !containsItem {
rtn.append(x)
}
}
return rtn
}
}

问题是 'contains' 语句失败如下:

找不到接受所提供参数的“包含”的重载

我很确定类型约束是正确的。有什么想法吗?

最佳答案

swift 1.x

array 中的元素不必是 Equatable,即它们不必与 == 进行比较。

这意味着您不能为所有 可能的数组编写该函数。而且 Swift 不允许您仅扩展数组的一个子集。

这意味着您应该将它写成一个单独的函数(这可能就是为什么 contains 也不是方法的原因)。

let array = ["a", "b", "c", "a"]

func distinct<T: Equatable>(array: [T]) -> [T] {
var rtn = [T]()

for x in array {
var containsItem = contains(rtn, x)
if !containsItem {
rtn.append(x)
}
}
return rtn
}

distinct(array) // ["a", "b", "c"]

Swift 2/Xcode 7(测试版)更新

Swift 2 支持限制对协议(protocol)实现子集的扩展,因此现在允许以下内容:

let array = ["a", "b", "c", "a"]

extension SequenceType where Generator.Element: Comparable {
func distinct() -> [Generator.Element] {
var rtn: [Generator.Element] = []

for x in self {
if !rtn.contains(x) {
rtn.append(x)
}
}
return rtn
}
}

array.distinct() // ["a", "b", "c"]

请注意苹果如何使用相同的语法添加 SequenceType.contains

关于swift - 无法在 Swift 数组扩展中使用包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24091046/

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