Я делаю свою первую попытку использовать Realm в Swift. У меня настроена модель, и я успешно получил ответ, используя Alamofire, и сопоставляю его с объектом. Затем я пытаюсь сохранить данные в области. Он создает объект, но значения являются значениями по умолчанию, а не значениями, полученными от серверной части. Что мне не хватает? Вот модель:
import Foundation
import ObjectMapper
import RealmSwift
@objcMembers class LoginResponseModel: Object, Mappable {
dynamic var status = ""
dynamic var id = UUID().uuidString
dynamic var userId = 0
dynamic var authToken = ""
required convenience init?(map: Map) {
self.init()
}
convenience init(status: String, userId: Int, authToken: String) {
self.init()
self.status = status
self.userId = userId
self.authToken = authToken
}
override static func primaryKey() -> String? {
return "id"
}
func mapping(map: Map) {
status <- map["status"]
userId <- map["user_id"]
authToken <- map["auth_token"]
}
}
Вот где я пытаюсь ее сохранить:
APIHelper.shared.login(username: username!, password: password!, success: { (result) in
if let login = result {
if (login.status != "failed") {
let userId = login.userId
let authToken = login.authToken
UserDefaults.standard.setValue(String(userId), forKey: "USERID")
UserDefaults.standard.setValue(authToken, forKey: "AUTHTOKEN")
UserDefaults.standard.synchronize()
vc.modalPresentationStyle = .fullScreen
do {
let realm = try! Realm()
try realm.write {
realm.add(login)
}
} catch(let error) {
print(error)
}
InstanceID.instanceID().instanceID { (result, error) in
if let error = error {
print(error)
} else if let result = result {
self.sendToken(userId: String(userId), authToken: authToken, fcmToken: result.token)
}
}
self.present(vc, animated: true, completion: nil)
}
}
Есть идеи?
Вызов API:
public func login(username: String, password: String, success: @escaping(_ response: LoginResponseModel?) -> Void, failure: @escaping(_ error: Error?) -> Void) {
let url = "\(baseUrl)appLogin"
AF.request(url, method: .post, parameters: ["emailOrPhone": username, "password": password]).responseString { response in
print(type(of: response).self)
switch response.result {
case .success(let json):
let resp = LoginResponseModel(JSONString: json)
success(resp)
case .failure(let error):
failure(error)
}
}
}
Я получаю объект здесь:
let login = realm.objects(LoginResponseModel.self).first
Значение объекта:
status = ""
id = "1820A5D4-A714-4774-9707-4709ED39B570"
userId = 0
authToken = ""