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