NSDictionary,(键:AnyObject,值:AnyObject)没有成员名称下标

时间:2015-04-21 19:05:19

标签: ios swift nsdictionary swifty-json

我正在快速学习IOS,当我在youtube(Swift:使用Skip Wilson的外部数据库和API)上进行外部数据库巡视时,我找到了部分:

service = PostService()
    service.getPosts {
        (response) in
        self.loadPosts(response["posts"]! as NSDictionary)
    }

func loadPosts(posts:NSDictionary) {
        for post in posts {
            var id = (post["Post"]["id"] as String)
            var title = post["Post"]!["title"]! as String
            var author = post["Post"]!["author"]! as String
            var content = post["Post"]!["content"]! as String
            var postObj = Post(id: id, title: title, author: author, content: content)
           postsCollection.append(postObj)
        }
        dispatch_async(dispatch_get_main_queue()) {
            self.tableView.reloadData()
        }
    }

最初这里的NSDictionary是NSArray,但它不起作用,因为NSArray现在只接受int for key,而PostService.getPost()返回类型NSDictionary。所以我把它改成了NSDictionary。

但是,所有var id,title,author,content都出现了错误

(key:AnyObject, value:AnyObject) does not have a member name subscript

似乎我需要声明键和值为<字符串,字符串> ,但我现在不确定这样做。 Blow是Postservice的代码:

class PostService {

    var settings:Settings!

    init(){
        self.settings = Settings()
    }

    func getPosts(callback:(NSDictionary)->()) {
        println("get posts")
        request(settings.viewPosts,callback)
    }

    func request(url:String,callback:(NSDictionary)->()) {
        var nsURL = NSURL(string: url)
        println(callback)
        let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!) {
            (data,response,error) in
            var error:NSError?
            var response = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
                      callback(response)
        }
        task.resume()
    }
}

我知道这可能是一个非常简单和愚蠢的问题,但我仍然无法在搜索谷歌后弄明白。我该怎么办?任何帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

这里的罪魁祸首是基金会的NSDictionary,它根本没有下标成员。您可以尝试的是Swift的Dictionary。如果您非常喜欢使用NSDictionary,那么您可以使用其objectForKey: API来获取其价值。

答案 1 :(得分:0)

在第34行的帖子中,post变量是一个元组:( key:AnyObject,value:AnyObject)。我建议尝试:

for (key, value) in posts {
    println(key)
    println(value)
}

...检查进来的数据,看看它是否符合预期。