swift - 将 FIRDataSnapshot 转换为自定义类型

标签 swift firebase closures firebase-realtime-database

我正在尝试将 FIRDataSnapshot 转换为自定义类型(即我知道每个 child 将有姓名、电话号码和电子邮件)

当我运行下面的代码时,控制台将打印一个 JSON 树,其中每个子项都包含名称、号码和电子邮件。

所以我想将快照存储为具有每个属性的自定义类型“PersonInfo”。这样我就可以在我的应用程序中更改这些数据。我需要在我的应用程序的各个部分使用我将此数据存储到的“PersonInfo”变量。

    ref.observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in

        print(snapshot)

    })

最佳答案

您可以定义一个自定义类 PersonInfo 作为模型。

class PersonInfo: NSObject {
    var pName: String
    var pNumber :String
    var pEmail: String
    let ref: FIRDatabaseReference?

    init( name: String, number: String, email: String) {
        self.pName = name
        self.pNumber = number
        self.pEmail = email
        self.ref = nil
    }

    init(snapshot: FIRDataSnapshot) {
        pName = snapshot.value!["pName"] as! String
        pNumber = snapshot.value!["pNumber"] as! String
        pEmail = snapshot.value!["pEmail"] as! String
        ref = snapshot.ref
    }

    convenience override init() {
        self.init(name:"",number: "", email: "")
    }
}

在你的 observeSingleEventOfType 中,当你有 snapshot 时,你可以遍历它的 child 并获取每个人作为:

for item in snapshot.children{
  var person = PersonInfo(snapshot:item);
  yourList.append(person);
}

因此,您将拥有一个稍后可以访问的 PersonInfo 模型对象列表。

关于swift - 将 FIRDataSnapshot 转换为自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38359410/

相关文章:

swift - 如何等待多个 future 在 Vapor Swift 中完成?

xcode - 我将如何以编程方式快速引用我的应用程序中的主 Storyboard?

firebase - Angular 5 + Firebase : Namespace 'firebase.auth' has no exported member 'IdTokenResult'

javascript - 将默认图像上传到 Firebase Storage

closures - jQuery 的 noConflict : Just a quick thought

ios - 在 Swift 中逐行淡入 UITableViewCell

Swift Firebase 在闭包内发送数据

PHP:如何将实例变量传递给闭包?

javascript - 如何在 JavaScript 中评估变量以访问其运行时值?

ios - 了解 Swift 中的 `var status = (string: statusVal as NSString)` 变量声明