我正在玩弄/学习 Swift 和 JSON atm,并且在正确转换我的响应时遇到问题。
所以,我想要实现的是通过 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 () {
}
}
和作者
class Author {
var id:String?
var userId:String?
var userName:String?
init () {
}
这里最好的方法是什么?您是否应该将返回的数组重新转换为字典,然后通过 .valueforkey 访问它?您是否以某种方式遍历数组以取出这些东西?
显然你不能说 author.name = authorArray[3] as String