UserDefaults не получит мой массив строк правильно

Я пытаюсь создать механизм, который позволяет пользователям сохранять элементы в избранном (который представляет собой массив), а затем сохранять его в UserDefaults, однако я не могу заставить его правильно писать в UD. Печать UDSaved в приведенном ниже примере возвращает [], хотя я только что добавил элемент в массив.

У кого-нибудь есть идеи, что я делаю не так?

Это синтаксическая ошибка, и я не получаю это правильно или есть проблема с моей логикой?

var favouritesArray: [String] = []

func UDWrite() {UserDefaults.standard.set(favouritesArray, forKey: "UDfavouritesArray")}
let UDSaved = UserDefaults.standard.stringArray(forKey: "UDfavouritesArray") ?? [String]()


favouritesArray.append("element")
UDWrite()

print(UDSaved)

1 ответ

Решение

Как указано в комментариях: UDSaved никогда не обновляется. Мое решение было бы сделать UDSaved функция вроде так:

var favouritesArray: [String] = []

func UDWrite() {UserDefaults.standard.set(favouritesArray, forKey: "UDfavouritesArray")}
func UDSaved() -> [String] {return UserDefaults.standard.stringArray(forKey: "UDfavouritesArray") ?? [String]}()

favouritesArray.append("element")
UDWrite()

print(UDSaved())

Или вы можете сделать это вычисляемым свойством

var UDSaved: [String] {
   return UserDefaults.standard.stringArray(forKey: "UDfavouritesArray") ?? [String]
}
Другие вопросы по тегам