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?”的值未拆封;你的意思是用'!'还是“?”?
【问题讨论】:
你有什么问题? 变量中不能有空格。这个:Number1
,Number2
。 不是这个:Number 1
,Number 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 创建开关表达式