Swift/Xcode:尝试访问在另一个函数中更新的局部变量

Swift/Xcode:尝试访问在另一个函数中更新的局部变量,swift,xcode,function,variables,random,Swift,Xcode,Function,Variables,Random,我是一个初学者,我正在努力解决一个关于局部变量的问题。具体来说,我正在尝试制作一个应用程序,测试某些分数问题。因此,我需要为测试生成随机数并访问它们,以便checker函数可以确保用户得到正确答案。但是,如果我在用户单击“询问问题”时生成一组新的数字,则其他检查器函数不知道这些数字是什么。。。下面是我的代码: class ViewControllerEasy: UIViewController { @IBOutlet weak var giveQuestionOutlet: UIButton!

我是一个初学者,我正在努力解决一个关于局部变量的问题。具体来说,我正在尝试制作一个应用程序,测试某些分数问题。因此,我需要为测试生成随机数并访问它们,以便checker函数可以确保用户得到正确答案。但是,如果我在用户单击“询问问题”时生成一组新的数字,则其他检查器函数不知道这些数字是什么。。。下面是我的代码:

class ViewControllerEasy: UIViewController {

@IBOutlet weak var giveQuestionOutlet: UIButton!
@IBOutlet weak var nextButtonOutlet: UIButton!
@IBAction func nextQuestionButton(_ sender: Any) {
    nextButtonOutlet.isHidden = true
    giveQuestionOutlet.isEnabled = true
    easyQuestionResponse.text = ""
    easyQuestionLabel.text = ""
    resultLabel.text = ""
}

@IBOutlet weak var easyQuestionResponse: UITextField!
@IBOutlet weak var easyQuestionLabel: UILabel!

@IBAction func easyQuestionButton(_ sender: Any) {

    let num1 = Int.random(in: 1 ..< 6)
    let num2 = Int.random(in: 2 ..< 11)


    easyQuestionLabel.text = "What percentage does \(num1) / \(num2) represent? (Round down to the closest whole number)"
}

@IBOutlet weak var resultLabel: UILabel!
@IBAction func checkButton(_ sender: Any) {

    let expectedAnswer = ((num1 * 100) / num2)
    let expectedAnswer2 = Float(expectedAnswer)
    if Float(easyQuestionResponse.text!) == round(expectedAnswer2) {
        resultLabel.text = "Great Job! Correct Answer."
        nextButtonOutlet.isHidden = false
        giveQuestionOutlet.isEnabled = false 
    }else {
        resultLabel.text = "Sorry, that is incorrect. The correct answer was: \(round(expectedAnswer2))%"
        nextButtonOutlet.isHidden = false
        giveQuestionOutlet.isEnabled = false
    }
 }

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let invalidCharacters = CharacterSet(charactersIn: "0123456789").inverted
    return string.rangeOfCharacter(from: invalidCharacters) == nil
}

override func viewDidLoad() {
    super.viewDidLoad()

}
class ViewControllerEasy:UIViewController{
@IBOutlet弱var问题出口:UIButton!
@IBOUTLE弱var nextButtonOutlet:UIButton!
@iAction func nextQuestionButton(u发件人:任意){
nextButtonOutlet.isHidden=true
giveQuestionOutlet.isEnabled=true
easyQuestionResponse.text=“”
easyQuestionLabel.text=“”
resultLabel.text=“”
}
@IBOUTLE弱var easyQuestionResponse:UITextField!
@IBOutlet弱var easyQuestionLabel:UILabel!
@iAction func easyQuestionButton(u发件人:任意){
设num1=Int.random(in:1..<6)
设num2=Int.random(in:2..<11)
easyQuestionLabel.text=“\(num1)/\(num2)代表的百分比是多少?(四舍五入到最接近的整数)
}
@IBOutlet弱var结果标签:UILabel!
@iAction func checkButton(\发送方:任意){
假设预期答案=((num1*100)/num2)
让expectedAnswer2=浮动(expectedAnswer)
if Float(easyQuestionResponse.text!)==四舍五入(预期答案2){
resultLabel.text=“干得好!回答正确。”
nextButtonOutlet.isHidden=false
giveQuestionOutlet.isEnabled=false
}否则{
resultLabel.text=“对不起,这是不正确的。正确的答案是:\(四舍五入(预期答案2))%”
nextButtonOutlet.isHidden=false
giveQuestionOutlet.isEnabled=false
}
}
func textField(textField:UITextField,shouldChangeCharacters范围:NSRange,replacementString:string)->Bool{
设invalidCharacters=CharacterSet(charactersIn:“0123456789”)。反转
返回字符串。rangeOfCharacter(from:invalidCharacters)=nil
}
重写func viewDidLoad(){
super.viewDidLoad()
}
}


那么,当用户点击按钮询问时,如何生成新问题,并确保代码能够检查用户是否得到正确答案?我试着使用一个全局变量,但在第一次执行随机数调用后,这将保持值不变。因此,我希望有人能帮我解决这个问题。提前谢谢

这段代码可以编译吗?看起来
num1
是在
easyQuestionButton
中声明的,但您正在尝试访问
checkButton
内部。两个高级指针,1。将业务逻辑代码保存在模型中,不要将其保存在视图控制器中。模型可能会定义一个要存储这些值的属性,例如
num1
,您可以使用一个函数来重置这些值。2.将函数名作为动词将有助于完成特定任务,例如
generateNextQuestion
。请参阅swift命名约定。有时,清理可以提供清晰的信息,帮助您识别问题。将其声明为