SWIFT: var someVariable:int = textfield.text.toInt() x textfield2.text.toInt() 并强制展开

SWIFT: var someVariable:int = textfield.text.toInt() x textfield2.text.toInt() and force unwrap

首先post这里请温柔点。我对编码相当陌生,正在努力了解 SWIFT 及其可选内容。非常感谢专业人士的一些建议!

我正在编写一个简单的应用程序,用户在其中输入文本字段,然后在按下按钮时将答案吐出到另一个文本字段之前,应用程序中会发生一些乘法运算:"calculateTM".

我在计算本身时遇到了一些问题,也许是因为我试图在一行上做太多 - 获取文本字段条目,转换为整数,与另一个转换为整数的文本字段条目相乘,本质上是什么我在标题中写道:

var someVariable: Int = textfield.text.toInt() * textfield2.text.toInt()

问题是,Xcode 想要我强制解包并添加一个 !到两个 toInt() 的结尾。这很好,当然除非用户没有在框中输入任何内容并按下计算,此时 nil 值会导致程序崩溃,例如:

var someVariable: Int = textfield.text.toInt() x textfield2.text.toInt()
var someVariable2: Int = textfield3.text.toInt() x textfield4.text.toInt()

where the user doesn't enter anything into textfield3 or 4

按照这个简单的算法,代码更新标签(文本字段)如下:

    label1.text = String(someVariable)
    label2.text = String(someVariable2)

因此,最终转换回字符串可能还会产生一些问题,例如代码第一部分中如何处理可选值。

对 long-winded 的解释深表歉意,我希望我已经足够清楚了,但我想我在代码的第一部分遗漏了一些非常基本的东西。我试过使用可选的 ?还有 nil-coalescing 运算符(在 nil 的情况下设置为 0)但无法使其工作。请帮忙?

非常感谢!

使用 if let 进行可选绑定:

if let var1 = textField.text?.toInt(),
   let var2 = textField2.text?.toInt() {
 someVariable = var1 * var2 // or directly label1.text = String(var1 * var2)
}

方法 toInt() 实际上 returns 一个可选类型 'Int?' 可以是 nil 或整数值,所以你需要检查 String->Int 转换是否成功 returns Int 或 nil。

对于最基本的方式:

var intValue: Int? = text.toInt()
if intValue != nil {
    // operations using intValue!
}

在swift中,你可以试试:

if let intValue = text.toInt() {
    // operations 
}