我需要弄清楚如何停止循环。我尝试了几种不同类型的循环,但最终结果是相同的 - 循环进行时无法按下停止按钮。这就是我到目前为止所拥有的......
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"对于选择器...你能展示一些实际的实现吗?
答案 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()