2017-12-27 31 views
-1

친구 UID를 검색했습니다. 이름, 사진 등의 정보를 관찰하는 가장 좋은 방법은 무엇입니까? 지금 UidArray 지주 친구 uids, 나는 각 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 답변 주셔서 감사합니다, 사용자 모델 그냥 간단한 vars 정보를 처리하기 위해, 나는 방금 내 대답을 편집. – Salah

답변

0

루프 용은 필요하지 않으며 Firebase 용 관찰 방법에 사용되는 .childAdded은 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를 UidArray, How에서 저장했습니다. 내가 한 번 가져 와서 이름, 사진 등 같은 그들의 프로파일을 관찰 할 수 있습니까? 답변을 편집하고 특정 uid 배열을 통해 사용자 정보를 관찰하는 방법을 보여줄 수 있습니까? – Salah