Come posso verificare qual è il thread corrente in Swift 3?
Nelle versioni precedenti di Swift era possibile verificare se il thread corrente fosse quello principale in questo modo:
NSThread.isMainThread()
Come posso verificare qual è il thread corrente in Swift 3?
Nelle versioni precedenti di Swift era possibile verificare se il thread corrente fosse quello principale in questo modo:
NSThread.isMainThread()
Risposte:
Sembra che sia semplicemente Thread.isMainThread
in Swift 3.
Ho creato un'estensione per stampare il thread e la coda:
extension Thread {
class func printCurrent() {
print("\r⚡️: \(Thread.current)\r" + "🏭: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r")
}
}
Thread.printCurrent()
Il risultato sarebbe:
⚡️: <NSThread: 0x604000074380>{number = 1, name = main}
🏭: com.apple.main-thread
Swift 4 e versioni successive:
Thread.isMainThread
restituisce Bool
affermando che se l'utente è su Main Thread o No, nel caso in cui qualcuno volesse stampare il nome della coda / thread questa estensione sarà utile
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
}
}
}
Come usare:
print(Thread.current.threadName)
Quando si utilizza GCD è possibile utilizzare dispatchPrecondition per verificare una condizione di invio necessaria per un'ulteriore esecuzione. Questo può essere utile se vuoi garantire l'esecuzione del codice sul thread corretto. Per esempio:
DispatchQueue.main.async {
dispatchPrecondition(condition: .onQueue(DispatchQueue.global())) // will assert because we're executing code on main thread
}
Nell'ultimo Swift 4.0 ~ 4.2, possiamo usare Thread.current
Vedere Restituisce l'oggetto thread che rappresenta il thread di esecuzione corrente