按下按钮

时间:2016-08-14 17:20:13

标签: swift for-loop

我需要弄清楚如何停止循环。我尝试了几种不同类型的循环,但最终结果是相同的 - 循环进行时无法按下停止按钮。这就是我到目前为止所拥有的......

var stopButtonPressed = false
var numArray = [0,1,2,3,4,5,6,7,8,9]
for num in numArray{
    print(num)
    sleep(2)
    if stopButtonPressed {
        return
    }
}

显然按下的按钮将stopButtonPressed设置为true,但是再次......在循环迭代时不能按下按钮。那么,更好的方法是什么呢?

修改

@dasblinkinlight

好的,所以我可以遵循你所说的逻辑,但实施仍然令人困惑。在您的示例中,对于选择器,您将" MyClass.doOneStepOfLoop"这很有道理。只有计时器不愿意接受函数作为参数。那么如果它不接受某个功能,怎么能让它迈出一步呢?

为了简化问题,我们每两秒钟打印一次(" 1")怎么样?根据你的例子,我认为这看起来像这样......

self.timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(print("1")), userInfo: nil, repeats: true)

但这不起作用并给出错误

Argument of '#selector' does not refer to an initializer or method

我查看了你发布的Q& A,不幸的是我仍然没有得到它。我看到很多伪代码,例如" YourClass.doAStep"或" Class.buttonPressed"或" Class.test"对于选择器...你能展示一些实际的实现吗?

1 个答案:

答案 0 :(得分:3)

您误解了Cocoa应用程序处理事件的方式:在您的方法退出之前,应用程序不会响应事件。

每两秒做一次事的正确方法是设置一个计时器,而不是使用循环。更改停止按钮的处理程序以停止计时器:

// This goes into your viewWillAppear
self.timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(MyClass.doOneStepOfYourLoop), userInfo: nil, repeats: true)

// This goes into your stopButtonPressed handler
self.timer.invalidate()