Swift / Firestore:在整个应用中访问用户模型

时间:2019-02-17 19:37:43

标签: ios swift google-cloud-firestore userdefaults

在学习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)
})

0 个答案:

没有答案