我收到编译错误,我不确定原因。我确信这有一个简单的答案。我有一个核心数据属性,我想在保存之前分配。在我的Core Data Property文件中,它被定义为:
@NSManaged public var age: Int32
我正在使用UIPicker来选择它并将其放入inputView。这很好,所以ageTextField: UITextField!
保持价值。当我尝试在保存之前将其分配给CoreData对象时,我得到以下内容
person.age = ageTextField.text -> Cannot assign String? to Int32.
好的,我理解,所以我施展它
person.age = Int(ageTextField.text) -> Value of Optional String not unwrapped...
好的,我明白了,所以我打开它,它要求再打开并且我同意:
person.age = Int(ageTextField.text!)! -> Type of expression is ambiguous without more context
我不确定这里有什么问题,只是查看我的一些旧的Swift 2代码,这很有效。这是我使用Swift 3的第一个代码。
答案 0 :(得分:2)
编译器错误最多是模糊不清,最糟糕的是误导。将您的演员表更改为Int32
:
person.age = Int32(ageTextField.text!)!
另外:除非您完全确定用户将始终在文本字段中输入有效数字,否则请使用可选绑定而不是强制解包:
if let text = ageTextField.text,
let age = Int32(text)
{
person.age = age
}
答案 1 :(得分:1)
当前的问题是使用了错误的类型。使用Int32
,而不是Int
。但即使修复过,你还有很多其他问题。
您应该安全地解开文本,然后尝试将字符串转换为整数。
if let text = ageTextField.text, let num = Int32(text) {
person.age = num
}
如果文本为!
或包含的值不是有效数字,则使用所有nil
将导致崩溃。始终使用安全展开。
答案 2 :(得分:0)
请确保在转换前打开可选项。使您的代码安全。