尝试修复 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]
并使用原生 URL
和 URLRequest
【参考方案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 项目中调用“getControlPointAtIndex”
Laravel & Cpanel:如何修复 Swift_TransportException(邮件服务器)?