Осмысление Realm, Moya и ObjectMapper - PullRequest
0 голосов
/ 23 декабря 2018

Итак, я пытаюсь понять, как использовать Realm, Moya и ObjectMapper.

Я использую Moya для отправки запросов к моему API.Я использую Realm, чтобы хранить возвращенные данные в локальной базе данных.И я использую ObjectMapper для сопоставления объектов JSON с целью исправления переменной Realm.

Однако сейчас я столкнулся с проблемой, когда я не уверен, как декодировать ответ JSON, чтобы пропустить его через маппер..

Вот мой код Мойя:

provider.request(.signIn(email: email, password: password)) { result in
    switch result {
    case let .success(response):
        do {
            // Get the response data
            let data = try JSONDecoder().decode(MyResponse.self, from: response.data)

            // Get the response status code
            let statusCode = response.statusCode

            // Check the status code
            if (statusCode == 200) {
                // Do stuff
            }
        } catch {
            print(error)
        }
    case let .failure(error):
        print(error)
        break
    }
}

Ошибка в этой строке:

In argument type 'MyResponse.Type', 'MyResponse' does not conform to expected type 'Decodable'

Класс MyResponse выглядит следующим образом:

class MyResponse: Object, Mappable {
    @objc dynamic var success = false
    @objc dynamic var data: MyResponseData? = nil

    required convenience init?(map: Map) {
        self.init()
    }

    func mapping(map: Map) {

    }
}

Я понимаю почему Я получаю эту ошибку, я просто не знаю, как правильно ее решить.Я что-то упустил в документации одной из вышеперечисленных платформ?Я делаю это совершенно неправильно?Как мне исправить мою строку кода?


Я пробовал решение @ Kamran, но получил ошибку:

Метки аргументов '(JSON :)' doне соответствуют никаким доступным перегрузкам

На линии:

let myResponse = MyResponse(JSON: json)

1 Ответ

0 голосов
/ 14 января 2019

Вы получаете эту ошибку, потому что вы декодируете, используя Swift JSONDecoder, который требует от вас реализации Codable, который включает Encodable и Decodable (JSON <-> YourObject).

Если вы используете Swift 4, вы можете использовать Codable вместо использования сторонних библиотек.

MyResponse станет:

class MyResponse: Codable {
    let success: Bool
    let data: MyResponseData? 
}

И MyResponseData должен также реализовать Codable.

После этого вы сможете выполнить:

do {
    let data = try JSONDecoder().decode(MyResponse.self, from: response.data)
} catch let error { 
    // handle error
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...