无法使用参数列表调用过滤器'((_) - > _)'[已实现equatable]

时间:2015-05-17 01:10:24

标签: ios swift

我正在尝试在数组上使用过滤器,但我一直收到此错误。我查看了之前的答案,但我已经在我的对象上实现了“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
}

1 个答案:

答案 0 :(得分:1)

编译器错误有点误导。如果你真的在测试一个FilterOption是否等于另一个{在filter闭包中比较对象时常见的问题,那么你必须使它符合Equatable。但这不是问题所在。

在这种情况下,问题只是代码引用的是currentValue,而不是currentSetting。如果你修复它,编译器错误就会消失。

顺便说一下,您可以简化filter语句:

let filteredDistance = distanceArray.filter { $0.currentSetting }

currentSetting已经是Bool,因此,如果您正在测试它是否true,您可以直接退回。还有一些无关的括号。