Swift perform Selector:withObject:afterDelay:는 사용할 수 없습니다.
나는 오브젝티브 C에 스위프트로 전환하는 앱이 있습니다.목표 C에서 나는 다음과 같은 방법을 사용합니다.
[self.view performSelector:@selector(someSelector) withObject:self afterDelay:0.1f];
스위프트와 함께 일하고 있는데 어떻게 해야 할지 모르겠어요.시도해 봤습니다.
self.view.performSelector(Selector("someSelector"), withObject: self, afterDelay: 0.1)
다음과 같은 오류가 발생합니다.'performSelector' is unavailable: 'performSelector' methods are unavailable
메서드를 호출하려면 어떤 호출을 사용해야 합니까?afterDelay
?
갱신하다
다음과 같은 결과를 얻었습니다.
extension NSObject {
func callSelectorAsync(selector: Selector, object: AnyObject?, delay: NSTimeInterval) -> NSTimer {
let timer = NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: selector, userInfo: object, repeats: false)
return timer
}
func callSelector(selector: Selector, object: AnyObject?, delay: NSTimeInterval) {
let delay = delay * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
NSThread.detachNewThreadSelector(selector, toTarget:self, withObject: object)
})
}
}
스위프트 4
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
// your function here
}
스위프트 3
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(0.1)) {
// your function here
}
스위프트 2
let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
// your function here
})
다음과 같이 할 수 있습니다.
var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("someSelector"), userInfo: nil, repeats: false)
func someSelector() {
// Something after a delay
}
스위프트 3
let timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(someSelector), userInfo: nil, repeats: false)
func someSelector() {
// Something after a delay
}
Swift는 정적으로 입력되므로performSelector:
방법은 도중에 떨어지는 것입니다.
대신 GCD를 사용하여 적절한 블록을 관련 대기열로 전송합니다. 이 경우 UIKit 작업을 수행하는 것처럼 보이기 때문에 메인 대기열이 될 수 있습니다.
EDIT: 관련performSelector:
또한 문서의 Swift 버전("1 Objective-C 기호 숨김")에서 특히 누락되어 있으므로 바로 뛰어들 수 없습니다.그것과 스위프트화된 것의 부재와 함께.NSObject
저는 애플이 여기서 무슨 생각을 하고 있는지 매우 분명하다고 주장합니다.
언급URL : https://stackoverflow.com/questions/24170282/swift-performselectorwithobjectafterdelay-is-unavailable
'IT' 카테고리의 다른 글
DataGrip에서 LOAD DATA 작업 디렉토리를 설정하려면 어떻게 해야 합니까? (0) | 2023.06.07 |
---|---|
vuex 상태에서 메타 테마 색상 변경 (0) | 2023.06.07 |
PL/pgSQL을 사용하여 쿼리 결과를 변수에 저장 (0) | 2023.06.02 |
루비의 대장 연산자는 무엇입니까? (0) | 2023.06.02 |
반복하는 동안 값 변경 (0) | 2023.06.02 |