Царство с Аламофиром и Свифтом - PullRequest
0 голосов
/ 15 января 2020

Я делаю свою первую попытку использовать 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 = ""
...