【问题标题】:Type 'Any' Has no Subscript Members in xcode 8 Swift 3 [duplicate]类型'Any'在xcode 8 Swift 3中没有下标成员[重复]
【发布时间】:2016-09-15 16:36:44
【问题描述】:

我的应用程序应该去一个特定的位置来拉下它需要加载的网站。在 2.3 中,它就像一个魅力,但由于我更新了 xcode(我没有大量经验),它给了我错误“类型'Any'没有下标成员”并突出显示“json”就在第三行之前

...Retriever = json["WEB"]...

这是相关的代码。

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)

我觉得我错过了一些小东西。如果有更好的方法来做到这一点,我会喜欢建议。该 URL 返回此 JSON

{
  "WEB" : [
           {
            "URL" : "http://www.google.com"
           }    
          ]
}

但如果我能把它简化成这样,我会很高兴的

{"URL":"http://www.google.com"}

【问题讨论】:

    标签: ios json swift swift3 xcode8


    【解决方案1】:

    试试这个:

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

    安全方式:

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

    您必须将类型 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/

    【讨论】:

    • 工作就像一个魅力,我不得不添加“!”在 as 之后,但它就像一个魅力
    • 非常感谢:*您为我节省了数小时的抓挠时间
    • 如果有人可以在这个答案变得流行时添加更多相对有价值的信息,那就太好了。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    相关资源
    最近更新 更多