मैं कैसे जांचूं कि स्विफ्ट 3 में कौन सा वर्तमान धागा है?
स्विफ्ट के पिछले संस्करणों में यह जांचना संभव था कि क्या वर्तमान धागा ऐसा करने से मुख्य है:
NSThread.isMainThread()
मैं कैसे जांचूं कि स्विफ्ट 3 में कौन सा वर्तमान धागा है?
स्विफ्ट के पिछले संस्करणों में यह जांचना संभव था कि क्या वर्तमान धागा ऐसा करने से मुख्य है:
NSThread.isMainThread()
जवाबों:
ऐसा लगता है कि यह बस Thread.isMainThread
स्विफ्ट 3 में है।
मैंने थ्रेड और कतार मुद्रित करने के लिए एक एक्सटेंशन बनाया है:
extension Thread {
class func printCurrent() {
print("\r⚡️: \(Thread.current)\r" + "🏭: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r")
}
}
Thread.printCurrent()
परिणाम होगा:
⚡️: <NSThread: 0x604000074380>{number = 1, name = main}
🏭: com.apple.main-thread
स्विफ्ट 4 और इसके बाद के संस्करण:
Thread.isMainThread
रिटर्न Bool
हुए कहा कि यदि उपयोगकर्ता मुख्य थ्रेड पर है या नहीं, इस मामले में किसी को कतार के नाम मुद्रित / इस विस्तार थ्रेड उपयोगी होगा करना चाहता है
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
}
}
}
कैसे इस्तेमाल करे:
print(Thread.current.threadName)
GCD का उपयोग करते समय आप उपयोग कर सकते dispatchPrecondition एक प्रेषण हालत आगे निष्पादन के लिए आवश्यक जांच करने के लिए। यदि आप सही कोड पर अपने कोड निष्पादन की गारंटी देना चाहते हैं तो यह उपयोगी हो सकता है। उदाहरण के लिए:
DispatchQueue.main.async {
dispatchPrecondition(condition: .onQueue(DispatchQueue.global())) // will assert because we're executing code on main thread
}
नवीनतम स्विफ्ट 4.0 ~ 4.2 में, हम उपयोग कर सकते हैं Thread.current
निष्पादन के वर्तमान धागे का प्रतिनिधित्व करने वाले थ्रेड ऑब्जेक्ट को देखें