如何将文本字段中的字符串转换为 Swift 中的 Int?

How can I convert a string in a textfield to an Int in Swift?

我尝试了很长时间将文本变成 Int 但没有成功。我这样试过:

AnzahlString 是一个文本字段)

var AnzahlAInt = 0

if let AnzahlAString = AnzahlString.text {
    let AnzahlAInt = Int(AnzahlAString)
}

但是我总是得到错误:

Value of optional type 'Int?' must be unwrapped to a value of type 'Int'

然后我在 Int(AnzahlAString)! 末尾添加了一个 ! 所以我没有收到错误,但是现在当我按下按钮时,应用程序崩溃了。这是可以预见的,但我现在如何将其更改为没有 !Int

结果 Int 是可选的,原因是解析可能成功也可能不成功。例如,如果您尝试将字符串 "Fluffy Bunnies" 解析为 Int,则没有合理的 Int 可以返回,因此解析该字符串的结果将是 nil.

此外,如果您使用 ! 强制解析器,您就是在告诉 Swift 您确定您传递的字符串将始终生成有效的 Int ,否则应用程序会崩溃。

您需要处理解析结果为nil的情况。例如:

if let AnzahlAIntResult = Int(AnzahlAString) {
    // We only get here if the parse was successful and we have an Int.
    // AnzahlAIntResult is now an Int, so it can be assigned to AnzahlAInt.
    AnzahlAInt = AnzahlAIntResult
}

乍一看,您似乎需要检查两件事:

  • 存在AnzahlString.text,并且
  • 是否代表一个Int

第一次检查实际上是不必要的,因为 .text 永远不会 return nil,即使它被标记为可选。这意味着您可以安全地强制解包它。

使用 ?? 运算符可以轻松完成第二项检查:

let AnzahlAInt = Int(AnzahlString.text!) ?? 0

PS,作为文体提示:Swift中的变量名通常以小写字母开头,以大写字母开头的名称用于类型。

PPS: 你的代码写成阴影 AnzahlAInt - 你的 var 的值永远不会改变。

到目前为止你做得很好,但遗漏了一件事。

This line tries to convert the String into an Int. However this can fail, since your String can be something like this "dfhuse".

let AnzahlAInt = Int(AnzahlAString)

这就是为什么 Int(AnzahlAString) 的结果是可选的 (Int?)。要将其用作真正的 Int,您必须 展开它

第一个解决方案是 !,但是,每次这样做都会失败,您的应用程序就会崩溃。这么用不是个好主意。

The best solution would be Optional Binding, as you already used to get the text of your text field.

if let AnzahlAString = AnzahlString.text {

    if let safeInt = Int(AnzahlAString) {
        // You can use safeInt as a real Int
    } else {
        print("Converting your String to an Int failed badly!")
    }
}

希望对您有所帮助。有什么不明白的可以再问。

对于解包,你也可以像这样使用 guard

简单易行

guard let AnzahlAInt = Int(AnzahlString.text!) else {
            return
        }

        print(AnzahlAInt)