Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

Swift(iOS)에서 메서드 호출을 지연시키는 2가지 방법

이번 포스트에서는 Swift에서 메서드 호출을 일정 시간 동안 지연시키는 방법을 알아보겠습니다. 크게 두 가지 방식으로 구현할 수 있으며, 모든 예제는 Xcode Playground에서 실행해 볼 수 있습니다.

사전 준비

먼저 Xcode → File → New → Playground를 열어 새 플레이그라운드를 생성합니다. 이제 두 가지 방법을 하나씩 살펴보겠습니다.

방법 1: DispatchQueue의 asyncAfter 사용

첫 번째 방법은 asyncAfter(deadline:execute:)Apple 공식 문서에서 확인할 수 있습니다.

아래 코드를 Playground에 복사한 뒤 실행해 보세요.

func functionOne() {
    let delayTime = DispatchTime.now() + 3.0
    print("one")
    DispatchQueue.main.asyncAfter(deadline: delayTime, execute: {
        hello()
    })
}

func hello() {
    print("text")
}

functionOne()

코드를 살펴보면, 먼저 functionOne이라는 함수를 만들고 그 안에서 지연 시간을 3초로 선언합니다. 이후 asyncAfter에 지연 시간을 파라미터로 전달하여, 3초 후에 hello() 함수가 실행되도록 요청합니다.

위 프로그램을 실행하면 먼저 "one"이 출력되고, 3초 후에 "text"가 출력되는 것을 확인할 수 있습니다.

방법 2: Timer(NSTimer) 사용

두 번째 방법은 Timer(구 NSTimer)를 활용하는 것입니다. 아래 코드를 Xcode의 Single View App 프로젝트에 복사해서 실행해 보세요.

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        print("one")
        Timer.scheduledTimer(timeInterval: 3,
                             target: self,
                             selector: #selector(ViewController.hello),
                             userInfo: nil,
                             repeats: false)
    }

    @objc func hello() {
        print("text")
    }
}

Timer.scheduledTimertimeInterval로 지정한 시간(여기서는 3초)이 지난 후 selector에 전달한 메서드를 호출합니다. repeatsfalse로 설정했기 때문에 타이머는 한 번만 실행됩니다. 참고로 Objective-C 런타임에서 셀렉터로 호출되어야 하므로 hello() 메서드에는 @objc 키워드가 필요합니다.

앱을 실행하면 첫 번째 방법과 동일하게 "one"이 출력되고, 3초 후에 "text"가 출력되는 결과를 확인할 수 있습니다.

마무리

간단한 지연 실행에는 DispatchQueue.main.asyncAfter가 가장 널리 사용되며, 반복 실행이나 타이머 무효화(invalidate)가 필요한 경우에는 Timer가 더 적합합니다. 상황에 맞게 두 방법을 선택해서 사용하시기 바랍니다.