我用' zip'声明了一个CoreData实体地址。 Int16类型的属性。
问题是,当我为该属性分配一个整数时:
address?.zip = Int(zipField.text!)
我收到错误消息说无法将类型Int的值赋给Int16类型。有道理(我猜)。
问题是,当我尝试将int转换为Int16时,XCode仍然在我身上爆炸:
let zip:Int? = Int(zipField.text!)
if zip != nil {
let zip16 = Int16(zip!)
}
我转换导致XCode崩溃的整数的那一行。我没有在错误消息中看到任何信息,所以我不确定该尝试什么。
一般情况下,由于这些手机的操作系统,我应该使用Int64吗?
答案 0 :(得分:5)
您应该从代码中删除所有!
。这只是告诉编译器“如果我做错了就在这里崩溃”:
if let str = zipField.text,
let zip = Int16(str) {
address?.zip = zip
}
此外,您应该阅读Swift的guard
语句,因为如果您没有地址,则运行任何代码都没有意义。类似的东西:
guard let addr = address else { return }
addr.zip = 90210
答案 1 :(得分:1)
您可以使用:
address?.zip = Int16(zipField.text!)
在结构Int16
的文档中,关于init?(String, radix: Int)
,有以下讨论:
如果文本与正则表达式“[+ - ]?[0-9a-zA-Z] +”不匹配,或者它在给定基数中表示的值不可表示,则结果为nil。
所以你应该确保文本有效才能转换。