在if / else子句中过早地执行

时间:2016-06-30 06:04:57

标签: ios swift uistoryboardsegue

以下代码

class ViewController: UIViewController {

@IBOutlet weak var knock: UIButton!
@IBOutlet weak var label: UILabel!

var count: Int = 0
var unlocked: Int = 0

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


@IBAction func knockKnock(sender: UIButton) {

    if count < 20 {
        label.text = "Knocked \(count) times."

    } else if count > 19 && count < 40 {
        label.text = "Knocked \(count) times."
        label.textColor = UIColor.randomColor()

    } else if count > 39 && count < 100 {
        label.text = "That's enough."
        label.textColor = UIColor.blackColor()

    } else if count > 99 && count < 102 {
        label.text = "I wish you hadn't done that."
        label.textColor = UIColor.redColor()

    } else if count == 103 {
        label.text = "Fine, come in."
        label.textColor = UIColor.greenColor()
        count = 126
        unlocked += 1

    }

    if unlocked > 0 {
        self.performSegueWithIdentifier("InsideHomeSegue", sender:sender)
    }

    count += 1

}

中提前执行Segue
 if unlocked > 0 {
        self.performSegueWithIdentifier("InsideHomeSegue", sender:sender)
    }

第一次按下按钮时会立即执行segue,这是我不明白的,因为此时代码应该在false if语句后面无法访问,因为int unlocked已初始化与0

我遇到了类似的问题,结果证明是XCode本身的问题,而不是我的代码;我查看了所有可以在Interface Builder中引用任何变量或对象的文件,检查了命名不一致性,流氓网点等。

我仍然对Segues有一个非常不稳定的理解,并希望任何人都可以提供任何详细的帮助。

较大的if / else if块一直正常工作直到最终增量,直到添加了Segue代码。 最初self.performSegueWithIdentifier("InsideHomeSegue", sender:sender)行位于else if count == 103 {块内; var unlocked: Int被添加以对抗Segue问题无济于事。

我已经阅读了有关Segues的XCode文档的几页,但还没有找到我能尝试的其他内容。

我可能会忽略一些非常明显的东西,但无论如何,感谢阅读。

干杯

编辑:我检查了所有网点,它是目前该项目中唯一的Segue,它并没有在其他任何地方连接。按下按钮时激活Segue,而不是立即在View load上激活。

2 个答案:

答案 0 :(得分:1)

就像我的评论所说的那样,你已经将segue与你的按钮连接起来,这样segue就会一直执行。它与if子句无关。

您应该使用ViewController连接,而不是使用按钮连接

答案 1 :(得分:0)

您必须将两个ViewController与segue连接,为其提供标识符。然后,你可以用这种方式触发segue。

self.performSegueWithIdentifier("segue_name_identifier", sender: self)

在这里您可以轻松设置segue。

enter image description here

我希望这会对你有所帮助。