programing

Swift 3에서 지연을 프로그래밍하는 방법

bestprogram 2023. 4. 27. 22:52

Swift 3에서 지연을 프로그래밍하는 방법

Swift의 이전 버전에서는 다음 코드로 지연을 발생시킬 수 있었습니다.

let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 4 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
    //put your code which should be executed with a delay here
}

그러나 이제 Swift 3에서 Xcode는 자동으로 6가지를 변경하지만 다음 오류가 나타납니다. "변환할 수 없습니다.DispatchTime.now예상대로dispatch_time_t아카UInt64."

스위프트 3에서 코드 시퀀스를 실행하기 전에 지연을 생성하려면 어떻게 해야 합니까?

많은 연구 끝에, 저는 마침내 이것을 알아냈습니다.

DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Change `2.0` to the desired number of seconds.
   // Code you want to be delayed
}

이렇게 하면 Swift 3 및 Swift 4에서 원하는 "대기" 효과가 생성됩니다.

답변의 일부에서 영감을 받았습니다.

나는 GCD의 한 줄 표기법을 좋아하는데, 그것은 더 우아합니다.

    DispatchQueue.main.asyncAfter(deadline: .now() + 42.0) {
        // do stuff 42 seconds later
    }

또한 iOS 10에는 블록 이니셜라이저와 같은 새로운 타이머 방법이 있습니다.

(지연된 조치가 취소될 수 있음)

    let timer = Timer.scheduledTimer(withTimeInterval: 42.0, repeats: false) { (timer) in
        // do stuff 42 seconds later
    }

참고로 타이머는 기본 실행 루프 모드에 추가됩니다.사용자가 앱의 UI와 상호 작용할 때(예: UIScrollView 스크롤 시) 타이머가 고정될 수 있음을 의미합니다. 특정 실행 루프 모드에 타이머를 추가하여 이 문제를 해결할 수 있습니다.

RunLoop.current.add(timer, forMode: .common)

블로그 게시물에서 더 자세한 정보를 찾을 수 있습니다.

Swift 3.0 이상에 구현된 다음 기능을 사용해 보십시오.

func delayWithSeconds(_ seconds: Double, completion: @escaping () -> ()) {
    DispatchQueue.main.asyncAfter(deadline: .now() + seconds) { 
        completion()
    }
}

사용.

delayWithSeconds(1) {
   //Do something
}

지연을 위해 아래 코드를 사용해 보십시오.

//MARK: First Way

func delayForWork() {
    delay(3.0) {
        print("delay for 3.0 second")
    }
}

delayForWork()

// MARK: Second Way

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
    // your code here delayed by 0.5 seconds
}

한 가지 방법은 사용하는 것입니다.DispatchQueue.main.asyncAfter많은 분들이 답변해 주셨듯이.

다른 방법은 사용하는 것입니다.perform(_:with:afterDelay:)자세한 내용은 여기를 참조하십시오.

perform(#selector(delayedFunc), with: nil, afterDelay: 3)

@IBAction func delayedFunc() {
    // implement code
}

대부분의 일반적인 사용 방법은 다음과 같습니다.asyncAfter()그리고.Timer그러나 스레드를 차단해도 괜찮으면 다음과 같은 옵션이 있습니다.

sleep(3) // in seconds
usleep   // in 1/million of second 

비동기 프로그래밍(Swift 5.5)의 경우 func에서 일시 중지하는 방법은 다음과 같습니다.

func someAsyncFunc() async {
    await Task.sleep(2_000_000_000)  // Two seconds
    // Code to be executed with a delay here
}

//x초 후에 기능 실행

public static func runThisAfterDelay(seconds: Double, after: @escaping () -> Void) {
    runThisAfterDelay(seconds: seconds, queue: DispatchQueue.main, after: after)
}

public static func runThisAfterDelay(seconds: Double, queue: DispatchQueue, after: @escaping () -> Void) {
    let time = DispatchTime.now() + Double(Int64(seconds * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)
    queue.asyncAfter(deadline: time, execute: after)
}

//사용:-

runThisAfterDelay(seconds: x){
  //write your code here
}

언급URL : https://stackoverflow.com/questions/38031137/how-to-program-a-delay-in-swift-3