Swift:如果我复制AnyObject是JSON数据,是否会通过引用复制或传递数据?

时间:2015-06-10 00:22:56

标签: json swift

我获取NSURLSession.sharedSession().dataTaskWithRequest后的JSON数据并将其反序列化为AnyObject

var error: NSError?
let jsonObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &error)

我想将它传递给完成处理程序,以便将jsonObject解析为结构化数据。

问题: jsonObject会通过引用传递还是深度复制?自从ArrayDictionary以来JSON组成的问题出现在Swift中是值类型。

我发现这个answer相关问题表明Foundation内的对象确实是NSArrayNSDictionary,即引用类型。是否与JSON数据相同?

2 个答案:

答案 0 :(得分:1)

类对象(AnyObject)始终通过引用传递。

答案 1 :(得分:0)

  • JSON结果数据由NSArray和NSDictionary组成 引用类型。如果您将结果数据输入 jsonObject ,那么 类型为 AnyObject?,然后在完成处理程序中传递它 它将取决于完成处理程序内的变量的类型 是否会通过引用或深度值传递将被复制。 如果用于捕获 jsonObject 的内部完成处理程序变量是 类型 AnyObject 然后将传递参考,如果完成 处理程序变量特别是数组字典类型 然后它将深深复制 jsonObject的值。
  • 还有一件事是,如果你的完成处理程序变量是特定类型,那么你应该知道JSON结果格式,否则它将无法正确解析。