[Parameters] स्विफ्ट में जीसीडी मुख्य धागे पर पैरामीटर के साथ विधि कैसे कॉल करें?


Answers

स्विफ्ट 3 और स्विफ्ट 4 संस्करण:

DispatchQueue.main.async {
    print("Hello")
}
Question

मेरे ऐप में मेरे पास एक ऐसा फ़ंक्शन है जो NSRURLSession बनाता है और इसका उपयोग करके NSURLRequest भेजता है

sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error)

इस कार्य के लिए समापन ब्लॉक में, मुझे कुछ गणना करने की आवश्यकता है जो कॉलिंग व्यू कंट्रोलर को UIImage जोड़ता है। मेरे पास एक func कहा जाता है

func displayQRCode(receiveAddr, withAmountInBTC:amountBTC)

यह UIImage- जोड़ गणना करता है। अगर मैं समापन ब्लॉक के अंदर व्यू-एडेडिंग कोड चलाने की कोशिश करता हूं, तो एक्सकोड एक त्रुटि कहता है कि मैं पृष्ठभूमि प्रक्रिया में लेआउट इंजन का उपयोग नहीं कर सकता। इसलिए मुझे SO पर कुछ कोड मिला जो मुख्य धागे पर एक विधि को कतारबद्ध करने का प्रयास करता है:

let time = dispatch_time(DISPATCH_TIME_NOW, Int64(0.0 * Double(NSEC_PER_MSEC)))
                    dispatch_after(time, dispatch_get_main_queue(), {
                        let returned = UIApplication.sharedApplication().sendAction("displayQRCode:", to: self.delegate, from: self, forEvent: nil)
                        })

हालांकि, मुझे नहीं पता कि इस फ़ंक्शन कॉल में "getAddr" और "amountBTC" पैरामीटर कैसे जोड़ें। मैं यह कैसे करूँगा, या कोई एप्लिकेशन की मुख्य कतार में विधि कॉल जोड़ने के लिए एक इष्टतम तरीका सुझा सकता है?




अगर आप बंद होने के अंदर स्वयं का उपयोग कर रहे हैं तो स्वयं को कमजोर करना न भूलें।

dispatch_async(dispatch_get_main_queue(),{ [weak self] () -> () in
            if let strongSelf = self {
                self?.doSomething()
            }
        })



अन्य उत्तरों के समान परिणाम प्राप्त करने के लिए यहां निकर (आईएमओ) स्विफ्ट / कोको शैली वाक्यविन्यास है:

NSOperationQueue.mainQueue().addOperationWithBlock({
    // Your code here
})

या आप कम असीमित स्विफ्ट लाइब्रेरी को भी कम कोड और अधिक कार्यक्षमता के लिए पकड़ सकते हैं:

Async.main {
    // Your code here
}



Links