无法用参数列表调用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 ,你可以直接返回它。 还有一些额外的括号。