Firebase를 사용한 데이터 획득

12336 단어 SwiftiOS
지금은 Firebase를 개발하여 사용하지만 데이터의 구조를 도저히 할 수 없고 디테일이 많아서 필기를 합니다.
예를 들어 다음과 같은 데이터의 구조를 가정한다.

이 경우 Group 아래에 있는 체크 아웃은 간단합니다.
sample.swift
//この「ref」でこのツリー全体のrootを示す。
ref = Database.database().reference()
//refの下に「child()」で場所を示す。今回の場合は「Group」
ref.child("Gruop").observe(.value, with: { (snapshot) in
            中略・・・

내가 이번에 얻은 것은 그룹 아래의 나무 밑에 매달려 있는 상황이다.
sample.swift
ref = Database.database().reference()
//refの下に「child()」で場所を示す。今回の場合は「Group」
ref.child("Gruop").observe(.value, with: { (snapshot) in

            for itemSnapShot in snapshot.children {
                //ここで取得したデータを自分で定義したデータ型に入れて、加工する
                let item = GroupData(snapshot: itemSnapShot as! DataSnapshot)
                                 ・・・中略

                }
            }
그리고 자신이 정의한 데이터 형식은 이것입니다.
let dict에 Firebase로 얻은 데이터를 넣고 원하는 항목에 따라 데이터를 가공합니다.
GroupData.swift
class GroupData {

    var ref: DatabaseReference?
    var groupid: String?
    var name: String?
    var founder: String?
    var memberofnumber: Int?
    var payment: Int?
    var period: String?
    var message: String?
    var publicnum: Int?
    var groupprofile: String?
    var users : Array? = []

    init? (snapshot: DataSnapshot) {
        ref = snapshot.ref
        guard let dict = snapshot.value as? [String:Any] else { return nil }
        guard let groupid  = ref?.key  else { return nil }
        guard let name  = dict["name"] as? String  else { return nil }
        guard let founder = dict["founder"]  as? String else { return nil }
        guard let memberofnumber = dict["memberofnumber"]  as? Int else { return nil }
        guard let payment = dict["payment"]  as? Int else { return nil }
        guard let period = dict["period"]  as? String else { return nil }
        guard let message = dict["message"] as? String else { return nil }
        guard let publicnum = dict["publicnum"] as? Int else { return nil }
        guard let groupprofile = dict["groupprofile"] as? String else { return nil }
         guard let users = dict["users"] as? [String:AnyObject] else { return nil }
        var newusers : Array? = []

        for i in users.keys {
            newusers?.append(i)
        }

        self.name = name
        self.groupid = groupid
        self.founder = founder
        self.memberofnumber = memberofnumber
        self.payment = payment
        self.period = period
        self.message = message
        self.publicnum = publicnum
        self.groupprofile = groupprofile
        self.users = newusers


    }

}

"users(나무에 걸린 블록)"를 배열로 얻고 싶어서 배열로 얻으면 순조롭게 진행되지 않습니다
[string:AnyObject]에서 데이터의 유형을 발표함으로써 키스를 통해 하나의 키를 얻을 수 있고 나머지는 배열에 넣으면 끝납니다.
말로 설명하려면 잘 전달이 안 돼...

좋은 웹페이지 즐겨찾기