重复这个功能

时间:2017-01-12 02:59:34

标签: xcode function loops timer swift3

我正在尝试重复此功能,因此它会一直重复,直到有人在接口上停止它,但当它返回到increaseTimer()时,它会出现错误:线程1:EXC_BAD_ACCESS。请有人帮忙,这个功能会自动循环。

    func increaseTimer() {
    time += 1

    if time > 2 && time < 4 {
        timerLabel.text = "Hold"
    } else if (time > 5 && time < 10) {
        timerLabel.text = "Breathe out"
    } else if (time > 11 && time < 14) {
        timerLabel.text = "Hold"
    } else { return increaseTimer()}

2 个答案:

答案 0 :(得分:1)

不要尝试无限重复代码来模拟计时器。而是使用Timer对象。下面的代码将启动一个计时器并每隔1秒调用一次提供的闭包。

let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { timer in
    increaseTimer()
})

如果要停止计时器,请拨打invalidate()

timer.invalidate()

为了在消息之间切换,请执行以下操作:

func updateMessage() {

    time += 1

    switch time {
    case 0 ... 5:
        timerLabel.text = "Hold"
    case 6 ... 10:
        timerLabel.text = "Breathe Out"
    default:
        time = 0
    }

}

答案 1 :(得分:0)

每次需要重复代码块时,您总是可以重置Int时间。就像这样:

首先,我会声明我的计时器并将其初始值设置为0。

var timer : Timer = 0

然后将以下内容放在您想要启动计时器的任何位置。 (在@IBAction或任何地方)

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateMessage), userInfo: nil, repeats: true)

然后放置代码以在switch语句中重置时间变量。 (我会把它设置为1,因为这将是第11秒)

func updateMessage() {

    time += 1

    switch time {
    case 1 ... 5:
        timerLabel.text = "Hold"
    case 6 ... 10:
        timerLabel.text = "Breathe Out"
        time = 0
    case 11:
        timerLabel.text = "Hold"
//Reset the time Int to start the loop again
        time = 1
    default:
        break
    }
}

请确保在不再需要时使计时器无效。

timer.invalidate()