我是编程新手。我一直在学习Swift。
我已经按照教程完成了一个应用程序,但导师的应用程序和我的应用程序都有错误。
这个基本的应用程序为自己添加了一个数字。它在大多数情况下都很有效并且已经完成。但是,当我输入一个字符而不是一个数字时,它就崩溃了。如何在运行函数之前检查值是否为数字?
以下是代码:
@IBAction func onPlayBtn(sender: UIButton) {
if whatTxt.text != nil && whatTxt.text != ""{
playBtn.hidden = true
logo.hidden = true
whatTxt.hidden = true
sumBtn.hidden = false
sumTxt.hidden = false
resetLbl()
maxTimes = Int(whatTxt.text!)!
currentTimes = 0
here is the line of code I know is checking that the box is not empty, it doesn't run the function if it is empty.
我想也许我可以加入&& whatTxt.text != Int
,但这不起作用,而且我认为在这种情况下我可能错误地认识到Int。
答案 0 :(得分:2)
不要强行打开包装。您可以使用nil合并默认值(可能是""
和0
):
maxTimes = Int(whatTxt.text ?? "") ?? 0
在运行该函数之前,您无法检查它是否不是数字(操作将始终被触发)但是如果您真的想要避免代码运行,只需打开{中的值{1}}:
guard
答案 1 :(得分:1)
一种方法是使用NSCharacterSet和rangeOfCharacterFromSet来理解字符串是否包含数字:
var textFieldValue = "HELLO" // This should be the value from your textfield
let decimalCharacters = NSCharacterSet.decimalDigitCharacterSet()
let rangeResult = textFieldValue.rangeOfCharacterFromSet(decimalCharacters, options: NSStringCompareOptions(), range: nil)
if rangeResult != nil {
// Contain numbers
} else {
// Not contain numbers
}
另一种方法是使用Regex模式。
答案 2 :(得分:1)
崩溃发生在maxTimes = Int(whatTxt.text!)!
。 Int()
初始值设定项返回Int?
(Optional<Int>
),表示String
到Int
转换失败(正如您所遇到的那样)。当初始值设定项返回nil
时会发生崩溃,但您仍尝试使用!
强制解包它。
相反,请安全地打开它:
@IBAction func onPlayBtn(sender: UIButton) {
if let text = whatTxt.text where !text.isEmpty { //see note below
playBtn.hidden = true
logo.hidden = true
whatTxt.hidden = true
sumBtn.hidden = false
sumTxt.hidden = false
resetLbl()
if let maxTimes = Int(text) {
//text represents a valid Int, now available as the Int "maxTimes"
}
else {
//text does not represent a valid Int
}
currentTimes = 0
注意:请勿检查nil
(whatTxt.text != nil
),然后强制解包(whatTxt.text!
)。相反,使用if let
绑定来安全地解包:if let text = whatTxt.text
作为旁注,请尽量避免使用lbl
,btn
,txt
等名称。 label
,button
,text
的时间不会太长,而且它会使您的代码看起来像是由t3x + sp3 @ k中的前卫少年编写的
答案 3 :(得分:-2)
谢谢所有这个答案,在输入信件时没有进入数学屏幕就解决了这个问题。谢谢你转到jpg1503
@IBAction func onPlayBtn(发件人:UIButton){
guard let whatText = whatTxt.text, _ = Int(whatText) else { return }
if whatTxt.text != nil && whatTxt.text != ""{
playBtn.hidden = true
logo.hidden = true
whatTxt.hidden = true
sumBtn.hidden = false
sumTxt.hidden = false
resetLbl()
maxTimes = Int(whatTxt.text ?? "") ?? 0
currentTimes = 0