我正在尝试在数组上使用过滤器,但我一直收到此错误。我查看了之前的答案,但我已经在我的对象上实现了“equatable”。
顺便问一下,这个错误究竟意味着什么?
// trying to use filter
var distance_array = [
FilterOption(title: "0.5 miles", value:500, currentSetting: false)...]
var filtered_distance: [FilterOption]!
filtered_distance = distance_array.filter({ ($0.currentValue == true) })
// FilterOption Class
class FilterOption: NSObject, Equatable {
var title:String!
var value: AnyObject?
var currentSetting: Bool!
init(title:String, value:AnyObject?, currentSetting:Bool){
self.title = title
self.value = value
self.currentSetting = currentSetting
}
class func convertDictionaryToFilterOption(dict:Dictionary<String, String>) -> FilterOption{
return FilterOption(title:dict["name"]!, value:dict["code"]!, currentSetting: false)
}
}
func == (lhs: FilterOption, rhs: FilterOption) -> Bool {
var title = (lhs.title == rhs.title)
var setting = (lhs.currentSetting! == rhs.currentSetting!)
return title && setting
}
答案 0 :(得分:1)
编译器错误有点误导。如果你真的在测试一个FilterOption
是否等于另一个{在filter
闭包中比较对象时常见的问题,那么你必须使它符合Equatable
。但这不是问题所在。
在这种情况下,问题只是代码引用的是currentValue
,而不是currentSetting
。如果你修复它,编译器错误就会消失。
顺便说一下,您可以简化filter
语句:
let filteredDistance = distanceArray.filter { $0.currentSetting }
currentSetting
已经是Bool
,因此,如果您正在测试它是否true
,您可以直接退回。还有一些无关的括号。