使用谓词的字典过滤器数组 - swift3
Array of dictionary filter using predicate - swift3
我有很多字典。
>[{"name": "John",
"address":
{"home": "addr1",
"work": "add2"}
},
{"name": "Anu",
"address": {"home": "addr1",
"work": "add2"}
}]
我像这样将它保存为用户默认值 -
让 personsData1 = ["name": "John", "address": {"home": "addr1", "work": "add2"}] 作为 [字符串:任何]
让 personsData2 = ["name": "Anu", "address": {"home": "addr1", "work": "add2"}] 作为 [字符串:任意]
var persons = [personsData, personsData1]
UserDefaults.standard.set(forKey: "persons")
用另一种方法检索它并根据名称过滤它们。
让名字=“约翰”
低于错误
无法使用类型为“((Any?) -> Bool)”的参数列表调用 'filter'
这是代码:-
func test () {
let personData1 = ["name": "John", "addresses": ["home":"addr1", "work": "addr2"]] as [String : Any]
let personData2 = ["name": "And", "addresses": ["home":"addr1", "work": "addr2"]] as [String : Any]
let persons = [personData1, personData2]
(UserDefaults.standard.set(persons, forKey: "persons")
print("Saved ----\(UserDefaults.standard.value(forKey: "persons"))")
if let savedPersons = UserDefaults.standard.value(forKey: "persons") {
let namePredicate = NSPredicate(format: "name like %@", name);
var filteredArray: [[String:Any]] = savedPersons.filter { namePredicate.evaluate(with: [=12=]) }
print("names = \(filteredArray)")
}
}
如果我尝试这样过滤 -
let filteredArray = savedBrs.filter { [=13=]["name"] == name }
出现不同的错误 -
类型 'Any' 的值没有成员 'filter'
和NSPredicate
let arr = [["name":"Rego","address":["one":"peek","two":"geelo"]],["name":"pppp","address":["one":"peek","two":"geelo"]]]
let neededName = "Rego"
let pre = NSPredicate(format: "name == %@",neededName)
let result = arr.filter { pre.evaluate(with:[=10=]) }
print(result)
没有NSPredicate
let result = arr.filter { [=11=]["name"] as? String == neededName }
我有很多字典。
>[{"name": "John",
"address":
{"home": "addr1",
"work": "add2"}
},
{"name": "Anu",
"address": {"home": "addr1",
"work": "add2"}
}]
我像这样将它保存为用户默认值 -
让 personsData1 = ["name": "John", "address": {"home": "addr1", "work": "add2"}] 作为 [字符串:任何] 让 personsData2 = ["name": "Anu", "address": {"home": "addr1", "work": "add2"}] 作为 [字符串:任意]
var persons = [personsData, personsData1]
UserDefaults.standard.set(forKey: "persons")
用另一种方法检索它并根据名称过滤它们。 让名字=“约翰”
低于错误
无法使用类型为“((Any?) -> Bool)”的参数列表调用 'filter'
这是代码:-
func test () {
let personData1 = ["name": "John", "addresses": ["home":"addr1", "work": "addr2"]] as [String : Any]
let personData2 = ["name": "And", "addresses": ["home":"addr1", "work": "addr2"]] as [String : Any]
let persons = [personData1, personData2]
(UserDefaults.standard.set(persons, forKey: "persons")
print("Saved ----\(UserDefaults.standard.value(forKey: "persons"))")
if let savedPersons = UserDefaults.standard.value(forKey: "persons") {
let namePredicate = NSPredicate(format: "name like %@", name);
var filteredArray: [[String:Any]] = savedPersons.filter { namePredicate.evaluate(with: [=12=]) }
print("names = \(filteredArray)")
}
}
如果我尝试这样过滤 -
let filteredArray = savedBrs.filter { [=13=]["name"] == name }
出现不同的错误 -
类型 'Any' 的值没有成员 'filter'
和NSPredicate
let arr = [["name":"Rego","address":["one":"peek","two":"geelo"]],["name":"pppp","address":["one":"peek","two":"geelo"]]]
let neededName = "Rego"
let pre = NSPredicate(format: "name == %@",neededName)
let result = arr.filter { pre.evaluate(with:[=10=]) }
print(result)
没有NSPredicate
let result = arr.filter { [=11=]["name"] as? String == neededName }