मैं एक अत्याधुनिक एपीआई की कोशिश कर रहा हूं जो कुछ जेसन डेटा देता है। मैं उस कोड को समाहित करना चाहता हूं जो HTTP अनुरोध बनाता है और हेडर को अपनी विधि में सेट करता है, इसलिए मैं इसे एक यूआरएल स्ट्रिंग दर्ज करके कॉल कर सकता हूं और उसके बाद विधि एक JSON ऑब्जेक्ट लौटा सकती है।स्विफ्ट में वापसी के साथ पूरा करने का उपयोग कैसे करें?
कोड के निम्न स्निपेट में, मैंने पहले से ही ऑब्जेक्ट बनाया है और हेडर सेट कर दिया है, और मैं उस चर "req" को कॉल करता हूं। मैंने डेटा, प्रतिक्रिया, या त्रुटि नाम की कोई वस्तु नहीं घोषित की है। मेरे पास निम्न कोड है जो एक JSON ऑब्जेक्ट
let sesh = NSURLSession.sharedSession()
let dataTask = sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error) in
var jsonError : NSError?
let jsonBlob = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableLeaves, error: &jsonError)
println(jsonBlob)
});
dataTask.resume()
सही ढंग से प्रिंट करता है तो मेरा प्रश्न है। मैं इसे कैसे बना सकता हूं ताकि यह पूरा हो सकेडलर ब्लॉक jsonBlob को वापस करने में सक्षम है, जो "AnyObject!" प्रकार का है?
let sesh = NSURLSession.sharedSession()
let dataTask = sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error) -> AnyObject! in
var jsonError : NSError?
let jsonBlob : AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableLeaves, error: &jsonError)
return jsonBlob
});
dataTask.resume()
तो कार्यक्रम dataTaskWithRequest करने के लिए कॉल के रूप में संकलित नहीं करेंगे:: यदि मैं निम्नलिखित होने के लिए थोड़ा कोड को संशोधित
Could not find an overload for 'dataTaskWithRequest' that accepts the supplied arguments
मुझे यह समझ नहीं है: completionHandler कह एक संकलक चेतावनी देता है । मैं वापस आ रहा बंद के लिए सही सिंटैक्स का उपयोग कर रहा है, के रूप स्विफ्ट दस्तावेज़ का यह पेज में दी गई है:
आप डेटा वापस क्यों करना चाहते हैं? यह कहां वापस आना चाहिए?यह स्पष्ट नहीं है कि आप क्या करने की कोशिश कर रहे हैं - पूरा करने वाले हैंडलर ब्लॉक को शायद कुछ भी वापस नहीं करना चाहिए। – jtbandes
क्या आप कॉलर को कुछ भी वापस भेजना चाहते हैं? आपका पूरा करने वाला हैंडलर यहां प्रक्रिया को समाप्त करता है। – holex
@jtbandes मुझे सिक्काबेस के एपीआई का उपयोग करके एक जीईटी अनुरोध करने की आवश्यकता है, और उसके बाद जेएसओएन ऑब्जेक्ट से डेटा निकालने की आवश्यकता है। अभी, पूरा होने वाला ब्लॉक चलाता है और जेएसओएन देता है, लेकिन ब्लॉक समाप्त होने के बाद प्रतिक्रिया डेटा खो जाता है। मुझे JSON प्रतिक्रिया ऑब्जेक्ट से कुछ डेटा का उपयोग करके एक स्ट्रिंग ऑब्जेक्ट बनाने की आवश्यकता है और यह ब्लॉक के जीवन से परे बनी हुई है। यूआरएल सत्र दस्तावेज़ों से मुझे लगता है कि मुझे कुछ NSURLSessionDataDelegate प्रोटोकॉल को लागू करना होगा जो प्रतिक्रिया लौटने के बाद आग लगती हैं। क्या ये सही है? हालांकि मैं चीजों को वापस करने के लिए बस एक साधारण समापन ब्लॉक का उपयोग करना चाहता हूं। – almel