swift 通过textField随机化接收两个Int

new9mtju  于 2023-04-19  发布在  Swift
关注(0)|答案(1)|浏览(105)

我试图采取两个整数的内文本字段,然后随机选择一个数字之间的最小值和最大值,然后把这个随机数到标签,更新一个计时器。
此代码确实有错误
我想我是想多了,但是到目前为止我找不到任何对我有帮助的东西。

@IBAction func randomizeButtonTapped(_ sender: UIButton) {
    
    minValueNum = Int.random(in: 1...60)
    maxValueNum = Int.random(in: 1...60)
    
    randomValue = Int()
    if maxValueNum < minValueNum {
        timerLabel.text = "Error"
    } else {
        minValueNum > maxValueNum {
            timerLabel.text = "Error"
        } else {
            minValueNum < maxValueNum {
                timerlabel.text = minTextField + maxTextField
            }
        }
    }

}

zvokhttg

zvokhttg1#

首先,你缺少了一些if关键字。下面是一个很长的修改迭代来修复你的代码:
步骤1:添加缺少的if关键字

@IBAction func randomizeButtonTapped(_ sender: UIButton) {
    minValueNum = Int.random(in: 1...60)
    maxValueNum = Int.random(in: 1...60)
    
    randomValue = Int()
    if maxValueNum < minValueNum {
        timerLabel.text = "Error"
    } else {
        if minValueNum > maxValueNum { // Add if here
            timerLabel.text = "Error"
        } else {
             if minValueNum < maxValueNum { // Add if here
                timerlabel.text = minTextField + maxTextField
            }
        }
    }
}

第2步:了解else if,您的代码将变为:

@IBAction func randomizeButtonTapped(_ sender: UIButton) {
    minValueNum = Int.random(in: 1...60)
    maxValueNum = Int.random(in: 1...60)
    
    randomValue = Int()
    if maxValueNum < minValueNum {
        timerLabel.text = "Error"
    } else if minValueNum > maxValueNum {
        timerLabel.text = "Error"
    } else if minValueNum < maxValueNum {
        timerlabel.text = minTextField + maxTextField
    }
}

第3步:前两个if比较是相同的,因此删除一个:

@IBAction func randomizeButtonTapped(_ sender: UIButton) {
    minValueNum = Int.random(in: 1...60)
    maxValueNum = Int.random(in: 1...60)
    
    randomValue = Int()
    if minValueNum > maxValueNum {
        timerLabel.text = "Error"
    } else if minValueNum < maxValueNum {
        timerlabel.text = minTextField + maxTextField
    }
}

第四步:但是如果min和max是相同的呢?你忽略了这一点。

@IBAction func randomizeButtonTapped(_ sender: UIButton) {
    minValueNum = Int.random(in: 1...60)
    maxValueNum = Int.random(in: 1...60)
    
    randomValue = Int()
    if minValueNum >= maxValueNum { // Change > to >=
        timerLabel.text = "Error"
    } else if minValueNum < maxValueNum {
        timerlabel.text = minTextField + maxTextField
    }
}

步骤5:现在else if检查是多余的,因为如果第一个if不为真,我们知道min必须小于max。

@IBAction func randomizeButtonTapped(_ sender: UIButton) {
    minValueNum = Int.random(in: 1...60)
    maxValueNum = Int.random(in: 1...60)
    
    randomValue = Int()
    if minValueNum >= maxValueNum {
        timerLabel.text = "Error"
    } else { // Remove redundant check
        timerlabel.text = minTextField + maxTextField
    }
}

好了,这一长段介绍了如何修复逻辑。但现在我们需要解决真实的的问题。您没有尝试从文本字段中获取数字并使用这些值生成随机数。
下面的代码使用文本字段条目。

@IBAction func randomizeButtonTapped(_ sender: UIButton) {
    // Attempt to get the min and max from the text fields
    guard let minValueNum = Int(minTextField.text!),
          let maxValueNum = Int(maxTextField.text!)
        else {
        timerLabel.text = "Error"
        return
    }
    
    if minValueNum >= maxValueNum {
        timerLabel.text = "Error"
    } else {
        // Generate the random number within the entered range
        let randomNumber = Int.random(in: minValueNum...maxValueNum)
        timerlabel.text = "\(randomNumber)"
    }
}

guard确保用户在文本字段中输入有效数字。
这也删除了randomValue = Int()行,它甚至没有被使用。它不是将最小值和最大值相加,而是在最小值和最大值之间生成一个随机数。
仅供参考-强制展开UITextFieldtext属性总是安全的。即使nil,您也会得到空字符串("")。

相关问题