如何将覆盖函数插入到 if else 语句中

Posted

技术标签:

【中文标题】如何将覆盖函数插入到 if else 语句中【英文标题】:How to insert a override function into a if else statement 【发布时间】:2017-01-07 22:14:08 【问题描述】:

我意识到,使用基本逻辑我不能将覆盖函数放入 if else 语句中,因为它会覆盖所有内容。但是我仍然需要在 if else 语句中加入为 segue 做准备。因此,我正在工作的代码的工作方式是,如果用户两次点击按钮,他们就赢得了比赛,因此转到显示分数的获胜者视图控制器。如果他们输了,他们会去一个没有分数的视图控制器。所以我需要把覆盖函数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
    

【问题讨论】:

我不太明白你在问什么,但我认为你想做的是在你的故事板中定义 segues,然后在你的 if 语句的两个分支中,调用performSegueWithIdentifier(sender:)而不是instantiate..present... 【参考方案1】:

要建立以上 Jon 的评论,您甚至不应该调用 present(UIViewController:) - 它甚至不会调用 prepare(for segue:) 方法。听起来您正在尝试做的是在某个时间检查一个条件,并根据该条件传递一些数据以呈现在目标视图控制器中。

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

首先,您需要创建转场。将鼠标悬停在 Storyboard 中 VC 顶部的视图控制器图标上,然后按住控件并拖动到目标 VC:

然后选择segue的类型

之后,您需要为 segue 设置唯一标识符,以便您可以区分代码中的任何其他 segue。为此,请选择 segue 本身,然后转到检查器窗格并在“标识符”字段中键入唯一名称:

在为所需的两个 segue 完成此操作后,您可以将代码编辑为如下内容:

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:) 中添加特殊代码,并且您可以使用您在 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

    

【讨论】:

以上是关于如何将覆盖函数插入到 if else 语句中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python将and else语句添加到for循环中的if作为lambda的一部分

如何将 if/else 语句指向另一个页面?

一万个if..........else....语句,请问如何去优化它。。。。以提升性能效率

触发器中的 MySQL IF 语句 - ELSE 不执行任何操作

如何将 if else 语句添加到按钮和 .sheet?

如何使用 JavaScript 中的三元运算符更改函数中的 if else 语句?