Как узнать количество постов пользователя с помощью FireStore в iOS Swift - PullRequest
0 голосов
/ 11 июня 2018

Я перенес пользовательский пост, подписчиков и подписчиков из firebase в firestore.Теперь я перенес пост, подписчиков и подписчиков и постов, количество подписчиков тоже.

Здесь код, который я перенес с firebase в firestore.

 import Foundation
import FirebaseDatabase
 import FirebaseFirestore

class FollowApi {


var REF_FOLLOWERS = Database.database().reference().child("followers")
var REF_FOLLOWING = Database.database().reference().child("following")
let db = Firestore.firestore()

func followAction(withUser id: String) {


    let docRef = db.collection("user-posts").document(id)

    docRef.getDocument { (document, error) in
        if let document = document, document.exists {
            let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
            print("Document data: \(dataDescription)")

            self.db.collection("feed").document(API.User.CURRENT_USER!.uid).setData([document.documentID: true])

        } else {
            print("Document does not exist")
        }
    }



   self.db.collection("followers").document(id).setData([API.User.CURRENT_USER!.uid: true])
   self.db.collection("following").document(API.User.CURRENT_USER!.uid).updateData([id: true])

}

func unFollowAction(withUser id: String) {

    let docRef = db.collection("user-posts").document(id)

    docRef.getDocument { (document, error) in
        if let document = document, document.exists {
            let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
            print("Document data: \(dataDescription)")



 self.db.collection("feed").document(API.User.CURRENT_USER!.uid).delete()


        } else {
            print("Document does not exist")
        }
    }



    self.db.collection("followers").document(id).setData([API.User.CURRENT_USER!.uid: NSNull()])
    self.db.collection("following").document(API.User.CURRENT_USER!.uid).setData([id: NSNull()])

 }

func isFollowing(userId: String, completed: @escaping (Bool) -> Void) {

    let docRef = db.collection("followers").document(userId)

    docRef.getDocument { (document, error) in
        if let document = document, document.exists {

            print("documnetData::::\(String(describing: document.data()))")
            if let dataDescription = document.data(), let _ = dataDescription[API.User.CURRENT_USER!.uid] as? Bool {

                completed(true)
            }

            completed(false)

        } else {
           completed(false)
        }
    }


}





    func fetchCountFollowing(userId: String, completion: @escaping (Int) -> Void) {
  //     REF_FOLLOWING.child(userId).observe(.value, with: {
  //                snapshot in
 //                let count = Int(snapshot.childrenCount)
 //                completion(count)
 //            })



        db.collection("following").document(userId).getDocument { (querySnapshot, error) in

            let count = Int((querySnapshot?.documentID)!)
            print("followingCount::::\(String(describing: count))")
            completion(count!)
        }

    }

 }//followAPI

Я пытался получить следующие подсчеты из firestore.

  let count = Int((querySnapshot?.documentID)!)
            print("followingCount::::\(String(describing: count))")
            completion(count!)

enter image description here

, но пока не показывает ничего.Я не знаю, какую ошибку я совершил?

Любая помощь высоко ценится пожалуйста ...

1 Ответ

0 голосов
/ 11 июня 2018

Если вы запрашиваете collection, тогда snapshot будет содержать массив documents.То, что вы пытаетесь получить, это documentID, что совпадает с key в Firebase.

Firestore |Firebase

documentID = snapshot.key

documentData = snapshot.value

Теперь перейдите к главному, и вот что вам нужно получитьколичество.

let count = querySnapshot?.documents.count
print(count)

РЕДАКТИРОВАТЬ Для комментария: как я могу мигрировать REF_FOLLOWING.child (userId) .observe (.value, с: {снимок в let count = Int(snapshot.childrenCount) завершение (количество)}) в пожарное хранилище

На основе структуры подключенной БД вы выбираете following, соответствующий userId, что Document.

REF_FOLLOWING.document(userId).getDocument { (snapshot, error) in
    if let _error = error {
       print(_error.localizedDescription)
       return
    }

    guard let _snapshot = snapshot else {return}

    /// This is a single document and it will give you "[String:Any]" dictionary object. So simply getting its count is the result you needed.
    let dict = _snapshot.data()
    print(dict.count)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...