목차

iOS Timer 사용법

weak var로 선언하여 순환 참조 방지.

weak var timer: Timer?

func xxx() {
    // [self] 붙일 경우 클로저 내부에서 모든 변수에 따로 붙일 필요 없음
    timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [self] _ in
        let seconds = Int(slider.value * 60)

        if seconds > 0 {
            slider.value = Float(seconds - 1) * sliderScale
        }
        updateSlider()

        if seconds == 0 {
            timer?.invalidate() // ? 붙이는 것 필수
            AudioServicesPlayAlertSound(SystemSoundID(1322))
            initUI()
        }
    }
}

func yyy() {
    timer?.invalidate()
}

클로저 파라미터를 _ 대신 변수명으로 받아서 사용.

func xxx() {
    //[self] 붙일경우 클로저 내부에서 모든 변수에 따로 붙일 필요 없음 _ -> timer(변수로 변경)
    Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [self] timer in
        let seconds = Int(slider.value * 60)

        if seconds > 0 {
            slider.value = Float(seconds - 1) * sliderScale
        }
        updateSlider()

        if seconds == 0 {
            timer.invalidate()
            AudioServicesPlayAlertSound(SystemSoundID(1322))
            initUI()
        }
    }
}