无法用参数列表调用filter'((_) – > _)'
我想在数组上使用filter,但我一直得到这个错误。 我检查了以前的答案,但是我已经在我的对象上实现了“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 }
这个编译器错误是有点误导。 如果你真的testing了一个FilterOption
是否与另一个FilterOption
相同(在比较filter
闭包中的对象的时候,这是一个常见的问题),那么你必须使它符合Equatable
。 但是这不是问题。
在这种情况下,问题就在于代码引用了currentValue
,而不是currentSetting
。 如果你解决了这个问题,编译器错误就会消失。
顺便说一句,你可以简化filter
声明:
let filteredDistance = distanceArray.filter { $0.currentSetting }
currentSetting
已经是一个Bool
,所以如果你正在testing,看看是否是true
,你可以直接返回它。 还有一些额外的括号。