处理 JSON 分页,并将数据添加到表视图?
Posted
技术标签:
【中文标题】处理 JSON 分页,并将数据添加到表视图?【英文标题】:Handling JSON pagination, and adding data to a table view? 【发布时间】: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
包含一个对象列表,在本例中是一个 Post
s 列表。这是我的 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
s 而不是 Post
s 以及其他对象。
这是我目前的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
s 列表,然后将它们附加到 var posts = [Post]()
变量?我需要对我的Pagination
课程进行任何更改吗?
【问题讨论】:
我认为如果不了解 ObjectMapper(也许还有 Realm)就无法回答这个问题? 我不确定,我认为不知道Realm或Objectmapper的情况下应该可以回答。 我最近创建了一个应用程序,它使用了具有分页功能的 API。如果你知道总页数,我建议你看看“UITableViewDataSourcePrefetching”。它是专门为使用分页的tableView/collectionView设计的。这样您就不需要手动附加到您的数据数组并跟踪您现在所在的页面等等。 Ray Wenderlich 有一个很好的例子。 【参考方案1】:一旦你有了你的 json,就很容易使用对象映射器来解析它:
let pagination = Mapper<Pagination<Post>>().map(JSONObject: json)
可以进一步概括,我以直接引用为例。您的Pagination
类也可以保存当前页面索引值。
我认为您还缺少 mapping(map:)
类中 Post
函数的实现,它应该是这样的:
func mapping(map: Map)
title <- map["title"]
【讨论】:
以上是关于处理 JSON 分页,并将数据添加到表视图?的主要内容,如果未能解决你的问题,请参考以下文章