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
'programing' 카테고리의 다른 글
Bash 배열의 요소를 구분된 문자열로 결합하려면 어떻게 해야 합니까? (0) | 2023.04.27 |
---|---|
TSQL을 사용하여 데이터베이스의 SQL Server 버전을 어떻게 확인합니까? (0) | 2023.04.27 |
아이폰 시뮬레이터가 갑자기 매우 느리게 실행되기 시작했습니다. (0) | 2023.04.27 |
postgres: 사용자를 슈퍼 유저로 업그레이드하시겠습니까? (0) | 2023.04.27 |
Angular에서 @Input() 값이 변경될 때 감지하는 방법은 무엇입니까? (0) | 2023.04.27 |