Swift performSelector : withObject : afterDelay :를 사용할 수 없습니다
이 질문에는 이미 답변이 있습니다.
- dispatch_after-스위프트의 GCD? 답변 23 개
Objective C에 Swift로 전환하는 앱이 있습니다. 목표 C에는 다음과 같은 방법이 있습니다.
[self.view performSelector:@selector(someSelector) withObject:self afterDelay:0.1f];
Swift와 함께 일하고 있으며이를 수행하는 방법을 알 수 없습니다. 난 노력 했어:
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
}
스위프트는 정적으로 입력되므로 performSelector:
메소드가 길가에 떨어집니다.
대신 GCD를 사용하여 적절한 큐를 관련 큐에 디스패치하십시오.이 경우 UIKit 작업을 수행하는 것처럼 보이기 때문에 아마도 기본 큐가됩니다.
EDIT: the relevant performSelector:
is also notably missing from the Swift version of the NSRunLoop
documentation ("1 Objective-C symbol hidden") so you can't jump straight in with that. With that and its absence from the Swiftified NSObject
I'd argue it's pretty clear what Apple is thinking here.
'development' 카테고리의 다른 글
반응 / JSX 동적 구성 요소 이름 (0) | 2020.06.29 |
---|---|
Bash를 사용하여 변수 파일을 참조하는 방법은 무엇입니까? (0) | 2020.06.29 |
텍스트 파일의 내용을 자바 스크립트 변수에 어떻게로드합니까? (0) | 2020.06.29 |
Obj-C에서 Swift 's Enum을 사용할 수 있습니까? (0) | 2020.06.29 |
Visual Studio 2005에서 컴파일 시간이 매우 느림 (0) | 2020.06.29 |