#ios #swift #nsuserdefaults #userdefaults
#iOS #swift #nsuserdefaults #пользовательские ошибки
Вопрос:
Я создал пользовательские ошибки с помощью suite,
self.moviesWatchedUserDefaults = UserDefaults(suiteName: "com.apple.tv.2020")
И сохранять информацию в списке, например
self.moviesWatchedUserDefaults.set(data, forKey: key).
Теперь, при извлечении, я хотел получить все ключи и значения. Для чего я использую,
var watchedList = self.moviesWatchedUserDefaults?.dictionaryRepresentation()
Но возвращаемый список содержит не только элементы, которые я сохранил, но и другие ключи, такие как NSLanguages
, AppleKeyboards
, AppleKeyboardsExpanded
, CarCapabilities
и т.д.,
Как получить все ключи и значения (только те, которые я сохранил)?
Ответ №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]
Комментарии:
1. Нет, это как неизвестные ключи, которые получены из серверной части.
2. В этом случае я бы предложил два варианта: 1. Отслеживайте ключи, которые вы используете для сохранения в UserDefaults, и сохраняйте их для последующего извлечения. 2. Выберите более подходящее хранилище, например, пользовательский файл plist или базу данных. CoreData может быть хорошим выбором.