Я играю вокруг/участвую в Swift и JSON atm, и у меня проблемы с правильным ответом.swift: листинг входящего массива json для словаря и объекта
Итак, что я пытаюсь достичь, отображается список «сообщений» по запросу Alamofire. У меня нет проблем с отображением «первого уровня» json-элементов, таких как post-ID или «сообщение», но когда дело доходит до массива автора, я немного потерян.
ответ JSON поставляется в виде массива без имени, следовательно, первый [
[
-{
__v: 1,
_id: "54428691a728c80424166ffb",
createDate: "2014-10-18T17:26:15.317Z",
message: "shshshshshshshhshshs",
-author: [
-{
_id: "54428691a728c80424166ffa",
userId: "543270679de5893d1acea11e",
userName: "foo"
}
]
}
Вот мой соответствующий VC:
Alamofire.request(.GET, "\(CurrentConfiguration.serverURL)/api/posts/\(CurrentConfiguration.currentUser.id)/newsfeed/\(CurrentConfiguration.currentMode)",encoding:.JSON)
.validate()
.responseJSON {(request, response, jsonData, error) in
let JSON = jsonData as? NSArray
self.loadPosts(JSON!)
}
tableView.delegate = self
tableView.dataSource = self
}
func loadPosts(posts:NSArray) {
for post in posts {
let id = post["_id"]! as NSString!
let message = post["message"]! as NSString!
var authorArray = post["author"]! as? [Author]!
println(authorArray)
var author:Author = Author()
author.userName = "TEST ME"
var postObj:Post = Post()
postObj.id = id
postObj.message = message
postObj.author = author
uppDatesCollection.append(postObj)
}
println(self.uppDatesCollection.count)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
мои модели почт
class Post {
var id:String!
var message:String!
var createDate: NSDate!
var author:Array<Author>!
init() {
}
}
и Author
class Author {
var id:String?
var userId:String?
var userName:String?
init() {
}
Какой лучший подход здесь? Если вы переделаете возвращающийся массив как словарь, а затем получите его через .valueforkey? Вы как-то перебираете массив, чтобы получить этот материал?
Очевидно, что вы не можете сказать, author.name = authorArray [3] в качестве строки
Большое спасибо за ваш ответ! Есть ли более общий способ сделать это, будь то на борту или на базе библиотеки? Выполняя это с помощью итерации над массивом (который я с радостью реализовал), теоретически я мог бы в итоге получить 8x, вложенных в функции, которые кажутся мне довольно уродливыми. – longbow
В этом ключе есть вещи, которые вы можете сделать, но это трудно сказать, не видя примера, демонстрирующего полное богатство этого JSON. Вероятно, вы хотите сделать баланс между полностью управляемым данными и чем-то более практичным. Возможно, дайте ему понять, и дайте нам знать, как вы идете. Если после добросовестных усилий с вашей стороны у вас все еще есть вопросы, задайте новый вопрос здесь, на s.o. – Rob