gpt4 book ai didi

ios - 从 plist 中检索多行

转载 作者:行者123 更新时间:2023-11-30 10:51:34 26 4
gpt4 key购买 nike

我的 plist 中有一些代码数据。我正在尝试使用 Xcode 来阅读它。基本上我想检索满足给定条件的多行

我只能使用以下代码检索 1 行:但我无法检索超过 1 行。例如我有以下行

住宿 col1 col2 col31.a. b. C1.d. e.

print(getDateForDate(日期:“1”))

func getSwiftArrayFromPlist(name: String) -> (Array<Dictionary<String,String>>)
{
let path = Bundle.main.path(forResource: name, ofType: "plist")
var arr : NSArray?
arr = NSArray(contentsOfFile: path!)
return(arr as? Array<Dictionary<String,String>>)!
}
func getDateForDate(date: String) -> (Array<[String:String]>)
{
let array = getSwiftArrayFromPlist(name: "file")
let namePredicate = NSPredicate(format: "Lodging = %@", date)
return [array.filter{namePredicate.evaluate(with: $0)}[0]]
}

上面的代码能够检索第 1 行,但不能检索第 2 行。我想提取与条件匹配的所有行。不止一个

最佳答案

首先,我们不鼓励您使用 NSArrayNSDictionary API 读取 plist。使用 PropertyListSerialization 或更好地将属性列表反序列化为具有 Codable 协议(protocol)的结构。

func getSwiftArrayFromPlist(name: String) -> [[String:String]]
{
let url = Bundle.main.url(forResource: name, withExtension: "plist")!
let data = try! Data(contentsOf: url)
return try! PropertyListSerialization.propertyList(from: data, format: nil) as! [[String:String]]
}

您的谓词过滤数组并返回第一个对象[0],将行更改为

return array.filter{namePredicate.evaluate(with: $0)}

其中的NSPredicate是多余的,在Swift中可以直接过滤。返回类型周围的括号也是多余的

func getDateForDate(date: String) -> [[String:String]]
{
let array = getSwiftArrayFromPlist(name: "file")
return array.filter{ $0["Lodging"]! == date }
}

关于ios - 从 plist 中检索多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54413590/

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