web-dev-qa-db-fra.com

Comment vérifier le fil actuel dans Swift 3?

Comment vérifier quel est le thread actuel dans Swift 3?

Dans les versions précédentes de Swift, il était possible de vérifier si le thread actuel était le thread principal en procédant comme suit:

NSThread.isMainThread()
85
BalestraPatrick

On dirait que c'est simplement Thread.isMainThread dans Swift 3.

164
BalestraPatrick

Thread.isMainThread retournera un booléen indiquant si vous êtes actuellement sur le fil principal de l'interface utilisateur. Mais cela ne vous donnera pas le fil de discussion actuel. Il ne vous dira que si vous êtes sur le principal ou non.

Thread.current retournera le fil actuel sur lequel vous vous trouvez.

86
Brandon A

J'ai créé une extension pour imprimer le fil et la file d'attente:

extension Thread {
    class func printCurrent() {
        print("\r⚡️: \(Thread.current)\r" + "????: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r")
    }
}

Thread.printCurrent()

Le résultat serait:

⚡️: <NSThread: 0x604000074380>{number = 1, name = main}
????: com.Apple.main-thread
14
Nik Kov

Swift 4 et plus:

Thread.isMainThread retourne Bool indiquant que si l'utilisateur est sur le fil principal ou non, au cas où quelqu'un voudrait imprimer le nom de la file d'attente/fil, cette extension serait 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
        }
    }
}

Comment utiliser:

print(Thread.current.threadName)
5
Suhit Patil

Dans les dernières Swift 4.0 ~ 4.2, nous pouvons utiliser Thread.current

See Retourne l'objet thread représentant le thread en cours d'exécution

1
code4latte

Lorsque vous utilisez GCD, vous pouvez utiliser dispatchPrecondition pour vérifier une condition d’expédition nécessaire à une exécution ultérieure. Cela peut être utile si vous voulez garantir l’exécution de votre code sur le bon thread. Par exemple:

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