我收到以下格式的JSON响应:
{
"current_page":1,
"data":[
{
"id":1,
"title":"Title 1"
},
{
"id":2,
"title":"Title 2"
},
{
"id":3,
"title":"Title 3"
}
]
}
如您所见,data
包含一个对象列表,在这种情况下,包含Post
个列表。这是我的Realm / Objectmapper Post
类:
import RealmSwift
import ObjectMapper
class Post: Object, Mappable {
let id = RealmOptional<Int>()
@objc dynamic var title: String? = nil
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
}
}
我创建了一个通用类(我不确定它写的正确)来处理Pagination
响应。我希望它是通用的,因为在其他对象中,我还有其他的分页响应返回User
而不是Post
。
这是我当前的Pagination
课:
import ObjectMapper
class Pagination<T: Mappable>: Mappable {
var data: [T]?
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
data <- map["data"]
}
}
但是,我不确定我是否正确地编写了该课程。
这是我调用返回分页数据的端点的类(我已经删除了不相关的代码):
var posts = [Post]()
provider.request(.getPosts(page: 1)) { result in
switch result {
case let .success(response):
do {
let json = try JSONSerialization.jsonObject(with: response.data, options: .allowFragments)
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Not sure what to do here to handle and retrieve the list of Posts
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Eventually, I need to append the posts to the variable
// self.posts.append(pagination.data)
// Reload the table view's data
self.tableView.reloadData()
} catch {
print(error)
}
case let .failure(error):
print(error)
break
}
}
如何正确处理JSON响应才能获取Post
的列表,然后将其附加到var posts = [Post]()
变量中?我需要对我的Pagination
类进行任何更改吗?
答案 0 :(得分:0)
一旦有了json,就可以使用对象映射器轻松解析它:
let pagination = Mapper<Pagination<Post>>().map(JSONObject: json)
可以进一步概括,我以直接引用为例。您的Pagination
类还可以保存当前页面索引值。
我认为您还缺少mapping(map:)
类中Post
函数的实现,应该是这样的:
func mapping(map: Map) {
title <- map["title"]
}