2016-10-19 11 views
0

ユーザーがfirebaseのチームのメンバーであるかどうかをチェックする関数の補完ハンドラを記述しようとしています。Firebase Swift 3 CompletionハンドラBool

私は公共のクラスcustomFunctionsを持っていて、私はそこに関数ifUserIsMemberを作成しました。私は補完ハンドラのアイデアにちょっと固執しているようで、完了時にブール値をチェックする方法は分かりません。ここでは、クラスのための私のコードは次のとおりです。

@IBAction func signInButtonAction(_ sender: AnyObject) { 
    //check if user is a member of a team 
    let userid = self.uid 

    checkFunctions.ifUserIsMember(userid: userid) { success in 
     print("user is a member of a team") 
     self.updateLocation(type: "in") 
    } 
} 

をそれは関係なく、実際にそのuserid

+0

をチェックあなたが正しく呼んでいるからです。問題はスナップショットにその子があることを確認することにあるようです。あなたがブレークポイントを置くなら、あなたは常に 'completionHandler(true)'を呼び出していますか? –

+0

いいえ、ボタンが最初に押されたとき(ユーザーが実際にそのチームのメンバーになっているとき)、通常は常にfalseを返しますが、2度目はtrueを返します。 –

+0

実際には心配しないでください - それは逆です。ユーザーがチームのメンバーでなくてもself.updatelocationを呼び出しています –

答えて

0

てみていsnapshot.hasChild(uerid)かどうかのtrueを返しますようだ:私はそれを呼んでいるところ

import Foundation 
import GeoFire 
import FirebaseDatabase 


public class customFunctions { 

func ifUserIsMember(userid: String, completionHandler: @escaping (Bool) ->()) { 
    let ref = FIRDatabase.database().reference() 

    ref.child("teammembers").observeSingleEvent(of: .value, with: { (snapshot) in 
     if snapshot.hasChild(userid){ 
      completionHandler(true) 
     }else{ 
      print("user is not a member of a team") 
      completionHandler(false) 
     } 
    }) 
} 
} 

そしてここにはあります -

func ifUserIsMember(userid: String, completionHandler: @escaping ((_ exist : Bool) -> Void)) { 
    let ref = FIRDatabase.database().reference() 

    ref.child("teammembers/\(userid)").observeSingleEvent(of: .value, with: { (snapshot) in 
     if snapshot.exists(){ 
      completionHandler(true) 
     }else{ 
      print("user is not a member of a team") 
      completionHandler(false) 
     } 
    }) 
} 
+0

関数の型に引数のラベル "exist"を指定できないと言われます –

+0

答えが更新されました.. – Dravidian

+0

以前と同じ問題です。すべて正常に動作しますが、何らかの理由でユーザーがメンバーでない場合でもまだ動作していません。最初にfalseを返し、その後すぐにtrueを返します。 –

0

iを実行した他の人この問題では、これは私のためにそれを修正したものです。

@IBAction func signInButtonAction(_ sender: AnyObject) { 
    //check if user is a member of a team 

    let userid = self.uid 

    checkFunctions.ifUserIsMember(userid: userid) { (exist) ->() in 
     if exist == true { 
      print("user is a member of a team") 
      self.updateLocation(type: "in") 
     } 
     else { 
      print("user is not a member") 
     } 


    } 


} 



public class customFunctions { 
let ref = FIRDatabase.database().reference() 
func ifUserIsMember(userid: String, completionHandler: @escaping ((_ exist : Bool) -> Void)) { 

    ref.child("teammembers").observeSingleEvent(of: .value, with: { (snapshot) in 
     if snapshot.hasChild(userid){ 
      completionHandler(true) 

     }else{ 

      print("user is not a member of a team") 
      completionHandler(false) 
     } 


    }) 

} 

}

0

スウィフト3 & Firebase 3.17.0

これは、トリックを行います、問題がでているようですが、音はありませんnsnullを

func ifUserIsMember(userid: String, completionHandler: @escaping (Bool) ->()) { 
    let ref = FIRDatabase.database().reference() 

    ref.child("teammembers").observeSingleEvent(of: .value, with: { (snapshot) in 
     guard snapshot.value is NSNull else { 
      print("\(snapshot) exists") 
      completionHandler(true) 
     } 
     print("\(snapshot) is not exists") 
     completionHandler(false) 
    }) 
} 
関連する問題