JSONNDElement 中:
public var jsonString: String? { get { do { if let _ = self.data { return NSString(data: try NSJSONSerialization.dataWithJSONObject(self.data, options: .PrettyPrinted), encoding: NSUTF8StringEncoding) as? String } else { return nil } } catch { return nil } } } public var jsonStringValue: String { get { if let i = self.jsonString { return i } else { return "" } } } 使用 Array、Dictionary 生成 JSON 对象这一步操作我们将使用从 SwiftyJSON 中偷来的函数,稍加改装就可以利用了:
// stolen from SwiftyJSON extension JSONND: DictionaryLiteralConvertible { public init(dictionaryLiteral elements: (String, AnyObject)...) { self.init(jsonObject: elements.reduce([String : AnyObject]()){(dictionary: [String : AnyObject], element:(String, AnyObject)) -> [String : AnyObject] in var d = dictionary d[element.0] = element.1 return d }) } } // stolen from SwiftyJSON extension JSONND: ArrayLiteralConvertible { public init(arrayLiteral elements: AnyObject...) { self.init(jsonObject: elements) } }代码的原理也很简单,利用系统的自动转换 protocol:DictionaryLiteralConvertible 和 ArrayLiteralConvertible,让 Array 和 Dictionary 自动转换为 JSONND 类型。现在我们可以采用这种方式定义 JSONND 对象了:
let dictionaryJSON: JSONND = ["a": 1, "b": [1, 2, 3]] let arrayJSON: JSONND = [0, 1, 2] 搞定! 检验成果我已经给 JSONNeverDie 项目写了完整的单元测试来测试每一项功能,感兴趣的同学可以去 Github 查看 测试代码 。