Swift 3将UITextField转换为Int

时间:2017-03-12 02:36:01

标签: swift

我收到编译错误,我不确定原因。我确信这有一个简单的答案。我有一个核心数据属性,我想在保存之前分配。在我的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的第一个代码。

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)

请确保在转换前打开可选项。使您的代码安全。