如何引用自定义NSObject中的字段



由于我错过了什么,正在寻求帮助!我定义了一个名为";用户";。

class User: NSObject {
var userID: String!
var fullname: String!
var imagePath: String!
}

现在,我想一次遍历一个对象,检查一些字段的值。

func retrieveUsers() {
let ref = Database.database().reference()
ref.child("users").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapshot: DataSnapshot) in
let users = snapshot.value as! [String: AnyObject]
self.user.removeAll()

for (key,value) in users {
// HOW DO I REFERENCE A FIELD IN THE USER OBJECT
}
}

请记住,在您的代码中,users对象的类型是[String:AnyObject],因为您是从数据库(Firebase?(中获取它的。

因此,您需要处理一个非打字词典。

您可以通过执行users[key]来引用字典上的字段,其中keyString.

从变量的命名来看,看起来users是一个数组,而不是一个字典,但随后您将其转换为一个字典。在不了解数据库模式的情况下,很难说实际发生了什么。

但是,您很可能希望将[String:AnyObject]转换为实际的数据类型。有很多方法可以做到这一点,但您可能必须编写自己的解码器。

您可能需要添加有关实际使用的数据库的更多信息。

更新:包括一个将字典转换为对象的示例方法:

class User: NSObject {
var userID: String
var fullname: String
var imagePath: String
required init(withDictionary dict : [String: AnyObject]) {
userID = (dict["userID"] as? String) ?? ""
fullname = (dict["fullname"] as? String) ?? ""
imagePath = (dict["imagePath"] as? String) ?? ""
}
}

请注意,我并不是在处理失败——只是输入空字符串。

您还可以研究使模型Codable兼容的存储,并尝试转换JSON。请参阅:如何使用Swift的Codable将其编码到词典中?

最新更新