128 votes

Comment vérifier le fil actuel dans Swift 3 ?

Comment puis-je vérifier lequel est le fil actuel dans Swift 3 ?

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

NSThread.isMainThread()

238voto

BalestraPatrick Points 1027

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

125voto

Billy A Points 56

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

Thread.current renverra le fil de discussion actuel sur lequel vous vous trouvez.

31voto

Nik Kov Points 2742

J'ai fait 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

30voto

Suhit Patil Points 6334

Swift 4 et plus :

Thread.isMainThread renvoie à Bool indiquant que si l'utilisateur est sur le fil principal ou non, dans le cas où quelqu'un veut imprimer le nom de la file d'attente / fil, cette extension sera 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 l'utiliser :

print(Thread.current.threadName)

1 votes

__dispatch_queue_get_label ne fait pas partie de la stdlib de Swift, elle n'est pas disponible en dehors des frameworks réservés à la plateforme Apple. On ne peut pas l'appeler sur Ubuntu, par exemple.

0 votes

__dispatch_queue_get_label(nil) ENFIN quelque chose qui fonctionne, merci !

3voto

code4latte Points 332

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

Ver Renvoie l'objet thread représentant le thread d'exécution actuel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X