2017-11-24 13 views
0

variable_aを別の関数で使用したいと思います。実際には、これらのデータをtableviewcellにロードします。FirebaseReference.observeSingleEventの変数を別の関数に使用する方法

func readFIRData() { 
    var credentials:[String] 
    let userID = Auth.auth().currentUser?.uid 
    ref = Database.database().reference().child("usr").child(userID!) 
    ref.observeSingleEvent(of: .value, with: { (snapshot) in 
     // Get user value 
     let value = snapshot.value as? NSDictionary 
     let Name = value?["firstName"] as? String ?? "" 
     let PhoneNo = value?["mobile"] as? String ?? "" 


     var variable_a = [Name,PhoneNo] 


     self.tableView.reloadData() 
    }) { (error) in 
    } 
} 

答えて

0

あなたreadFIRData関数内でコールバック(終了ハンドラを)持っている、そしてそのコールバックのパラメータとしてvariable_aを渡す必要があります。それをテーブルビューで使用するオブジェクトに解析し、コールバックでtableViewをリロードします。

機能は次のようになります。

func readFIRData(_ completion: ([Name,PhoneNo]) ->()) { 
    var credentials:[String] 
    let userID = Auth.auth().currentUser?.uid 
    ref = Database.database().reference().child("usr").child(userID!) 
    ref.observeSingleEvent(of: .value, with: { (snapshot) in 
     // Get user value 
     let value = snapshot.value as? NSDictionary 
     let Name = value?["firstName"] as? String ?? "" 
     let PhoneNo = value?["mobile"] as? String ?? "" 

     var variable_a = [Name,PhoneNo] 
     completion(variable_a) 
    }) { (error) in 
    } 
} 

、その後readFIRData関数を呼び出すために起こっている別の関数があります。

func requestData() { 
    readFIRData() { [weak self] data in 
     guard let `self` = self else { return } 
     self.data = data 
     DispatchQueue.main.async { 
      self.tableView.reloadData() 
     } 
    } 
} 

をあなたがのtableViewを再ロードするために戻ってメインスレッドに取得する方法言及。 self.dataによって、私はあなたがセルをインスタンス化するためにテーブルビューで使用するデータを想定していました。

+0

あなたはもっと上 FUNC readFIRData説明してください可能性があり(_完了:([名、PHONENOを]) - >()){ この行...何かが間違っ エラーに思える:、または:は が宣言されていないと予想しましたタイプ –

+0

はい、これは、完了コールバックという1つのパラメータを受け入れる関数です。補完コールバックは[Name、PhoneNo]型の1つのパラメータを持ち、返り値はvoidです。他のものはすべてあなたのコードからコピーしました。ただし、tableViewの再ロードを除き、** variable_a **をパラメータとして補完呼び出しを追加しました。 –

0

は、いくつかの変数にのStringArrayを割り当て、このよう今

func GetData(completion: @escaping(_ credentials: [String]) -> Void) { 
    let userID = Auth.auth().currentUser?.uid 
    ref = Database.database().reference().child("usr").child(userID!) 
    ref.observeSingleEvent(of: .value, with: { (snapshot) in 

    let value = snapshot.value as? NSDictionary 
    let Name = value?["firstName"] as? String ?? "" 
    let PhoneNo = value?["mobile"] as? String ?? "" 


    var variable_a = [Name,PhoneNo] 

    completion(variable_a) 
    self.tableView.reloadData() 
}) { (error) in 
} 
} 

解決しました。以下のコードを使用して割り当てます。同様に変数StringArrayVariableを使用して、tableviewセルを設定することができます。

GetData { (StringArray) in 
     self.StringArrayVariable= StringArray 
    } 
関連する問題