将FIRDataSnapshot转换为自定义类型

T M*_*T M 2 closures firebase swift firebase-realtime-database

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

当我运行下面的代码时,一个JSON树与每个包含名称,数字和电子邮件的子项打印到控制台.

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

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

        print(snapshot)

    })
Run Code Online (Sandbox Code Playgroud)

tri*_*Ant 10

您可以定义将充当模型的自定义类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: "")
    }
}
Run Code Online (Sandbox Code Playgroud)

和你的里面observeSingleEventOfType,当你有snapshot,你可以遍历其子和提取每个人如下:

for item in snapshot.children{
  var person = PersonInfo(snapshot:item);
  yourList.append(person);
}
Run Code Online (Sandbox Code Playgroud)

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

  • 优秀的答案 - 我们绝对应该在我们的文档中涵盖这一点! (2认同)