Осмысление Realm, Moya и ObjectMapper
Поэтому я пытаюсь понять, как использовать Realm, Moya и ObjectMapper.
Я использую Мойю, чтобы делать запросы к моему 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:)' не соответствуют ни одной доступной перегрузке
На линии:
let myResponse = MyResponse(JSON: json)
1 ответ
Вы получаете эту ошибку, потому что вы декодируете, используя 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
}