【发布时间】:2019-02-17 18:00:55
【问题描述】:
我收到以下格式的 JSON 响应:
{
"current_page":1,
"data":[
{
"id":1,
"title":"Title 1"
},
{
"id":2,
"title":"Title 2"
},
{
"id":3,
"title":"Title 3"
}
]
}
如您所见,data 包含一个对象列表,在本例中是一个 Posts 列表。这是我的 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 响应。我希望它是通用的,因为我有其他分页响应返回 Users 而不是 Posts 以及其他对象。
这是我目前的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 响应以获取 Posts 列表,然后将它们附加到 var posts = [Post]() 变量?我需要对我的Pagination 课程进行任何更改吗?
【问题讨论】:
-
我认为如果不了解 ObjectMapper(也许还有 Realm)就无法回答这个问题?
-
我不确定,我认为不知道Realm或Objectmapper的情况下应该可以回答。
-
我最近创建了一个应用程序,它使用了具有分页功能的 API。如果你知道总页数,我建议你看看“UITableViewDataSourcePrefetching”。它是专门为使用分页的tableView/collectionView设计的。这样您就不需要手动附加到您的数据数组并跟踪您现在所在的页面等等。 Ray Wenderlich 有一个很好的例子。
标签: swift realm swift4 objectmapper moya