此问题源于比较结构的两个不同条件。
通常,如果结构的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]
}
答案 0 :(得分:2)
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)
答案 1 :(得分:1)
您可以仅检查条目的crosscheck
是否等于id
中某个元素的id
属性
set