स्विफ्ट 3 में वर्तमान धागे की जांच कैसे करें?


105

मैं कैसे जांचूं कि स्विफ्ट 3 में कौन सा वर्तमान धागा है?

स्विफ्ट के पिछले संस्करणों में यह जांचना संभव था कि क्या वर्तमान धागा ऐसा करने से मुख्य है:

NSThread.isMainThread()

जवाबों:



106

Thread.isMainThreadयदि आप वर्तमान में मुख्य UI थ्रेड पर हैं, तो यह इंगित करते हुए एक बूलियन लौटाएगा। लेकिन यह आपको वर्तमान धागा नहीं देगा। यह केवल आपको बताएगा कि आप मुख्य पर हैं या नहीं।

Thread.current आपके द्वारा चालू किए गए वर्तमान थ्रेड को वापस करेगा।


24

मैंने थ्रेड और कतार मुद्रित करने के लिए एक एक्सटेंशन बनाया है:

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

17

स्विफ्ट 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)

9

GCD का उपयोग करते समय आप उपयोग कर सकते dispatchPrecondition एक प्रेषण हालत आगे निष्पादन के लिए आवश्यक जांच करने के लिए। यदि आप सही कोड पर अपने कोड निष्पादन की गारंटी देना चाहते हैं तो यह उपयोगी हो सकता है। उदाहरण के लिए:

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.