在`JSONSerialization.data`的类型声明中存在明显的不一致

时间:2016-12-14 21:17:44

标签: swift types swift3

以下是JSONSerialization.data的类型签名:

class func data(withJSONObject obj: Any, options opt: JSONSerialization.WritingOptions = []) throws -> Data

奇怪的是JSONSerialization.WritingOptions是一个结构,而默认值[]是一个数组,而不是匹配。有什么不对吗?

2 个答案:

答案 0 :(得分:3)

JSONSerialization.WritingOptions符合OptionSet协议,该协议继承自SetAlgebra,并且继承自ExpressibleByArrayLiteral

因此,您可以从(可能为空)数组 literal 创建<jsp:include page="${headURL}"></jsp:include> 值(使用 init(arrayLiteral elements: Self.Element...)初始值设定项):

JSONSerialization.WritingOptions

对于阅读选项(其中包含多个选项)也是如此 一个可能的值),例如:

JSONSerialization.data(withJSONObject: obj, options: [])
JSONSerialization.data(withJSONObject: obj, options: [.prettyPrinted])

以及许多其他JSONSerialization.jsonObject(with: json, options: [.allowFragments, .mutableLeaves]) 类型。

此外,OptionSet继承自RawRepresentable 使用整数 OptionSet。表示每个可能的值 作为一个整数,其中0,1或多位设置为1。

但请注意上述示例中的RawValue[] array literals (从中创建[.prettyPrinted]值),而不是数组。这不会编译:

JSONSerialization.WritingOptions

答案 1 :(得分:0)

Swift 4 :这有效!

JSONSerialization.data(withJSONObject: data, options: [])