Swift计算UITextFields的值并返回值

时间:2014-08-31 04:40:53

标签: ios variables swift uitextfield xcode6

使用swift和Xcode 6,我试图返回一个基于少量UITextFields的内容计算的值。

我已声明变量

var Number1 = Field1.text.toInt()
var Number2 = Field2.text.toInt() 

var Duration = Number1*Number2

Mylabel.text = String ("\(Duration)")

我们的想法是从少数UI字段捕获持续时间,并根据这些值的计算将其分配给变量并将其显示在标签上。

符合:var Duration = Number1 * Number2

挑战是我在执行乘法时Xcode突出显示错误:可选类型的值' Int?'没有打开;你的意思是使用'!'或者'?'?

2 个答案:

答案 0 :(得分:3)

toInt()方法返回可选值,因为它尝试转换的字符串可能不包含正确的值。例如,这些字符串将转换为nil"house""3.7"""(空字符串)。

由于值可能为niltoInt()会返回Int类型的可选Int?。如果不先打开它,就不能使用该值。这就是您收到错误消息的原因。以下是两种安全的方法来处理这个问题:

当无法转换值时,您需要决定要执行的操作。如果您只想在这种情况下使用0,那么请使用 nil coalescing operator ??),如下所示:

let number1 = field1.text.toInt() ?? 0
// number1 now has the unwrapped Int from field1 or 0 if it couldn't be converted

let number2 = field2.text.toInt() ?? 0
// number2 now has the unwrapped Int from field2 or 0 if it couldn't be converted

let duration = number1 * number2

mylabel.text = "\(duration)"

如果您希望程序不执行任何操作,除非两个字段都有有效值:

if let number1 = field1.text.toInt() {
    // if we get here, number1 contains the valid unwrapped Int from field1

    if let number2 = field2.text.toInt() {
        // if we get here, number2 contains the valid unwrapped Int from field2

        let duration = number1 * number2
        mylabel.text = "\(duration)"
    }
}

那么,当它说你的意思是使用!时,错误信息意味着什么。您可以通过在末尾添加!来展开可选值,但是您必须绝对确定该值不是第一个,否则您的应用将崩溃。所以你也可以这样做:

if number1 != nil && number2 != nil {
    let duration = number1! * number2!
    mylabel.text = "\(duration)"
}     

答案 1 :(得分:0)

在var中获取textFields的值,将它们相乘,然后设置label的值。试试这个:

var Number1 = Field1.text.toInt()
var Number2 = Field2.text.toInt() 

var Duration = Number1 * Number2

Mylabel.text = NSString(format:"%d",Duration!)as String;

希望这会有所帮助.. :)