почему это так, если пусть код в Swift Xcode 10.1 выбрасывает поток 1: сигнал SIGABART - PullRequest
0 голосов
/ 22 ноября 2018

Этот код в Swift Xcode 10.1 продолжает выдавать сообщение 1: ошибка SIGABART, и я не знаю, почему.

    let item = UserDefaults.standard.object(forKey: "To Does")
    var arrayItem:[String]
    print("about to check")
    if let arrayItem2 = item as! [String]?{

        arrayItem = arrayItem2
        arrayItem.append(textInput.text!)
        UserDefaults.standard.set(arrayItem, forKey: "To Does")
        print(arrayItem)

    }else{
        UserDefaults.standard.set(textInput.text!, forKey: "To Does")
    }
    textInput.text = ""

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Никогда не используйте принудительное приведение с if let.Никогда не применяйте силу к дополнительному.Не имеет никакого смысла.

Даже после того, как вы исправите это, у вас есть проблема.Сначала вы записываете строку в пользовательские значения по умолчанию, если для ключа еще ничего нет.Но затем вы пытаетесь прочитать массив.Это никогда не сработает.

Упростите свой код и всегда пишите прочитанный массив.

var items = UserDefaults.standard.array(forKey: "To Does") as? [String] ?? []
items.append(textInput.text!)
UserDefaults.standard.set(items, forKey: "To Does")
0 голосов
/ 22 ноября 2018

Попробуйте распечатать item на консоли.Скорее всего, это ни nil, ни [String], и он не может выполнить принудительное приведение.

Если это не так - вы можете использовать более простое приведение.Попробуйте это на детской площадке:

let item: Any? = 2
var arrayItem: [String] = []
print("about to check")
if let arrayItem2 = item as? [String] {

    arrayItem = arrayItem2
    arrayItem.append("foo")
    print(arrayItem)
} else {
    print("doing nothing")
}

Выходы:

about to check
doing nothing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...