如何从Firebase快照设置变量(swift)

时间:2016-10-23 06:30:31

标签: ios swift firebase firebase-realtime-database

我想从Firebase快照中获取数据并将其设置为我的Project中的变量。我得到了数据,但我不知道如何解析它,所以我可以设置它们。我正在尝试做一些类似于SwiftyJSON的API调用。

这是我在firebase中的数据结构:data structure

这是我的功能:function

以下是控制台中的输出:output

有没有办法从(ls)数组中解析和设置值,并将“fromId”,“text”,“toId”设置为每个节点的不同变量?

3 个答案:

答案 0 :(得分:2)

尝试使用: -

FIRDatabase.database().reference().child("users/userID/ls").observeSingleEvent(of : .value, with : {(Snap) in 

  if let snapDict = Snap.value as? [String:AnyObject]{

      for each in snapDict{

           print("\(each.value["fromId"] as! String)")

         }
   }
})

答案 1 :(得分:0)

您应该能够将FIRDataSnapshot值转换为[String:Any]字典,然后使用“fromId”,“text”和“toId”键访问这些值,并将这些值分配给变量。

答案 2 :(得分:0)

简单的方法是:SnapshotParser

只需实施您的课程:

func main(){
    let users=SnapshotParser().parseAsList(snap: Snapshot, type: User.self)
    for user in users{
        //do something with your object
    }
}

class User: ParsableSnapshot {
    var id:String?=nil
    var email:String?=nil
    var ls:[Ls]?=nil

    required init(){}

    func bindProperties(binder: SnapshotParser.Binder) {
        binder.bindField(name: "id", field: &id)
        binder.bindField(name: "email", field: &email)
        binder.bindList(name: "ls", list: &ls)
    }
}

class Ls: ParsableSnapshot {
    var id:String?=nil
    var fromId:String?=nil
    var text:String?=nil
    var told:String?=nil

    required init(){}

    func bindProperties(binder: SnapshotParser.Binder) {
        binder.bindField(name: "id", field: &id)
        binder.bindField(name: "fromId", field: &fromId)
        binder.bindField(name: "text", field: &text)
        binder.bindField(name: "told", field: &told)
    }
}