在xcode 8 Swift 3中输入'Any'没有下标成员

DaV*_*223 39 json ios swift swift3 xcode8

我的应用程序应该去特定的位置来下载它需要加载的网站.在2.3它的工作就像一个魅力,但因为我已经更新了xcode(我没有很多经验)它给我错误"类型'任何'没有下标成员"并突出显示"json"就在第三行之前

...Retriever = json["WEB"]...
Run Code Online (Sandbox Code Playgroud)

这是与之相关的代码.

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments)

      if let Retriever = json["WEB"] as? [[String: AnyObject]] {

                 for website in Retriever {

                    if let name = website["URL"] as? String {

                          self.loadAddressURL(name)
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些小事.如果有更好的方法,我会喜欢建议.URL返回此JSON

{
  "WEB" : [
           {
            "URL" : "http://www.google.com"
           }    
          ]
}
Run Code Online (Sandbox Code Playgroud)

但如果我能简化它,我会喜欢它

{"URL":"http://www.google.com"}
Run Code Online (Sandbox Code Playgroud)

Bis*_*sta 64

试试这个:

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]
Run Code Online (Sandbox Code Playgroud)

安全方式:

do {
    if let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as? [String:Any] {
        print(json)
    }
} catch let err{
    print(err.localizedDescription)
}
Run Code Online (Sandbox Code Playgroud)

你必须将类型转换Any为Swift字典类型[String:AnyObject].

编辑:Swift 3
在swift 3中,目的AnyObject更明确.所以更有利的是Swift Dictionary类型[String:Any].

Any是任何数据类型的别名.
AnyObject是从类派生的任何数据类型的别名.

欲了解更多信息,请访问:https://craiggrummitt.com/2016/09/16/any-vs-anyobject-vs-nsobject-in-swift-3/

  • 如果有人可以在这个答案中添加更多相对有价值的信息,那就更好了.:) (2认同)