2017-02-15 4 views
2

私はFirebaseを初めて使用しています。Firebase構造が作成されました。基本的には、すべてのユーザーをFirebaseDBとしてリストします。SwiftでのFirebase DataStructureのクラスの作成

以下のfirebaseデータ構造に迅速に対応するクラスを作成したいと考えています。

"users" : { 
    "A654tdC5uBPoKQzJnpZIpwOfsaJ3" : { 
     "groups" : { 
     "-KZ7fl3I4W7YWuGk6l9k" : true, 
     "-KclzmvvJF54cAg14P92" : true, 
     "-KclzpzrJOhCOWL5_jvw" : true, 
     "-Kcm33N1B_oiVYrQWh3n" : true, 
     "-Kcm3GfRaaGfztEBmflp" : true 
     }, 
     "location" : { 
     "coordinates" : [ 6.59086, 3.3914267 ], 
     "name" : "Oyebanjo Solarin Street, Lagos", 
     "visibility" : true 
     }, 
     "photoUrl" : "http://pbs.twimg.com/profile_images/511567946351923201/YBqqKc78_normal.jpeg", 
     "username" : "Kamiye", 
     "visibilityToSelectContacts" : { 
     "contacts" : { 
      "gFTCpzgSJDOsrVKWbAJp0Z1JFXp1" : true, 
      "rRxT6x87kgSjTwZfa7M8ZwzdFkC3" : true 
     }, 
     "visibility" : true 
     } 
    }, 

これは私がしようとしたそのthisのようにアンボクシングのための3Dパーティのライブラリを使用する

class LContact { 

var visibliityToSelectedContacts: VisibilityToSelectContacts? 
var photoUrl: String? 
let username: String 
var location: LALocation? 
var groudId = [String]() 


init (value: [String: Any]) { 
    self.username = value["username"] as! String 
    self.photoUrl = value["photoUrl"] as? String 
    self.location = LALocation(value: value["coordinates"] as? [String:Any] ?? [:]) 
    self.groudId = (value["groups"] as? [String])! 
    } 
} 

class VisibilityToSelectContacts { 

var contacts = [String]() 
var visibility: Bool 

init(value: [String: Any]) { 
    self.contacts = [value["contacts"] as! String] 
    self.visibility = value["visibility"] as! Bool 
    } 
} 

struct LALocation { 

var long: Double 
var lat: Double 
var address: String! 
var visibility: Bool! 

init(long: Double, lat: Double, address: String?, visibility: Bool) { 
    self.long = long 
    self.lat = lat 
    self.address = address 
    self.visibility = visibility 
} 

init?(value: [String: Any]) { 
    guard let long = value["0"] as? Double, 
     let lat = value["1"] as? Double else {return nil} 
    self.long = long 
    self.lat = lat 
    self.address = value["name"] as? String 
    self.visibility = value["visibility"] as? Bool 
    } 
} 
+0

あなたの質問を明確にすることはできますか?登録されたユーザーを検索するために、データベース構造のクラスモデルを作成する必要がありますか?どこで配列を検索しますか?コード? Firebaseで? *それはどういう意味ですか?エラーが発生していますか?提示されたコードはあまり複雑すぎるように見えるので、簡略化することができます。また、* A654tdC5uBPoKQzJnpZIpwOfsaJ3 *は何を表していますか? – Jay

+0

@Jay私はすでにfirebase構造のスニペットを投稿しています。私がしたいのは、上にスニペットのクラスを作成することです。 – SimpiMind

+0

書式設定はいたるところにあり、本当に読みにくいです。私は私のコメントを変更しました。 – Jay

答えて

3

いくつかのコードを参考にしてみましょう。クラス全体ではありませんが、すべてのコンセプトがあります。私も簡略化Firebase構造を使用していますが、やはり、概念は同じです。

ここFirebase構造

users 
    a_uid 
    email: "some email" 
    groups 
     group_1: true 
     group_2: true 
    location 
     coords: "[52.5, 67.1]" 
     name: "Oyebanjo Solarin Street, Lagos" 
     visibility: true 
    username: "some username" 

まずありますが、各ユーザーのthatsのための場所であるように思われるのです構造であることに自分自身を貸します。

struct LocationStruct { 
     var coords: String? 
     var name: String? 
     var visibility: Bool? 
    } 

次に、その構造をユーザークラス内で使用します。この例では、単一のユーザーのスナップショットを渡してクラスを初期化し、そのクラスを分解してクラス変数に移入します。

class UserClass { 
    var email = "" 
    var username = "" 
    var groupsDict: [String: Any] 
    var loc = LocationStruct() 

    init(snap: FIRDataSnapshot) { 

     let userDict = snap.value as! [String: Any] 

     self.email = userDict["email"] as! String 
     self.username = userDict["username"] as! String 

     self.groupsDict = userDict["groups"] as! [String: Any] 

     let locationDict = userDict["location"] as! [String: Any] 
     self.loc.coords = locationDict["coords"] as? String 
     self.loc.name = locationDict["name"] as? String 
     self.loc.visibility = locationDict["visibility"] as? Bool 
    } 
} 

ここにあなたの構造で唯一残っている問題を単一のユーザーに読んで、UserClass

ref.child("users").child("a_uid") 
         .observeSingleEvent(of: .value, with: { snapshot in 

     let user = UserClass(snap: snapshot) 

     //this code is just to show the UserClass was populated. 
     print(user.email) 
     print(user.username) 

     for group in user.groupsDict { //iterate over groups 
      print(group) //and print each one 
     } 

     print(user.loc.coords!) //print the location data 
     print(user.loc.name!) 
     print(user.loc.visibility!) 
    }) 

を移入するコードです、子ノードの接点を持っているvisibilityToSelectContactsノードを、theresの。

したがって、UserClassのuserDictの高レベル辞書には、visibilityToSelectContactsという子があり、その子にはkey:valueのペアの子辞書があり、 "gFTCpzgSJDOsrVKWbAJp0Z1JFXp1":trueの子辞書があります。この

userDict 
    visibilityToSelectContacts 
     contacts 
     contant_0: true 
     contant_1: true 

のように私は(ヒント:それは同じデザインパターンです)その構造が打ち出し取得するあなたを残します

+0

ありがとう、それは働いた! – SimpiMind

0

てみ働いていないものです。
はまた、あなたが将来の子などを抽出するために使用するキーチェック:ここ

LALocation(value: value["coordinates"] as? [String:Any] ?? [:]) 

を次のものが必要です。

LALocation(value: value["location"] as? [String:Any] ?? [:]) 

とデータをフェッチした後、オブジェクトID snapshot.key

を抽出することを忘れないでください
+0

これは、Firebase構造に一致するクラスの作成に関する質問とは何が関係していますか?データがすでに利用可能なときに第三者図書館を追加するのはなぜですか? – Jay

+0

私はクラスを作成する必要がある、私は第三者を追加するために必要かどうかわからない。私が試したことを編集できるのであれば、私は感謝します。私はまだfirebaseの新しいです。 – SimpiMind

関連する問題