swift2可能解缠问题?

时间:2015-08-23 20:11:40

标签: ios xcode swift

以下是我的代码的屏幕截图,我希望它比粘贴它更好,这样你就可以确切地看到xcode告诉我什么以及在哪一行。我尝试在它上面的不同位置打开(!),但我似乎无法弄清楚我没有正确展开的东西。我还在学习swift2,所以如果我在这里错过了一些简单的话,我会提前抱歉...

编辑:"如果让"不会改变为我产生的错误。另外,我是以粘贴的形式附加我的代码。

screenshot of my code

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

3 个答案:

答案 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)