2015-07-29 9 views
14

Nie chcę przekazywać żadnych opcji podczas deserializacji JSON w Swift (2.0). I początkowo próbowałem:Jak przekazać żadnych opcji do NSJSONSerialization.JSONObjectWithData w Swift

NSJSONSerialization.JSONObjectWithData(data, options: nil) 

Ale to nie skompilować, otrzymuję błąd:

Type NSJSONReadingOptions does not conform to protocol NilLiteralConvertible

wyliczenia NSJSONReadingOptions nie ma żadnego 'none' opcję, więc co mam zrobić, jeśli nie chcesz żadnej z tych opcji?

Odpowiedz

20

W Swift 2 należy użyć pustą tablicę [] wskazać no options:

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

To wydaje się działać może, możesz wskazać mi jakąkolwiek dokumentację dotyczącą tego, dlaczego mogę przekazać [] kiedy oczekuje wyliczenia? – markdb314

+0

@ markdb314 Właśnie szukałem linku do dokumentu, daj mi sekundę. – luk2302

+0

@ markdb314 Niestety nie mogę znaleźć żadnego dokumentu, dlaczego to działa, ale możesz być pewny, że to jest droga, spójrz na inną odpowiedź, gdzie opcje mają być podane i [] jest przekazywane. Chyba ma coś do zrobić z 'RawOptionSetType', który ** struct ** (nie wylicza)' NSKeyValueObservingOptions' jest zgodny z -> http://nshipster.com/rawoptionsettype/ – luk2302

1

Można również użyć pustego konstruktora dla obiektu NSJSONReadingOptions.

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

tldr; Swift 3: Po prostu pomiń opcje i wszystko będzie dobrze.

JSONSerialization.jsonObject(with: data) 

Objaśnienie:

w szybkim 3, wywołanie funkcji jest

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

ReadingOptions to zestaw opcji, nagłówek dla protokołu Option Set ma

/// 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

który oznacza, że ​​można zadzwonić

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

jednak opcje już jest domyślnym [] zdefiniowane w definicji funkcji, więc można pominąć go w całości i nazywają

JSONSerialization.jsonObject(with: data) 
Powiązane problemy