Swift 3の現在のスレッドがどれかを確認するにはどうすればよいですか?
Swiftの以前のバージョンでは、これを行うことにより、現在のスレッドがメインのスレッドであるかどうかを確認することができました。
NSThread.isMainThread()
単にSwiftのThread.isMainThread
のように見えます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.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)
最新のSwift 4.0〜4.2では、Thread.current
を使用できます
GCDを使用する場合、dispatchPreconditionを使用して、さらに実行するために必要なディスパッチ条件を確認できます。これは、正しいスレッドでのコード実行を保証する場合に役立ちます。例えば:
DispatchQueue.main.async {
dispatchPrecondition(condition: .onQueue(DispatchQueue.global())) // will assert because we're executing code on main thread
}