为什么Swift Xcode 10.1中的iflet代码会抛出线程1:信号SIGABART



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 = ""

切勿对if let使用强制强制转换。永远不要强制强制强制转换为可选。两者都没有任何意义。

即使你解决了这个问题,你也会遇到问题。如果键还没有任何内容,则首先将字符串写入用户默认值。但随后您尝试读取数组。这是行不通的。

简化您的代码,并始终编写读数组。

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

尝试将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

最新更新