2015-05-17 26 views
0

我想在數組上使用過濾器,但我不斷收到此錯誤。我檢查了早先的答案,但我已經在我的對象上實現了「equatable」。無法調用具有參數列表的過濾器'((_) - > _)'[已經實現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,你可以直接返回它。還有一些額外的括號。

相關問題