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
환경
Xcode 11.3.1
Swift 5
728x90
'Swift > 정보 공유' 카테고리의 다른 글
[Swift] iOS ViewController의 LifeCycle에 대하여 알아보자! (0) | 2020.06.22 |
---|---|
[Swift] UIActivityController에 대하여 알아보자! (0) | 2020.06.08 |
[Swift] MapView를 클릭했을 때 해당 위치의 주소를 알아내보자! (0) | 2020.05.25 |
[Swift] Set에 대하여 (0) | 2020.05.12 |
[Swift] Swift - 싱글톤 패턴(Singleton) (0) | 2020.05.08 |