Swift / Firestore: доступ к пользовательской модели в приложении - PullRequest
0 голосов
/ 17 февраля 2019

Во время изучения Flutter я наткнулся на InheriredModel/Widget, и я смог использовать его для хранения пользовательского документа в качестве модели и доступа к нему в любом месте приложения без необходимости вызывать Firestore (чтобы избежать увеличения чтения).Я пытался найти что-то подобное в Swift, но не смог.

Есть ли способ сделать это, чтобы прочитать документ текущего пользователя, преобразовать его в модель и сохранить его, чтобы я мог получить к нему доступ в любом контроллере представления.

Вот так я получаю текущего пользователя и получаю его как модель.

Вызов

func currentUser(onSuccess: @escaping (User_) -> Void, onFailure: @escaping (String) -> Void) {
    Services.crud.read(ref: self.currentUserRef, onSuccess: { (snapshot) in
        if let dict = snapshot.data() {
            onSuccess(User_.transform(id: snapshot.documentID, dict: dict))
        }
    }) { (e) in
        onFailure(e)
    }
}

Модель

User_ { 
    var userID: String?
    var aviURL: String?
    var name: String?
    var phone: String?
    var email: String?
    var location: Location_?
    var createdAt, updatedAt: Timestamp?

    var asDictionary: [String: Any] {
        return Dictionary(uniqueKeysWithValues: Mirror(reflecting: self).children.lazy.map({ (label: String?, value: Any) -> (String, Any)? in
            guard label != nil else { return nil }
            return (label!, value)
        }).compactMap{ $0 })
    }
}

Я пытался использовать UserDefaults, ноЯ не могу сохранить модель User_.Я попытался преобразовать его обратно в словарь и сохранить его, но он все равно не работает.

APIs.users.currentUser(onSuccess: { (user) in 
        UserDefaults.standard.setValue(user, forKey: Config.UserDefaults.cUser) // Don't Work
        UserDefaults.standard.setValue(user.asDictionary, forKey: Config.UserDefaults.cUser) // Don't Work
        UserDefaults.standard.synchronize()
    }, onFailure: { (error) in
        print(error)
})
...