Swift CoreData - 无法分配类型' Int'输入' Int16'

时间:2017-03-07 00:52:48

标签: ios core-data

我用' 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吗?

2 个答案:

答案 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。

所以你应该确保文本有效才能转换。