ios - 如何从 userdefaults 键中查找匹配值
问题描述
我还是 Swift 的新手,所以我会尽力解释这一点......
我有一个字典数组的 plist。这是其中的一部分:
因此,使用下面的代码,我只想在标题键与 userdefaults 键匹配时才在数据变量中添加信息。因此,如果“title”键的值与我的 userdefaults 中的类似键匹配,则将其添加到数据中(然后用于填充我的 tableview)。我整天都在试图解决这个问题,但没有成功,所以请帮忙。
if let url = Bundle.main.url(forResource: "categories", withExtension: "plist"),
let contents = NSArray(contentsOf: url)!.sortedArray(using: [NSSortDescriptor(key: "tag", ascending: true)]) as? [[String:String]]
{
data = contents
}
解决方案
根本不要NSArray(contentsOf
在 Swift 中使用。有PropertyListSerialization
和PropertyListDecoder
。并且为了避免对数据进行排序的额外步骤,保存相应排序的属性列表。
创建一个结构
struct Item {
let favorite, tag, title, text : String
}
如果值UserDefaults
不是,则加载并过滤数据nil
let savedTitle = UserDefaults.shared.string(forKey: "title")
let url = Bundle.main.url(forResource: "categories", withExtension: "plist")!
do {
let data = try Data(contentOf: url)
let contents = try PropertyListDecoder().decode([Item].self, from: data)
let filteredItems = savedTitle == nil ? contents : contents.filter{$0.title == savedTitle!}
} catch {
print(error)
}
推荐阅读
- android - 如何测量 Android 应用程序中操作的响应时间?
- c# - 如果我更改任何内容,我可以更快地读取 CSV 文件吗?readlines 是最好的方法吗?
- powershell - 如何使用 power shell 命令获取 hyper-v 主机详细描述?
- scala - Spark结构化流:获取1分钟窗口聚合的第二行
- excel - 在列中满足值后发送电子邮件
- javascript - 如何自动检测 DOM 中的元素以填充 const 数组?
- visual-studio-code - 每次在 VSCode 中启动 RLS 时出现“重复的 RLS 配置”
- python - 对 Pandas df 中的列组合进行详尽搜索
- mysql - MariaDB 查询使用 IN 和 LIMIT by row
- python - PyCharm 社区版