如何在Swift中向NSJSONSerialization.JSONObjectWithData传递任何选项

mar*_*314 15 ios swift swift2

我希望在Swift(2.0)中反序列化JSON时不传递任何选项.我最初尝试过:

NSJSONSerialization.JSONObjectWithData(data, options: nil)
Run Code Online (Sandbox Code Playgroud)

但那不编译,我得到错误:

类型NSJSONReadingOptions不符合协议NilLiteralConvertible

枚举NSJSONReadingOptions没有任何"无"选项,所以如果我不想要任何这些选项,该怎么办?

luk*_*302 20

在swift 2中,您应该使用空数组[]来指示no options:

NSJSONSerialization.JSONObjectWithData(data, options: [])
Run Code Online (Sandbox Code Playgroud)


Con*_*lon 8

tldr; Swift 3:跳过选项参数,一切都会好的.

JSONSerialization.jsonObject(with: data)
Run Code Online (Sandbox Code Playgroud)

说明:

在swift 3中,函数调用是

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

ReadingOptions是一个选项集,Option Set协议的标题有

/// 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 = []
Run Code Online (Sandbox Code Playgroud)

选项设置文档是在这里

这意味着你可以打电话

JSONSerialization.jsonObject(with: data, options: [])
Run Code Online (Sandbox Code Playgroud)

但是,选项已经在函数定义中定义了默认[],因此您可以完全跳过它并调用

JSONSerialization.jsonObject(with: data)
Run Code Online (Sandbox Code Playgroud)