DispatchQueue.main.asyncAfter

DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
	print("5초 뒤에 실행")
}

시간 차를 두고 실행하려고 했던 코드를 취소 하고 싶을 때

DispatchQueue.main.asyncAfter는 파라미터로 DispatchWorkItem을 받을 수 있습니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/73318063-646f-4beb-ad45-68a80d03aa79/_2020-03-17__11.22.00.png

DispatchWorkItem은 dispatch queue 또는 dispatch group 수행할 작업을 캡슐화 할 수 있고, work item을 DispatchSource의 이벤트, 등록, 취소 핸들러로 사용 할 수 있습니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bab9c9cd-d856-4638-8492-e70137db2593/_2020-03-17__11.24.25.png

아래 코드와 같이 DispatchWorkItem에 있는 cancel()을 실행하면 타이머가 취소 됩니다.

let timerExcute = DispatchWorkItem(block: { print("실행") } )

DispatchQueue.main.asyncAfter(deadline: .now() + 5.0, execute: timerExcute)

timerExcute.cancel() // 취소가 되서 실행 되지 않습니다.

시간 차를 두고 코드를 실행하고 싶을 때. - 추가 질문