gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:56:26 25 4
gpt4 key购买 nike

我有一系列字典。

>[{"name": "John",
"address":
{"home": "addr1",
"work": "add2"}
},
{"name": "Anu",
"address": {"home": "addr1",
"work": "add2"}
}]

我像这样将它保存为用户默认值 -

让 personsData1 = ["name": "John", "address": {"home": "addr1", "work": "add2"}] as [String : Any]让 personsData2 = ["name": "Anu", "address": {"home": "addr1", "work": "add2"}] as [String : Any]

var persons = [personsData, personsData1]
UserDefaults.standard.set(forKey: "persons")

用另一种方法检索它并根据名称过滤它们。让 name = "John"

低于错误

无法使用“((Any?) -> 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)

没有 NSPredicate

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

关于ios - 使用谓词的字典过滤器数组 - swift3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51831702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com