2017-01-24 6 views
0

私はTwitterのようなソーシャルアプリを持っていて、ユーザーが別のユーザーを探すときに、ログインしているユーザーが他のユーザーに従っているかどうかを確認したいが、ループする方法がわからず、もう一方に従います。FireIdでAutoIdChildをループする方法は?

{ 
    "follower" : { 
    "mt0fzirhMhazIcy90MRWuRpTfmE2" : { 
     "-KbHXdeiOfGXzvavuQ_5" : { 
     "uid" : "dEXaVLDOSPfJa3zTyUNqAEtVuMR2" 
     } 
    } 
    }, 
    "following" : { 
    "dEXaVLDOSPfJa3zTyUNqAEtVuMR2" : { 
     "-KbHXdehbkeMvDyzNpRE" : { 
     "uid" : "mt0fzirhMhazIcy90MRWuRpTfmE2" 
     } 
    } 
    }, 
    "handles" : { 
    "jcadmin" : "mt0fzirhMhazIcy90MRWuRpTfmE2", 
    "jcbest" : "dEXaVLDOSPfJa3zTyUNqAEtVuMR2" 
    }, 
    "user_profiles" : { 
    "dEXaVLDOSPfJa3zTyUNqAEtVuMR2" : { 
     "about" : "Hello world", 
     "handle" : "jcbest", 
     "name" : "Juan Carlos Estevez Rodriguez", 
     "profile_pic" : "https://firebasestorage.googleapis.com/v0/b..." 
    }, 
    "mt0fzirhMhazIcy90MRWuRpTfmE2" : { 
     "about" : "Hello", 
     "handle" : "jcadmin", 
     "name" : "Juan Carlos", 
     "profile_pic" : "https://firebasestorage.googleapis.com/v0..." 
    } 
    } 
} 

これは私のデータベースである、私がしたいことはあなたが$autoIdを必要としないこの

self.databaseRef.child("following").child((self.loggedInUser?.uid)!).observe(.value, with: { (snapshot) in 
     let snapshot = snapshot.value as? [String: AnyObject] 

     if("The other user UID exists in the following") 
     { 
      self.followButton.tittleLabel = "Unfollow" 
     } 

    }) 

答えて

1

ようになります、あなただけのユーザーの$uidキーとして次/フォロワーを使用することができます。

"follower" : { 
    "mt0fzirhMhazIcy90MRWuRpTfmE2" : { 
    "dEXaVLDOSPfJa3zTyUNqAEtVuMR2": true 
    } 
}, 
"following" : { 
    "dEXaVLDOSPfJa3zTyUNqAEtVuMR2" : { 
    "mt0fzirhMhazIcy90MRWuRpTfmE2": true 
    } 
}, 

次に、あなたはそれがtrueまたはちょうどnullに等しいBoolだかどうかを判断するためにスナップショット値を切り替えて、/以下/ $のUID/$ userIdをの値を観察することができます。

let uid = FIRAuth.auth()!.currentUser!.uid 
let ref = FIRDatabase.database().reference(
    withPath: "following/\(uid)/$userId" 
) 

ref.observe(.value, with: { (snapshot) in 
    switch snapshot.value { 
    case let value as Bool where value: 
     // value was a Bool and equal to true 
     self.followButton.tittleLabel = "Unfollow" 
    default: 
     // value was either null, false or could not be cast 
     self.followButton.tittleLabel = "Follow" 
    } 
}) 
+1

ありがとう:

は今、あなたが "以下" のユーザーにアクセスすることができます!本当に働いた! ;) –

1

Firebaseのpush()/childByAutoId()メソッドを使用すると、それがユニークな子どもを持つことが保証コレクションを取得するための素晴らしいですし、それがやや他のほとんどの言語の配列のように、時系列に並べています。

あなたのユーザーのコレクションは、タイプが異なります。これは、セットによく似ています。 1つのセットでは、各値は1回だけ発生することができます。だから、これはキーがそのコンテキスト内で一意である必要がありますので、それぞれのフォロワーのみ(一回のコレクションに存在することができることを保証し、これらのキーとしてUIDを置く

{ 
    "follower" : { 
    "mt0fzirhMhazIcy90MRWuRpTfmE2" : { 
     "dEXaVLDOSPfJa3zTyUNqAEtVuMR2": true 
    } 
    }, 
    "following" : { 
    "dEXaVLDOSPfJa3zTyUNqAEtVuMR2" : { 
     "mt0fzirhMhazIcy90MRWuRpTfmE2": true 
    } 
    }, 
    ... 

:Firebaseデータベースでは、このようなセットをモデル化したいです)。値trueは、データベースに値のないキーを格納することができないため、意味がありません。

self.databaseRef 
    .child("following") 
    .child((self.loggedInUser?.uid)!) 
    .observe(.value, with: { (snapshot) in 
     for child in snapshot.children { 
      print("Following \((child.key!))" 
     } 
    }) 
関連する問題