NSDictionary, (ключ: AnyObject, значение: AnyObject) не имеет нижнего индекса имени члена

Я изучаю Swift для IOS, пока я проводил тур по YouTube (Swift: использование внешних баз данных и API от Skip Wilson) для внешней базы данных, я нашел часть:

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 для ключа, а PostService.getPost() возвращает тип NSDictionary. Поэтому я изменил его на NSDictionary.

Тем не менее, все var id, title, author, content появляются с ошибкой.

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

кажется, что мне нужно объявить ключ и значение как ‹ String , String> , но сейчас я не уверен, что нужно это делать. 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()
    }
}

Я знаю, что это может быть очень простой и глупый вопрос, но я все еще не могу понять его после поиска в Google. Что я должен делать? Любая помощь будет высоко оценена.


person na83    schedule 21.04.2015    source источник


Ответы (2)


Виновником здесь является NSDictionary Фонда, у которого просто нет члена индекса. Вместо этого вы могли бы попробовать Swift Dictionary, который делает. Если вы одержимы использованием NSDictionary, вы можете использовать его objectForKey: API, чтобы получить его значение.

person avismara    schedule 21.04.2015

В строке «для сообщения в сообщениях» переменная сообщения представляет собой кортеж: (ключ: AnyObject, значение: AnyObject). Я бы предложил попробовать:

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

... для проверки поступающих данных, чтобы убедиться, что они соответствуют вашим ожиданиям.

person mattdaw    schedule 21.04.2015