Swift 3'teki mevcut mesaj dizisinin hangisi olduğunu nasıl kontrol ederim?
Swift'in önceki sürümlerinde, bunu yaparak mevcut iş parçacığının ana ileti dizisi olup olmadığını kontrol etmek mümkündü:
NSThread.isMainThread()
Swift 3'teki mevcut mesaj dizisinin hangisi olduğunu nasıl kontrol ederim?
Swift'in önceki sürümlerinde, bunu yaparak mevcut iş parçacığının ana ileti dizisi olup olmadığını kontrol etmek mümkündü:
NSThread.isMainThread()
Yanıtlar:
Görünüşe göre sadece Thread.isMainThread
Swift 3'te.
İş parçacığını ve kuyruğu yazdırmak için bir uzantı yaptım:
extension Thread {
class func printCurrent() {
print("\r⚡️: \(Thread.current)\r" + "🏭: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r")
}
}
Thread.printCurrent()
Sonuç şöyle olacaktır:
⚡️: <NSThread: 0x604000074380>{number = 1, name = main}
🏭: com.apple.main-thread
Swift 4 ve üzeri:
Thread.isMainThread
Bool
kullanıcı Ana İş Parçacığı üzerinde veya Değilse, birisi kuyruğun / iş parçacığının adını yazdırmak isterse bu uzantının yardımcı olacağını belirten döndürür
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
}
}
}
Nasıl kullanılır:
print(Thread.current.threadName)
GCD'yı kullanırken kullanabileceğiniz dispatchPrecondition ileri yürütülmesi için gerekli bir gönderme durumunu kontrol etmek. Kodunuzun doğru iş parçacığı üzerinde yürütülmesini garanti etmek istiyorsanız bu yararlı olabilir. Örneğin:
DispatchQueue.main.async {
dispatchPrecondition(condition: .onQueue(DispatchQueue.global())) // will assert because we're executing code on main thread
}
En son Swift 4.0 ~ 4.2'de kullanabiliriz Thread.current
Bkz . Geçerli yürütme iş parçacığını temsil eden evre nesnesini döndürür.
__dispatch_queue_get_label
Swift stdlib'in bir parçası değildir, yalnızca Apple platformuna yönelik çerçevelerin dışında kullanılamaz. Mesela Ubuntu'da arayamıyorum.