Swift/학습

[Swift] DispatchTimer를 사용해보자!

언클린 2020. 6. 5. 11:54
728x90

이번 글에서는 DispathTimer를 사용법에 대하여 알아보겠습니다.

임의의 시간 동안 처리, 몇 초뒤 실행 등 타이머 처리가 필요할 때 사용되는 방법 중 하나입니다. 

코드를 보시면서 어떤식으로 진행되는지 확인해봅시다!


1. DispatchTimer 사용 예시 코드

이번에는 뭐 디자인이랄 것도 없기 때문에 디자인은 생략하고 바로 코드로 넘어가겠습니다.

아 이번에 디자인에 대해서는 IBOutlet이 아닌 tag를 사용했습니다. tag에 대해서는 다음에 알아보겠습니다.

class ViewController: UIViewController {

    // 타이머 선언
    private var timer: DispatchSourceTimer?
    
    // 횟수
    private var count = 0
    
    // 버튼 생성
    private var startBtn: UIButton?
    private var endBtn: UIButton?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.initView()
    }
    
    private func initView() {
        self.startBtn = self.view.viewWithTag(10) as? UIButton
        self.endBtn = self.view.viewWithTag(11) as? UIButton
        
        self.startBtn?.addTarget(self, action: #selector(self.didTappedStartBtn(_:)), for: .touchUpInside)
        self.endBtn?.addTarget(self, action: #selector(self.didTappedEndBtn(_:)), for: .touchUpInside)
    }
    
    @objc
    private func didTappedStartBtn(_ sender: UIButton) {
        self.setSwitchON(on: true)
        
        // 타이머 생성 main큐 설정
        self.timer = DispatchSource.makeTimerSource(flags: [], queue: .main)
        // 시간과 반복 간격 설정
        self.timer?.schedule(deadline: .now(), repeating: 1.0)
        
        // 타이머 동작
        self.timer?.setEventHandler(handler: {
            self.count += 1
            // 5회 넘을 시 타이머 종료
            self.count > 5 ? self.stopProcess() : print(self.count)
        })
        
        // 타이머 개시
        self.timer?.resume()
    }
    
    @objc
    private func didTappedEndBtn(_ sender: UIButton) {
        self.stopProcess()
    }
    
    private func stopProcess() {
        self.setSwitchON(on: false)
        self.count = 0
        // 타이머 종료
        self.timer?.cancel()
        self.timer = nil
    }
    
    private func setSwitchON(on: Bool) {
        self.startBtn?.isHidden = on
        self.endBtn?.isHidden = !on
        self.suspendBtn?.isHidden = !on
    }
}

2. 실행

3. 마무리

간단히 어떤식으로 사용하는지에 대하여 알아보았습니다. 

상황에 맞게 사용해 보시면 좋을 것 같습니다.

궁금한 사항이나 지적사항 있으신 분은 댓글에 부탁드립니다.

감사합니다.

 

https://developer.apple.com/documentation/dispatch/dispatchsourcetimer

 

DispatchSourceTimer - Dispatch | Apple Developer Documentation

Schedules a repeating timer with the specified deadline, repeat interval, and leeway values.

developer.apple.com


환경 

Xcode 11.3.1

Swift 5

 

 

 

 

728x90