问题描述
我已经用套件创建了UserDefaults,
self.moviesWatchedUserDefaults = UserDefaults(suiteName: "com.apple.tv.2020")
并将信息存储在plist中,例如
self.moviesWatchedUserDefaults.set(data,forKey: key).
现在,在检索时,我想检索所有键和值。我正在使用的
var watchedList = self.moviesWatchedUserDefaults?.dictionaryRepresentation()
但是返回的列表不仅包含我存储的项目,还包含其他键,例如NSLanguages
,AppleKeyboards
,AppleKeyboardsExpanded
,CarCapabilities
等,
如何检索所有键和值(仅检索存储的键和值)?
解决方法
如果您有完整的已知键列表,则可以过滤字典。
在下面的示例中,我将所有已知的键都包含在枚举中,并且可以过滤字典,仅保留我的键:
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]