Como posso verificar qual é o tópico atual no Swift 3?
Nas versões anteriores do Swift, era possível verificar se o tópico atual era o principal fazendo o seguinte:
NSThread.isMainThread()
Como posso verificar qual é o tópico atual no Swift 3?
Nas versões anteriores do Swift, era possível verificar se o tópico atual era o principal fazendo o seguinte:
NSThread.isMainThread()
Respostas:
Parece que está simplesmente Thread.isMainThread
no Swift 3.
Fiz uma extensão para imprimir o thread e a fila:
extension Thread {
class func printCurrent() {
print("\r⚡️: \(Thread.current)\r" + "🏭: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r")
}
}
Thread.printCurrent()
O resultado seria:
⚡️: <NSThread: 0x604000074380>{number = 1, name = main}
🏭: com.apple.main-thread
Swift 4 e superior:
Thread.isMainThread
retorna Bool
informando que se o usuário está no thread principal ou não, no caso de alguém querer imprimir o nome da fila / thread esta extensão será útil
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
}
}
}
Como usar:
print(Thread.current.threadName)
Ao usar o GCD, você pode usar dispatchPrecondition para verificar uma condição de envio necessária para execução posterior. Isso pode ser útil se você quiser garantir a execução do código no thread correto. Por exemplo:
DispatchQueue.main.async {
dispatchPrecondition(condition: .onQueue(DispatchQueue.global())) // will assert because we're executing code on main thread
}
Na versão mais recente do Swift 4.0 ~ 4.2, podemos usar Thread.current
Veja Retorna o objeto thread que representa o thread atual de execução