XCode错误消息:'下标'的模糊使用

时间:2016-12-16 14:58:09

标签: ios swift xcode

如果我在xcode模拟器中运行我的代码一切都很好,但是一旦我尝试在iphone上运行它,我会收到以下错误消息:

enter image description here

这是我的代码:

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一样好我只想在手机上播放时出现此错误。

2 个答案:

答案 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中完全没用。