2017-12-27 10 views
-1

友達のUIDを検索しました。名前や写真などの情報を観察するにはどうすればよいですか? 今、UidArrayは友達のUIDを保持しています。私はUIDごとにループして、Tableviewに関する情報を表示する必要がありますか?Firebase友達の情報を取得する方法

let userIdArray = self.UidArray 
for id in userIdArray { 
    ref.observeSingleEvent(of: .value, with: { (snapshot) in 
     guard let dictionary = snapshot.value as? [String: Any] else { 
      return 
     } 
     let displayN = dictionary["displayname"] as? String 
     let Uid = dictionary["uid"] as? String 
     let ImgUrl = dictionary["urlToImage"] as? String 

// Append results to another array, reload table view if loop is done. 

ユーザーモデル:

class Userr: NSObject { 
    var displayname: String? 
    var email: String? 
    var gender: String? 
    var uid: String? 
    var urlToImage: String? 
} 

私は一度だけデータを取得したいです。私はスクロールでセルを表示するたびにデータベースにヒットしたくありません。

私は自分のuidの配列に基づいて友人情報を取得する最も良い方法は何ですか?

+1

。 – mchandleraz

+0

@mchandlerazは答えてくれてありがとう、ユーザーモデルはちょうど情報を扱う簡単な変数、私はちょうど私の答えを編集しました。 – Salah

答えて

0

forループのためのobserveメソッドで使用されている.childAddedは、forループのようにユーザーが存在する回数だけ関数を呼び出すので、forループは不要で非常に過剰です。

func handleFetchAllUsers(_ completion: @escaping ([User]) ->()) { 
     DispatchQueue.global(qos: .userInteractive).async { 

    var data: [User] = [] 

    let reference = Database.database().reference().child("users") 

     reference.observe(.childAdded, with: { (snapshot) in 

      guard let dictionary = snapshot.value as? [String: AnyObject] else { return } 

        let username = dictionary["username"] as? String 
        let name = dictionary["name"] as? String 
        let email = dictionary["email"] as? String 

        let user = User() 
        user.name = name 
        user.username = username 
        user.email = email 

        data.append(user) 
        DispatchQueue.main.async { 
         completion(data) 
        } 

      }, withCancel: nil) 

     }, withCancel: nil) 
    } 
} 

あなたはそうのような関数を呼び出すと思います:それは本当にあなたのモデルがどのように見えるかを含め、より多くのコンテキストなしでこれに答えることは不可能です

var users: [User] = [] 

handleFetchAllUsers { (user) in // USER IS THE ARRAY OF USERS RETURNED FROM THE FUNCTION 
    self.users = user 
    self.collectionView.reloadData() // IF YOU'RE USING A UICOLLECTIONVIEW. 
} 
+0

このコードを共有していただきありがとうございますが、これは私が望むものではありません。私は友人のuid [ClickHere](https://i.gyazo.com/81eef225c7eb66956d514e09d757e165.png)を取得するために観察しました。一度フェッチして名前や写真などのプロフィールを見ることはできますか?あなたはあなたの答えを編集し、特定のuidの配列でユーザー情報を観察する方法を表示できますか? – Salah

関連する問題