Я изучаю 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. Что я должен делать? Любая помощь будет высоко оценена.