Обработка нумерации страниц JSON и добавление данных в табличное представление? - PullRequest
0 голосов
/ 17 февраля 2019

Я получаю 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 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 с и затем добавить их в переменную var posts = [Post]()?Нужно ли вносить какие-либо изменения в мой Pagination класс?

1 Ответ

0 голосов
/ 17 февраля 2019

Если у вас есть json, его легко разобрать, используя объектный сопоставитель:

let pagination = Mapper<Pagination<Post>>().map(JSONObject: json)

Это может быть обобщено, я использовал прямую ссылку в качестве примера.Ваш класс Pagination также может содержать текущее значение индекса страницы.

Я думаю, вам также не хватает реализации функции mapping(map:) в вашем классе Post, должно быть что-то вроде этого:

func mapping(map: Map) {
    title <- map["title"]
}
...