Обработка нумерации страниц JSON и добавление данных в табличное представление?
Я получаю ответ JSON в формате:
{
"current_page":1,
"data":[
{
"id":1,
"title":"Title 1"
},
{
"id":2,
"title":"Title 2"
},
{
"id":3,
"title":"Title 3"
}
]
}
Как вы видете, data
содержит список объектов, в данном случае список Post
s. Вот мое Царство /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
учебный класс?
1 ответ
Если у вас есть JSON, его легко проанализировать с помощью объектного преобразователя:
let pagination = Mapper<Pagination<Post>>().map(JSONObject: json)
Это может быть обобщено, я использовал прямую ссылку в качестве примера. Ваш Pagination
Класс также может содержать текущее значение индекса страницы.
Я думаю, что вам также не хватает реализации mapping(map:)
функция в вашем Post
класс, это должно быть примерно так:
func mapping(map: Map) {
title <- map["title"]
}