Como verificar o tópico atual no Swift 3?


105

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:



106

Thread.isMainThreadretornará um booleano indicando se você está atualmente no thread de interface do usuário principal. Mas isso não lhe dará o tópico atual. Ele só vai dizer se você está na linha principal ou não.

Thread.current retornará o tópico atual em que você está.


24

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

17

Swift 4 e superior:

Thread.isMainThreadretorna Boolinformando 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)

9

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
}

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.