首页 > 解决方案 > 如何从 userdefaults 键中查找匹配值

问题描述

我还是 Swift 的新手,所以我会尽力解释这一点......

我有一个字典数组的 plist。这是其中的一部分:

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
}

标签: iosswiftxcodedictionarynsuserdefaults

解决方案


根本不要NSArray(contentsOf在 Swift 中使用。有PropertyListSerializationPropertyListDecoder。并且为了避免对数据进行排序的额外步骤,保存相应排序的属性列表。

创建一个结构

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)
}

推荐阅读