Как добавить значения в массив из UserDefaults? - PullRequest
1 голос
/ 06 октября 2019

Я пытался добавить значения в массив из UserDefaults.standard.

мой шаг:

  1. добавление значения в UserDefaults.
  2. проверкаUserdefautls, чтобы увидеть, имеет ли оно значение (от 0 до 100)
  3. , если оно имеет значение в UserDefaults, добавив значение в массив.

    @IBAction func addfavorite(_ sender: Any) {
        UserDefaults.standard.set(myIndex, forKey:arr[myIndex])
    }
    
    for myIndex in 0..<100 {
        if UserDefaults.standard.bool(forKey:arr[myIndex]) != nil { 
            favoriteArr.append(myIndex)
        }
    }
    

Сравнение необязательного значения типа 'Bool' с 'nil' всегда возвращает true

1 Ответ

1 голос
/ 06 октября 2019

Проблема в том, что метод bool(forKey:) всегда будет возвращать false, если для ключа нет значения, поскольку он возвращает необязательный Bool. Альтернативой для проверки на nil является использование UserDefaults метода object(forKey:), который возвращает Any?

Если ваше намерение состоит в том, чтобы просто сохранить массив целых чисел, вы можете расширить UserDefaults и создать вычисляемое свойство с помощью getterи установщик для автоматического сохранения ваших данных:

extension UserDefaults {
    var favorites: [Int] {
        get { array(forKey: "favorites") as? [Int] ?? [] }
        set { set(newValue, forKey: "favorites") }
    }
}

UserDefaults.standard.favorites = []
UserDefaults.standard.favorites.append(2)
UserDefaults.standard.favorites.append(7)
UserDefaults.standard.favorites // [2,7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...