如果在Swift Xcode 10.1中让代码抛出线程1,为什么会这样:信号SIGABART

时间:2018-11-22 04:17:12

标签: swift

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 :(得分:2)

切勿对if let使用强制转换。切勿强行将其强制转换为可选内容。两者都没有任何意义。

即使修复后仍然遇到问题。如果没有密钥,则首先将字符串写入用户默认值。但是,然后您尝试读取一个数组。那永远都行不通。

简化代码,并始终编写一个读取数组。

var items = UserDefaults.standard.array(forKey: "To Does") as? [String] ?? []
items.append(textInput.text!)
UserDefaults.standard.set(items, forKey: "To Does")

答案 1 :(得分:0)

尝试打印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