**聽我說你變得居高臨下之前和向下投我的問題給遺忘**試圖修復Swift 3錯誤;無法下標類型的值「[[字符串:AnyObject]」與類型的索引「字符串」
- 是,我GOOGLE了這個問題,並得到了許多直接指向StackOverflow的結果
- 是的,我嘗試了許多我曾經指出的解決方案,但他們最終得到了三個結果之一:有一個高的響應(相對)答案,這是行不通的,因爲它適用於Swift 2而不是3;答案是針對Swift 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帖子所建議的那樣。這導致我現在有錯誤。我能做些什麼來解決這個錯誤?
錯字:'deal [「title」]'和'deal [「description」]'(單數)。順便說一下,在Swift 3中,JSON字典是'[String:Any]',並使用原生的'URL'和'URLRequest' – vadian