Не работает код


#1

Доброго всем дня.
Есть вот такой код

@IBAction func isLikeButton(_ sender: UIButton) {

    var userDefaults: UserDefaults {
        return UserDefaults.standard
    }
    guard var isLikeDef = userDefaults.value(forKey: "Favorites") as? [String] else { return }

    isLikeDef.append(title!)
    userDefaults.set(isLikeDef, forKey: "Favorites")

}

Переменная isLikeDef , объявлена, как глобальная

В os 10.3.1 он работает, а вот в os 11 не хочет
Причем не работает именно строка

guard var isLikeDef = userDefaults.value(forKey: “Favorites”) as? [String] else { return }

если ее закоментить, то в массив добавляется новое значение, а так ничего вообще не происходит и никаких ошибок x-code не выдает

Подскажите, пожалуйста, что тут не так, поскольку моего скромного опыта явно не хватает.


#2

А если:

userDefaults.synchronize()

В конце дописать?


#3

Ну это вроде как при сохранении, а не извлечении данных

а не срабатывает именно guard var isLikeDef = userDefaults.value(forKey: “Favorites”) as? [String] else { return }


#4

Так у вас там return, так попробуйте:

let userDefaults = UserDefaults.standard
isLikeDef = userDefaults.object(forKey: "Favorites") as? [String] ?? []
isLikeDef.append(title!)
userDefaults.set(isLikeDef, forKey: "Favorites")
userDefaults.synchronize()

#5

Большое спасибо, так заработало.
Но, что интересно, заработал и прежний код в другом контроллере, который делает то же самое, то есть считывает при загрузке сохраненную переменную. Хотя там я ничего не менял.
Осталось разобраться, что тут к чему и почему