Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在if-else语句中插入覆盖函数_Ios_Swift_Swift3_Overriding_Segue - Fatal编程技术网

Ios 如何在if-else语句中插入覆盖函数

Ios 如何在if-else语句中插入覆盖函数,ios,swift,swift3,overriding,segue,Ios,Swift,Swift3,Overriding,Segue,我意识到,使用基本逻辑,我无法将覆盖函数放入if-else语句中,因为它将覆盖所有内容。然而,我仍然需要在if-else语句中加入segue的准备。因此,我正在处理的代码的工作方式是,如果用户两次点击一个按钮,他们就赢得了游戏,然后转到winners view controller,在那里显示分数。如果他们输了,他们会去一个没有分数的视图控制器。因此,如果计数器10&&level

我意识到,使用基本逻辑,我无法将覆盖函数放入if-else语句中,因为它将覆盖所有内容。然而,我仍然需要在if-else语句中加入segue的准备。因此,我正在处理的代码的工作方式是,如果用户两次点击一个按钮,他们就赢得了游戏,然后转到winners view controller,在那里显示分数。如果他们输了,他们会去一个没有分数的视图控制器。因此,如果计数器<9.9&&level==2,我需要将覆盖函数segue放在
updateTimer()
部分

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
    }
}
override func prepare(对于segue:UIStoryboardSegue,发送方:Any?){
让DestViewController:winViewController=segue.destination为!winViewController
DestViewController.LebelText=labelx.text!
}
func updateTimer(){
计数器+=0.1
labelx.text=字符串(格式:“%.1f”,计数器)
如果计数器>10&&level<2{
让next=self.storyboard?.instanceeviewController(标识符为“loseViewController”)作为?loseViewController
self.present(下一步),动画:true,完成:nil)
}如果计数器<9.9&&level==2,则为else{
让nextc=self.storyboard?.instanceeviewcontroller(标识符为:“winViewController”)作为?winViewController
self.present(nextc!,动画:true,完成:nil)
}否则{
回来
}
}

根据Jon的上述评论,您甚至不应该调用
present(UIViewController:)
-它甚至不会调用
prepare(for segue:)
方法。听起来您试图做的是在特定时间检查一个条件,并基于该条件,传递一些数据以显示在目标视图控制器中

如果要使用segue,最好设置segue标识符:

首先,您需要创建segue。将鼠标悬停在情节提要中VC顶部的view controller图标上,然后按住control并拖动到目标VC:

然后选择segue的类型

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

在完成了所需的两个序列之后,您可以将代码编辑为如下内容:

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)
    }
}

我真的不明白你在问什么,但我认为你要做的是在情节提要中定义分段,然后在if语句的两个分支中,调用
performsguewithidentifier(sender:)
而不是
实例化..
呈现..
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

    }
}