以下是我的代码的屏幕截图,我希望它比粘贴它更好,这样你就可以确切地看到xcode告诉我什么以及在哪一行。我尝试在它上面的不同位置打开(!),但我似乎无法弄清楚我没有正确展开的东西。我还在学习swift2,所以如果我在这里错过了一些简单的话,我会提前抱歉...
编辑:"如果让"不会改变为我产生的错误。另外,我是以粘贴的形式附加我的代码。
let apiCode = "10861780"
let myKey = "AIzaSyDkUBkhc-oSlhnW-4q3BTJ2neEpqPUsOZ8"
let url = NSURL(string: "https://www.googleapis.com/blogger/v3/blogs/\(apiCode)/posts?key=\(myKey)")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in
if let urlContent = data {
do {
let jsonResult = try NSJSONSerialization.JSONObjectWithData(urlContent, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
if let item = jsonResult["items"][0] as? NSDictionary {
print(item)
}
} catch {
print("JSON ERROR")
}
}
}
task.resume()
答案 0 :(得分:2)
jsonResults["items"]
可能存在也可能不存在,因此其类型为可选 AnyObject?
。
要进一步索引,您可以使用可选链接,例如
if let item = jsonResults["items"]?[0] as? NSDictionary ...
有关详细信息,请参阅我的回答here。
答案 1 :(得分:2)
如果您使用Swift 2.0和Xcode 7,我们可以使用 guard 请查看以下代码:
guard let item = jsonResults["items"]?[0] as? NSDictionary ...
else { return }
答案 2 :(得分:1)
看起来你试图下标 jsonResult [" items"] ,但它是 AnyObject?。您不能下标,因为它不是集合,列表或序列。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Subscripts.html
你可以下标一个数组......
如果你希望 jsonResult [" items"] 是一个字典数组...
jsonResult["items"] as? [NSDictionary]
或
jsonResult["items"] as? [[String: AnyObject]]
实施例
if let items = jsonResult["items"] as? [NSDictionary?], item = items[0] {
print(item)
}
if let items = jsonResult["items"] as? [[String: AnyObject]?], item = items[0] {
print(item)
}
guard let item = jsonResult["items"] as? [[String: AnyObject]?], item = items[0] {
return
}
print(item)