如何将文本字段中的字符串转换为 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)
我尝试了很长时间将文本变成 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)