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