Swift 3で現在のスレッドを確認するにはどうすればよいですか?


105

Swift 3の現在のスレッドを確認するにはどうすればよいですか?

以前のバージョンのSwiftでは、次のようにして現在のスレッドがメインスレッドであるかどうかを確認することができました。

NSThread.isMainThread()

回答:



106

Thread.isMainThread現在メインUIスレッドにいるかどうかを示すブール値を返します。しかし、これはあなたに現在のスレッドを与えません。あなたがメインにいるかどうかだけを教えてくれます。

Thread.current 現在のスレッドを返します。


24

スレッドとキューを出力する拡張機能を作成しました。

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

17

Swift 4以降:

Thread.isMainThread戻ってBool、ユーザは、メインスレッド上にあるか、そうでない場合は、ケースには、誰かが参考になるこの拡張機能をスレッド/キューの名前を印刷したい場合は、その旨

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)

9

GCDを使用する場合、dispatchPreconditionを使用て、さらに実行するために必要なディスパッチ条件を確認できます。これは、正しいスレッドでのコード実行を保証する場合に役立ちます。例えば:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.