2015-12-27 2 views
0

Я большой словарь в моем приложении выглядит следующим образом:Каким образом можно фильтровать словарь [[String: String]]

var data = [["type":"Sport", "model":"R6"],["type":"Enduro", "model":"Tenerre"],["type":"Chopper", "model":"Intruder"]] 

, который я хотел бы отсортировать в UISearchController использования этой функции func updateSearchResultsForSearchController(searchController: UISearchController)

внутри этой функции до Я хотел бы, чтобы отфильтровать мой массив по «типу» не используется for но filter(includeElement: (Self.Generator.Element) throws -> Bool) но я Получать сообщение об ошибке Cannot convert value of type String -> Bool to expected argument type ([String:String]) -> Bool

Я делаю что-то вроде этого:

self.data.filter({ (type: String) -> Bool in 
     return true  
    }) 

как я должен делать это правильно?

ответ

1

data имеет такой тип [[String:String]]. Другими словами, это Array of [String:String].

Значок закрытия, который вы передаете filter, должен иметь следующий тип: [String: String].

Вы можете использовать следующий код и заменить мою простую return true своей логикой.

let filteredData = self.data.filter { (dict:[String:String]) -> Bool in 
    return true 
} 

Пожалуйста, имейте в виду, что dict является я-й элемент массива data.

+1

Вы можете упростить так: 'self.data.filter {$ 0 [" type "] ==" yourFilter "}' – ebluehands

+0

Абсолютно верно! В моем коде я использовал «расширенную версию», чтобы уточнить, что парам закрытия является «[String: String]». Но спасибо, что указали! –

+0

@ebluehands не могли бы вы объяснить мне, что это значит '{$ 0 [" type "] ==" yourFilter "}' особенно "$ 0" – PiterPan

Смежные вопросы