2015-07-29 8 views
14

में NSJSONSerialization.JSONObjectWithData को कोई विकल्प कैसे पास नहीं करें स्विफ्ट (2.0) में JSON deserializing जब मैं कोई विकल्प पास नहीं करना चाहता हूं। मैं मूल रूप से करने की कोशिश की:स्विफ्ट

NSJSONSerialization.JSONObjectWithData(data, options: nil) 

लेकिन उस संकलन नहीं है, मैं त्रुटि मिलती है:

Type NSJSONReadingOptions does not conform to protocol NilLiteralConvertible

enum NSJSONReadingOptions किसी भी 'कोई नहीं' विकल्प नहीं है, तो क्या मैं अगर मैं क्या करते हो इनमें से किसी भी विकल्प की इच्छा नहीं है?

उत्तर

20

तेज 2 में आप no options इंगित करने के लिए खाली सरणी [] उपयोग करना चाहिए:

NSJSONSerialization.JSONObjectWithData(data, options: []) 
+0

काम करने के लिए लगता है कि कर सकते हैं आप मुझे किसी भी दस्तावेज़ीकरण के बारे में बताते हैं कि मैं [] क्यों पारित कर सकता हूं [] जब यह गणना की अपेक्षा करता है? – markdb314

+0

@ markdb314 मैं बस एक डॉक्टर लिंक की तलाश में था, मुझे एक सेकंड दें। – luk2302

+0

@ markdb314 दुर्भाग्यवश मुझे यह काम करने के लिए कोई दस्तावेज़ नहीं मिल रहा है, लेकिन आप यह सुनिश्चित कर सकते हैं कि जाने का तरीका है, अन्य उत्तरों को देखें जहां विकल्प दिए जाने चाहिए और [] सौंपा गया है। मुझे लगता है कि इसमें कुछ है 'RawOptionSetType' के साथ करें जो ** संरचना ** (enum नहीं) 'NSKeyValueObservingOptions' के अनुरूप है -> http://nshipster.com/rawoptionsettype/ – luk2302

1

तुम भी NSJSONReadingOptions वस्तु के लिए एक खाली निर्माता का उपयोग कर सकते हैं।

NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) 
8

tldr; स्विफ्ट 3: बस विकल्प पैराम छोड़ें और सब ठीक रहेगा।

JSONSerialization.jsonObject(with: data) 

स्पष्टीकरण:

तेज 3 में

, समारोह कॉल

class func jsonObject(with data: Data, options opt: JSONSerialization.ReadingOptions = []) throws -> AnyObject 

ReadingOptions एक विकल्प सेट, विकल्प सेट प्रोटोकॉल के लिए शीर्ष लेख है है

/// When you need to create an instance of an option set, assign one of the 
/// type's static members to your variable or constant. Alternately, to create 
/// an option set instance with multiple members, assign an array literal with 
/// multiple static members of the option set. To create an empty instance, 
/// assign an empty array literal to your variable. 
/// 
///  let singleOption: ShippingOptions = .priority 
///  let multipleOptions: ShippingOptions = [.nextDay, .secondDay, .priority] 
///  let noOptions: ShippingOptions = [] 

option set docs are here

जिसका मतलब है कि आप, विकल्प पहले से ही डिफ़ॉल्ट [] समारोह परिभाषा परिभाषित किया गया है लेकिन

JSONSerialization.jsonObject(with: data, options: []) 

कॉल कर सकते हैं, ताकि आप इसे पूरी तरह छोड़ सकते हैं और कॉल कर सकते हैं

JSONSerialization.jsonObject(with: data)