2

外部データベースのYouTube(Swift:Skip Wilsonによる外部データベースとAPIの使用)でツアーを行っているときに、IOSの迅速な学習を行っているときに、次の部分を見つけました:

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で検索してもまだわかりません。私は何をすべきか?どんな援助でも大歓迎です。

4

2 に答える 2