仅检索我存储在 UserDefaults 中的键和值

use*_*170 5 nsuserdefaults ios swift userdefaults

我已经用套件创建了 UserDefaults,

self.moviesWatchedUserDefaults = UserDefaults(suiteName: "com.apple.tv.2020")
Run Code Online (Sandbox Code Playgroud)

并将信息存储在 plist 中,例如

self.moviesWatchedUserDefaults.set(data, forKey: key).
Run Code Online (Sandbox Code Playgroud)

现在,在检索时,我想检索所有键和值。我正在使用的,

var watchedList = self.moviesWatchedUserDefaults?.dictionaryRepresentation()
Run Code Online (Sandbox Code Playgroud)

但返回的列表不仅包含我存储的项目,还包含其他键,如NSLanguagesAppleKeyboardsAppleKeyboardsExpandedCarCapabilities等,

如何检索所有键和值(仅我存储的键和值)?

Vad*_*aev 1

如果您有已知键的完整列表,则可以过滤字典。

在下面的示例中,我将所有已知的键都放在一个枚举中,我可以过滤字典,只保留我的键:

enum UserDefaultsKey: String, CaseIterable {
    case foo
    case bar
    case baz
}

let userDefaults = UserDefaults.standard
userDefaults.set(42, forKey: UserDefaultsKey.foo.rawValue)

let onlyMyValues = userDefaults.dictionaryRepresentation().filter { (key, _) -> Bool in
    UserDefaultsKey.allCases.map { $0.rawValue }.contains(key)
}

print(onlyMyValues) // prints ["foo": 42]
Run Code Online (Sandbox Code Playgroud)