Swift 计算 UITextFields 的值并返回值

Posted

技术标签:

【中文标题】Swift 计算 UITextFields 的值并返回值【英文标题】:Swift calculate value of UITextFields and return value 【发布时间】:2014-08-31 04:40:52 【问题描述】:

使用 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?”的值未拆封;你的意思是用'!'还是“?”?

【问题讨论】:

你有什么问题? 变量中不能有空格。这个:Number1Number2不是这个Number 1Number 2 你遇到了什么问题?从我们可以看到的代码来看,它应该可以正常工作(除了变量名中的空格)。 行内:var Duration = Number1*Number2 挑战是我在执行乘法时 Xcode 突出显示错误:可选类型“Int?”的值未拆封;你的意思是用'!'还是“?”? 在下面查看我的答案。我告诉你如何处理可选值。 【参考方案1】:

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

因为值可能是nil,所以toInt() 返回一个可选的Int,它是Int? 类型。如果不先打开它,您将无法使用该值。这就是您收到错误消息的原因。以下是两种安全的处理方法:

当一个值无法转换时,您需要决定要做什么。如果你只是想在这种情况下使用0,那么像这样使用 nil 合并运算符 (??):

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)"
    

那么,当错误消息说您的意思是使用! 时,它是什么意思。您可以通过在末尾添加 ! 来解开可选值,但您必须首先绝对确定该值不是 nil,否则您的应用会崩溃。所以你也可以这样做:

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

【讨论】:

行内:var Duration = Number1*Number2 挑战是我在执行乘法时 Xcode 突出显示错误:可选类型“Int?”的值未拆封;你的意思是用'!'还是“?”? 是的,非常感谢它有效。使用声明变量:let number1 = field1.text.toInt() ?? 0 成功!【参考方案2】:

获取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;

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

【讨论】:

以上是关于Swift 计算 UITextFields 的值并返回值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中使用 UITextFields 创建开关表达式

使用 Swift 从 Core Data 中获取数据并在 UITextFields 中显示

比较两个表中的值并计算它们的差异

NSFetchRequest:查询不同的值并计算其他属性值

Swift UITextFields 跳回位置

iOS / Swift:在 UITextFields 的键盘上显示电子邮件地址建议