2016-11-28 47 views
0

**聽我說你變得居高臨下之前和向下投我的問題給遺忘**試圖修復Swift 3錯誤;無法下標類型的值「[[字符串:AnyObject]」與類型的索引「字符串」

  1. 是,我GOOGLE了這個問題,並得到了許多直接指向StackOverflow的結果
  2. 是的,我嘗試了許多我曾經指出的解決方案,但他們最終得到了三個結果之一:有一個高的響應(相對)答案,這是行不通的,因爲它適用於Swift 2而不是3;答案是針對Swift 3,但在評論中有一些「不要這樣做!它會在以後給你帶來更多的麻煩」或者「對我來說根本不起作用」。或者有一個長期看似有用的段落,侮辱提問者,然後實際上並沒有回答問題
  3. 是的,我知道這被認爲是一個重複的問題,但如果你通過回顧過去,你會看到什麼都沒有明確。只是用戶喊他們是對的,提問者是錯的。

這就是我現在問這個問題的原因。希望能夠對這個話題有所接觸,在清楚的指示下回答它,然後讓它休息,直到Swift 4出來並打破它。


我正在構建一個顯示交易列表的iOS應用程序。這些交易以格式爲like this的JSON數據塊存在於服務器上。從示例和教程,我發現我已經把代碼如下所示:

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() 
} 

我得到的錯誤是:與索引:無法下標類型「[AnyObject] [字符串]」的值'String'類型。發生在:if let title = deals["title"] as? String {if let description = deals["description"] as? String {

我不知道該如何解決這個問題。我遇到的一個原始錯誤是不同的,爲了解決這個問題,我在第14行添加了as! [String:AnyObject],正如另一個SO帖子所建議的那樣。這導致我現在有錯誤。我能做些什麼來解決這個錯誤?

+3

錯字:'deal [「title」]'和'deal [「description」]'(單數)。順便說一下,在Swift 3中,JSON字典是'[String:Any]',並使用原生的'URL'和'URLRequest' – vadian

回答

2

不是訪問deals的,你應該訪問deal

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

應該

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

同樣的說明。這是因爲deals是一個數組,而不是字典。 deal是字典

相關問題