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