如何将重写函数插入到if语句中

我意识到,用基本的逻辑,我不能把重写函数放入if语句中,因为它会覆盖所有的东西。 但是,我仍然需要在if else语句中为segue做准备。 所以我工作的代码的方式是,如果用户点击一个button两次,他们赢得了游戏,因此去赢家视图控制器显示分数。 如果他们输了,他们会去看video控制器,没有得分。 所以我需要把重写函数segue在updateTimer() ,在else if counter < 9.9 && level == 2部分。

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let DestViewController : winViewController = segue.destination as! winViewController DestViewController.LebelText = labelx.text! } func updateTimer() { counter += 0.1 labelx.text = String(format: "%.1f", counter) if counter > 10 && level < 2 { let next = self.storyboard?.instantiateViewController(withIdentifier: "loseViewController") as? loseViewController self.present(next!, animated: true, completion: nil) } else if counter < 9.9 && level == 2 { let nextc = self.storyboard?.instantiateViewController(withIdentifier: "winViewController") as? winViewController self.present(nextc!, animated: true, completion: nil) } else { return } } 

为了build立上面Jon的评论,你甚至不应该调用present(UIViewController:) – 它甚至不会调用prepare(for segue:)方法。 这听起来像你要做的是在某个特定的时间检查一个条件,并根据这个条件,传递一些数据在目标视图控制器中呈现。

如果你想使用segues,最好的办法是设置一个segue标识符:

首先,你需要创build赛格。 将鼠标hover在故事板中VC顶部的视图控制器图标上,然后按住Ctrl并拖动到目标VC: createSegue

然后select赛格的types

之后,您需要为segue设置一个唯一的标识符,以便您可以区分代码中的任何其他segues。 要做到这一点,selectsegue本身,然后去检查员窗格,并在“标识符”字段中键入一个唯一的名称: identifySegue

当你完成了这两个你想要的,然后你可以编辑你的代码是这样的:

 func updateTimer() { counter += 0.1 labelx.text = String(format: "%.1f", counter) if counter > 10 && level < 2 { // Use first unique segue identifier self.performSegue(withIdentifier: "identityA", sender: self) } else if counter < 9.9 && level == 2 { // Use second unique identifier self.performSegue(withIdentifier: "identityB", sender: self) } } 

现在,您可以在prepare(for segue:)添加特殊代码prepare(for segue:) ,并且您可以使用在Interface Builder中指定的唯一标识符来区分不同的目标VC,并为其添加特殊代码

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "identityA" { let destinationA: winViewController = segue.destination as! winViewController destinationA.LebelText = labelx.text } else if segue.identifier == "identityB" { let destinationB: loseViewController = segue.destination as! loseViewController destinationB.LebelText = labelx.text } }