Это должно сработать.
var array = [["name":"joe", "status":true ],["name":"will", "status":true],["name":"smith" , "status":false]]
let filteredDictionary = array.filter( { $0["status"] as? Bool ?? false } )
var names = [String]()
for dictionary in filteredDictionary {
if let nameFound = dictionary["name"] as? String {
names.append(nameFound)
}
}
Я рекомендую использовать struct
для хранения значений вместо словаря.Примерно так.
struct Person {
var name: String
var status: Bool
}
Если у вас есть это в массиве Person
, это становится менее сложным, так как можно избежать необязательной обработки значения словаря.
var personArray = [Person(name: "joe", status: true), Person(name: "will", status: false)
let names = personArray.filter( {$0.status} ).map( {$0.name} )