Swift 对viewDidLoad()和另一个代码块的调用冲突

Swift 对viewDidLoad()和另一个代码块的调用冲突,swift,uiviewcontroller,uikit,viewdidload,Swift,Uiviewcontroller,Uikit,Viewdidload,我尝试在这里调用viewDidLoad func,并多次调用问题func,然后才调用要推送的新视图控制器的代码。但是,两者的代码都是在同一个精确的时间执行的,这样第一轮结束后,视图控制器就会被推送。我尝试过在不同的变体中使用循环,但这些尝试都导致了类似的结果。思想?提前谢谢你 var num1=Int var num2=Int var userInput=0 @iAction func数字\发送方:UIButton{ answerLabel.text=answerLabel.text!+Stri

我尝试在这里调用viewDidLoad func,并多次调用问题func,然后才调用要推送的新视图控制器的代码。但是,两者的代码都是在同一个精确的时间执行的,这样第一轮结束后,视图控制器就会被推送。我尝试过在不同的变体中使用循环,但这些尝试都导致了类似的结果。思想?提前谢谢你

var num1=Int var num2=Int var userInput=0 @iAction func数字\发送方:UIButton{ answerLabel.text=answerLabel.text!+Stringsender.tag-1 userInput=IntanswerLabel.text!! 答复 } 覆盖func viewDidLoad{ super.viewDidLoad //视图配置 问题 } func答案{ 让答案=num1+num2 如果userInput==答案{ answerLabel.text= viewDidLoad 让scoreVC=UIStoryboardname:Main,bundle:nil.InstanceViewController标识符:ScoreViewController为!ScoreViewController self.navigationController?.pushViewControllerscoreVC,动画:true } } func问题{ num1=Intarc4random_uniform100 num2=Intarc4random_uniform100 questionLabel.text=\num1+\num2 }
在这里我们可以改进的地方不多。我从基础开始。 由于这些数字在开始时尚未确定,我们还不必分配它们。因此,我们不必将它们设置为默认值,而可以将它们保留为可选值,这样我们就可以只定义类型,并将它们保留在以后的分配中

var num1:Int? var num2:Int? 现在我们想提出一个问题。问题是,viewDidLoad只能在视图加载时使用(顾名思义)。因此,我们只需创建一个方法并将我们的逻辑移到那里。你已经这么做了,我只是把你的函数重命名为一个更能说话的名字

viewDidLoad{ showNewQuestion } showNewQuestion{//以前的问题 num1=Intarc4random_uniform100 num2=Intarc4random_uniform100 questionLabel.text=\num1+\num2 } 到目前为止还不错。现在我们要检查输入与按钮发送函数中的随机值。而不是强制展开!最好是安全地打开包装

@iAction func数字\发送方:UIButton{ guard let userInput=answerLabel.text,let userInputAsInt=IntuserInput else{ 回来 } checkAnsweruserInput:UserInput//以前的Answer } 最后我们改进了你的回答功能。你剩下的就是数一数有多少问题已经被回答了。如果我们不检查程序如何知道何时显示分数?为了解决这个问题,我们记住了有多少问题被问到了正确答案,并且我们定义了一个显示showScoreAfter分数的阈值

var CorrectAnswers=0 var showScoreAfter=5 func checkAnsweruserInputAsInt:Int{ 让答案=num1+num2 if userInputAsInt!=回答{//如果回答错误,则提前退出 回来 } 正确答案+=1 answerLabel.text= //要么显示分数 如果正确回答%ShowScoreAfter==0{ 让scoreVC=UIStoryboardname:Main,bundle:nil.InstanceViewController标识符:ScoreViewController为!ScoreViewController self.navigationController?.pushViewControllerscoreVC,动画:true } //还是新问题 否则{ showNewQuestion } }
在自定义函数中调用viewDidLoad似乎很奇怪。我很确定你不应该那样做。我也不明白你的问题。请展示更多代码并描述您想要实现的目标。@Deitsch嗨!我确实编辑了这个问题,还添加了一个截图。基本上,每次答案正确时,都应该有一个新问题准备就绪,答案字段为空。这就是为什么必须在自定义func内部调用viewDidLoad。回答完设定数量的问题3、5、10等后,应将您引导至另一个显示分数的视图控制器。非常感谢!你真棒。