ios - bar - uinavigationitem title color
¿Cómo verificar el hilo actual en Swift 3? (6)
¿Cómo verifico cuál es el hilo actual en Swift 3?
En versiones anteriores de Swift, era posible verificar si el hilo actual era el principal haciendo esto:
NSThread.isMainThread()
Al usar GCD, puede usar dispatchPrecondition para verificar una condición de envío necesaria para una ejecución posterior. Esto puede ser útil si desea garantizar la ejecución de su código en el hilo correcto. Por ejemplo:
DispatchQueue.main.async {
dispatchPrecondition(condition: .onQueue(DispatchQueue.global())) // will assert because we''re executing code on main thread
}
En la última
Thread.current
Swift 4.0 ~ 4.2, podemos usar
Thread.current
Consulte Devuelve el objeto de hilo que representa el hilo de ejecución actual
He hecho una extensión para imprimir el hilo y la cola:
extension Thread {
class func printCurrent() {
print("/r⚡️: /(Thread.current)/r" + "🏭: /(OperationQueue.current?.underlyingQueue?.label ?? "None")/r")
}
}
Thread.printCurrent()
El resultado sería:
⚡️: <NSThread: 0x604000074380>{number = 1, name = main}
🏭: com.apple.main-thread
Parece que es simplemente
Thread.isMainThread
en Swift 3.
Thread.isMainThread
devolverá un valor booleano que indica si está actualmente en el hilo principal de la interfaz de usuario.
Pero esto no le dará el hilo actual.
Solo te dirá si estás en la página principal o no.
Thread.current
devolverá el hilo actual en el que se encuentra.
Swift 4 y superior:
Thread.isMainThread
devuelve
Bool
indicando que si el usuario está en Main Thread o Not, en caso de que alguien quiera imprimir el nombre de la cola / thread, esta extensión 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
}
}
}
Cómo utilizar:
print(Thread.current.threadName)