gpt4 book ai didi

swift - 无法使用类型为 'isEqualToString' 的参数列表调用 '(String)'(来自闭包)

转载 作者:行者123 更新时间:2023-11-28 10:34:38 27 4
gpt4 key购买 nike

这个问题源于比较结构的两个不同条件。

通常,如果结构的 ID 是唯一的,我希望该结构是唯一的。但这不是这里问题的一部分……在这里,我需要从它们构建一个独特的集合,其中唯一性来自多个条件。我正在构建一个 condition 闭包数组,然后在自定义 TimeSeries 类中测试每个闭包,这就是计划(尽管覆盖集合条件的方法会让我使用简单就好)。但是我遇到了闭包本身的问题。

{(_ entry: TimeSeriesEntry, _ set: [TimeSeriesEntry]) -> Bool in
return !set.contains({ item in item.id.isEqualToString(entry.id) })
}

我不清楚为什么报告 Cannot invoke 'isEqualToString' with an argument list of type '(String)' TimeSeriesEntry.id 被定义为 String 而不是 (字符串):

struct TimeSeriesEntry: Codable, Equatable {
let id: String
let uid: String
let date: Date
let apps: [String:Double]
let locations: [String:Bool]
}

最佳答案

isEqualToString 属于 NSString。在原生 Swift 中,这要容易得多

{(entry, set) -> Bool in // the underscores and types are unused in Swift 3+
return !set.contains { $0.id == entry.id }
}

这样会更有效率

!set.map{$0.id}.contains(entry.id)

关于swift - 无法使用类型为 'isEqualToString' 的参数列表调用 '(String)'(来自闭包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54224630/

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