JSONSerialization AnyObject SWIFT3 转换问题

Posted

技术标签:

【中文标题】JSONSerialization AnyObject SWIFT3 转换问题【英文标题】:JSONSerialization AnyObject SWIFT3 Conversion Issues 【发布时间】:2016-09-15 22:31:28 【问题描述】:

我已转换为 Swift 3,并且在将 JSONSerialization.jsonObject 分配给 AnyObject 时收到以下错误。有没有人遇到过这个问题并知道解决方法?

【问题讨论】:

发布实际代码,而不是代码图像。人们通常希望重现您的代码以尝试对其进行故障排除 【参考方案1】:

自从上一次 Swift 3 更新以来,大多数返回类型都从 AnyObject 更改为 Any 并且不允许向下转换,因此在这种情况下你不得不使用显式转换。这意味着您应该创建几个guard 语句或使用可选链接if let 定义每个必要的字段。如果可能,请考虑使用mapfilterreduce,以使您的代码更优雅。示例:

guard方式:

guard let object = try JSONSerialization.jsonObject(with: data) as? [[String: Any]] else  return nil 
guard let field1 = object[0]["field1_token"] as? [Any] else  return nil 
//do your thing

if let方式:

if let object = try JSONSerialization.jsonObject(with: data) as? [[String: Any]],
let field1 = object[0]["field1_token"] as? [Any] 
//do your thing

你可能想查看苹果的文章Working with JSON in Swift

您还可以使用一些 json 解析/映射库,例如:

SwiftyJSON

Gloss

【讨论】:

【参考方案2】:

请将let object : AnyObject 替换为let object : Any

由于投射错误而显示错误。

【讨论】:

以上是关于JSONSerialization AnyObject SWIFT3 转换问题的主要内容,如果未能解决你的问题,请参考以下文章

44-Swift 之 JSONSerialization

Swift 3 JSONSerialization 序列化字典包含 \ 字符

JSONSerialization 中的 option[]

Swift - JSONSerialization 无效的 JSON

Swift - JSONSerialization 无效的 JSON

调用 JSONSerialization.JSONObjectWithData 时调用中的额外参数 [重复]