如果我在xcode模拟器中运行我的代码一切都很好,但是一旦我尝试在iphone上运行它,我会收到以下错误消息:
这是我的代码:
let myJsonArray = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
let myJson = myJsonArray[0] as AnyObject
let price_usd_str = myJson["price_usd"] as! String
price_usd = (NumberFormatter().number(from: price_usd_str)?.doubleValue)!
它究竟出了什么问题?就像我说单独使用xcode一样好我只想在手机上播放时出现此错误。
答案 0 :(得分:0)
您的模拟器可能使用旧的swift运行时并运行正常,可能是因为您的iPhone运行的最新iOS版本比您的模拟器。使用新的swift版本时,它无法推断出myJsonArray实际上是一个数组的类型。 以下更改应修复它:
let myJsonArray = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as [[AnyObject: AnyObject]]
即使它会修复当前错误行,它也会再次抱怨下一行,并且应该更改为以下内容:
让myJson = myJsonArray [0]为[AnyObject:AnyObject]
答案 1 :(得分:0)
首先,Swift 3中的JSON字典为[String:Any]
其次,AnyObject
非常不明确,例如它是一个对象 - 但我不知道它是什么。使用密钥或索引订阅时,编译器必须知道下标对象的特定类型。
let myJsonArray = try JSONSerialization.jsonObject(with: content, options: []) as! [[String:Any]]
let myJson = myJsonArray[0] // the compiler knows it's an array
let price_usd_str = myJson["price_usd"] as! String // the compiler knows it's a dictionary
price_usd = (NumberFormatter().number(from: price_usd_str)?.doubleValue)!
注意:.mutableContainers
在Swift中完全没用。