[ios] Swift 3에서 현재 스레드를 확인하는 방법은 무엇입니까?

Swift 3에서 현재 스레드가 무엇인지 어떻게 확인합니까?

이전 버전의 Swift에서는 다음을 수행하여 현재 스레드가 주 스레드인지 확인할 수있었습니다.

NSThread.isMainThread()



답변

단순히 Thread.isMainThreadSwift 3에있는 것 같습니다.


답변

Thread.isMainThread현재 기본 UI 스레드에 있는지 여부를 나타내는 부울을 반환합니다. 그러나 이것은 현재 스레드를 제공하지 않습니다. 메인에 있는지 여부 만 알려줍니다.

Thread.current 현재있는 스레드를 반환합니다.


답변

스레드 및 대기열을 인쇄하는 확장을 만들었습니다.

extension Thread {
    class func printCurrent() {
        print("\r⚡️: \(Thread.current)\r" + "?: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r")
    }
}

Thread.printCurrent()

결과는 다음과 같습니다.

⚡️: <NSThread: 0x604000074380>{number = 1, name = main}
?: com.apple.main-thread


답변

Swift 4 이상 :

Thread.isMainThreadBool사용자가 Main Thread에 있거나 Not에있는 경우 누군가가 대기열 / 스레드의 이름을 인쇄하려는 경우이 확장이 도움이 될 것이라는 내용을 반환합니다 .

extension Thread {

    var threadName: String {
        if let currentOperationQueue = OperationQueue.current?.name {
            return "OperationQueue: \(currentOperationQueue)"
        } else if let underlyingDispatchQueue = OperationQueue.current?.underlyingQueue?.label {
            return "DispatchQueue: \(underlyingDispatchQueue)"
        } else {
            let name = __dispatch_queue_get_label(nil)
            return String(cString: name, encoding: .utf8) ?? Thread.current.description
        }
    }
}

사용하는 방법:

print(Thread.current.threadName)


답변

GCD를 사용할 때 dispatchPrecondition 을 사용 하여 추가 실행에 필요한 디스패치 조건을 확인할 수 있습니다 . 올바른 스레드에서 코드 실행을 보장하려는 경우 유용 할 수 있습니다. 예를 들면 :

DispatchQueue.main.async {
    dispatchPrecondition(condition: .onQueue(DispatchQueue.global())) // will assert because we're executing code on main thread
}


답변

최신 Swift 4.0 ~ 4.2에서는 Thread.current

참조는 현재 실행 스레드를 나타내는 스레드 오브젝트를 돌려줍니다


답변