尝试修复 Swift 3 错误;无法使用“String”类型的索引为“[[String:AnyObject]]”类型的值下标[关闭]

Posted

技术标签:

【中文标题】尝试修复 Swift 3 错误;无法使用“String”类型的索引为“[[String:AnyObject]]”类型的值下标[关闭]【英文标题】:Trying to fix a Swift 3 error; Cannot subscript a value of type '[[String : AnyObject]]' with an index of type 'String' [closed] 【发布时间】:2016-11-28 07:39:20 【问题描述】:

**在你变得居高临下并否决我的问题之前听我说完**

    是的,我用谷歌搜索了这个问题,并得到了许多直接指向 *** 的结果 是的,我已经尝试了许多我所指出的解决方案,但它们最终得到以下三种结果之一: 3;答案是针对 Swift 3,但在 cmets 中,它的内容类似于“不要这样做!以后会给你带来更多麻烦”或“这对我根本不起作用”;或者有一个看似有用的长段侮辱提问者,然后实际上并没有回答问题 是的,我知道这被认为是一个重复的问题,但是如果您再次查看过去的答案,您会发现绝对没有什么是清楚的。只是用户在喊他们是对的,而提问者是错的。

这就是我现在问这个问题的原因。为了希望参与到这个话题上,用明确的说明来回答它,然后让它休息,直到 Swift 4 出来并打破它。


我正在构建一个显示交易列表的 ios 应用。这些交易以 JSON 块格式存在于服务器上,格式为 like this。从示例和教程中,我发现我整理的代码如下所示:

override func viewDidLoad() 
    super.viewDidLoad()
    let requestURL: NSURL = NSURL(string: "SOME URL")!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
    let session = URLSession.shared
    let task = session.dataTask(with: urlRequest as URLRequest) 
        (data, response, error) -> Void in

        let httpResponse = response as! HTTPURLResponse
        let statusCode = httpResponse.statusCode

        if (statusCode == 200) 
            print("Everyone is fine, file downloaded successfully.")

            do

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

                if let deals = json["deals"] as? [[String: AnyObject]] 

                    for deal in deals 

                        if let title = deals["title"] as? String 

                            if let description = deals["description"] as? String 
                                print(title,description)
                                TableData.append(title)
                            

                        
                    

                

            catch 
                print("Error with Json: \(error)")
            

        
    

    task.resume()

我得到的错误是:无法使用“String”类型的索引为“[[String : AnyObject]]”类型的值下标。发生在:if let title = deals["title"] as? String if let description = deals["description"] as? String

我不知道如何解决这个问题。我原来的错误是不同的,为了解决这个问题,我在第 14 行添加了as! [String:AnyObject],正如另一篇 SO 帖子所建议的那样。这导致了我现在遇到的错误。我该如何解决这个错误?

【问题讨论】:

错字:deal["title"]deal["description"](单数)。顺便说一句,在 Swift 3 中,JSON 字典是 [String:Any] 并使用原生 URLURLRequest 【参考方案1】:

您应该访问deal,而不是访问deals

if let title = deals["title"] as? String

应该是

if let title = deal["title"] as? String 

描述相同。这是因为deals 是一个数组,而不是字典。 deal 是字典

【讨论】:

以上是关于尝试修复 Swift 3 错误;无法使用“String”类型的索引为“[[String:AnyObject]]”类型的值下标[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Swift Playground 中的“无法查找符号”错误

Swift 错误 - “发送到实例的无法识别的选择器”

无法在 Swift 项目中调用“getControlPointAtIndex”

Laravel & Cpanel:如何修复 Swift_TransportException(邮件服务器)?

使用 Codable 解析 JSON 响应会在 swift 中出现错误

迁移到 Swift 3 时可以使用旧框架吗?