Ios 使用谓词-swift3的字典过滤器数组

Ios 使用谓词-swift3的字典过滤器数组,ios,swift3,closures,Ios,Swift3,Closures,我有一大堆字典 >[{"name": "John", "address": {"home": "addr1", "work": "add2"} }, {"name": "Anu", "address": {"home": "addr1", "work": "add2"} }] 我将它保存为用户默认值,如下所示- 让personsData1=[“name”:“John”,“address”:{“home”:“addr1”,“work”:“add2”}]作为[String:Any] 让

我有一大堆字典

>[{"name": "John",
"address": 
{"home": "addr1", 
"work": "add2"}
},
{"name": "Anu",
"address": {"home": "addr1", 
"work": "add2"}
}]
我将它保存为用户默认值,如下所示-

让personsData1=[“name”:“John”,“address”:{“home”:“addr1”,“work”:“add2”}]作为[String:Any] 让personsData2=[“name”:“Anu”,“address”:{“home”:“addr1”,“work”:“add2”}]作为[String:Any]

var persons = [personsData, personsData1]
UserDefaults.standard.set(forKey: "persons") 
在另一个方法中检索并根据名称对其进行筛选。 让name=“约翰”

低于误差

无法使用类型为“((任何?->Bool)”的参数列表调用“过滤器”

代码如下:-

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: $0) }

        print("names = \(filteredArray)")
    }
}
如果我尝试这样过滤-

let filteredArray = savedBrs.filter { $0["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:$0) } 

print(result)
let result = arr.filter { $0["name"] as? String  == neededName }
没有预测的
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:$0) } 

print(result)
let result = arr.filter { $0["name"] as? String  == neededName }

使用
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:$0) } 

print(result)
let result = arr.filter { $0["name"] as? String  == neededName }
没有预测的
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:$0) } 

print(result)
let result = arr.filter { $0["name"] as? String  == neededName }

请在问题中包含过滤数组的代码。请在问题中包含过滤数组的代码。我这样声明字典-让arr1:[[String:Any]=[[“name”:“Rego”,“address”:[“one”:“peek”,“two”:“geelo”]],[“name”:“pppp”,“address”:[“one”:“peek”,“two”:“geelo”]]我们不能使用Any吗?默认情况下,如果我保存并从用户默认值中检索此值,则此声明将给出[[String:Any]],我将获得错误->读取use UserDefaults.standard.array(forKey:“persons”)时,类型为“Any”的值没有成员“filter”。谢谢我像正常值一样检索它我像这样声明字典-让arr1:[[String:Any]=[[“name”:“Rego”,“address”:[“one”:“peek”,“two”:“geelo”],[“name”:“pppp”,“address”:[“one”:“peek”,“two”:“geelo”]]我们不能使用任何吗?此声明默认情况下会给出[[String:Any]]如果我保存并从用户默认值中检索此值,则在读取use UserDefaults.standard.array(forKey:“persons”)时,我会得到错误->类型为“Any?”的值没有成员“filter”。谢谢我像正常值一样检索它