swift firestore tinder - поиск пользователей и добавление в массив для загрузки на экране - Advanced - PullRequest
0 голосов
/ 14 ноября 2018

Я делаю приложение типа «трут», на данный момент у меня есть cardViewModels: [CardViewModel], который содержит 4 фиктивных пользователя приложения в массиве производителей пользовательских объектов.в настоящее время это работает нормально и загружает пользователя на карты типа трут.

, хотя теперь я хотел бы кое-что как заменить фиктивных пользователей другими фиктивными пользователями из Firebase / Firestore .

Я ожидал бы вызвать fetchUsersCurrentUserIsFollowing(), который возвращает UserGrapevine users (как показано ниже)

UserGrapevine(name: displayName, age: age, profession: occupation, imageNames: ["lady5c"], kmsAway: distanceInKms)

Затем я хотел бы добавить этих пользователей в массив производителей и затем вызвать setupDummyCards() после моегоМассив производителей установлен с пользователями из Firestore?

    let cardViewModels: [CardViewModel] = {

    let producers = [
        UserTinder(name: "Kelly", age: 23, profession: "Music DJ", imageNames: ["lady5c","lady4c","kelly1","kelly2","kelly3"]),
        UserTinder(name: "Jane", age: 18, profession: "Teacher", imageNames: ["jane1","jane2","jane3"]),
        Advertiser(title: "Buy My Shirt", brandName: "Ben's Shirts", posterPhotoName: "lady5c"), Joker(title: "JOKER", cardSuit: "HEART", jokerPhotoName: "lady5c")] as [ProducesCardViewModel]


  let viewModels = producers.map({return $0.toCardViewModel()})


    return viewModels

}()


    fileprivate func setupDummyCards() {
    cardViewModels.forEach { (cardVM) in
        let cardView = CardView(frame: .zero)
        cardView.cardViewModel = cardVM
        cardsDeckView.addSubview(cardView)
        cardView.fillSuperview()
    } 
}




  func fetchUsersCurrentUserIsFollowing(){

    guard let uid = Auth.auth().currentUser?.uid else { return }

    let db = Firestore.firestore()

    db.collection("Users").document(uid).collection("Following").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                //print("\(document.documentID) => \(document.data())")

                let d = document.data()

                d.forEach({ (key: String, value: Any) in
                    print("this is the key",key)


                    Database.firestorefetchUserForGrapevineCardWithUID(uid: key, completion: { (user) in


   //append to producers list somehow.

                    }


                    )}
                )}
        }
    }
}






 extension Database {
    static func firestorefetchUserForGrapevineCardWithUID(uid: String, completion:@escaping (UserGrapevine) -> ()) {

print("fire store fetch user with uid called")

let defaults = UserDefaults.standard


let db = Firestore.firestore()

let docRef = db.collection("Users").document(uid)

docRef.getDocument { (document, error) in

    if (document?.exists)! {

        if let document = document {

            guard let dictionary = document.data() else {
                print("error 1245")
                return }
           guard let age = dictionary["Age"] as? Int else { return }


            guard let occupation = dictionary["Occupation"] as? String else {
                return }

            guard let displayName = dictionary["Display Name"] as? String else {
                return }

            guard let searchingFromLatitude = defaults.string(forKey: "SearchingFromLatitude")
                else {
                    print("error 1234324245")
                    return }

            guard let searchingFromLongitude = defaults.string(forKey: "SearchingFromLongitude") else {
                print("error 1832835")
                return }

            guard let DoubleLatitude = Double(searchingFromLatitude) else {
                print("error t345345345")
                return }
            guard let DoubleLongitude = Double(searchingFromLongitude) else {
                print("error 55545345")
                return }

            //////////////Start of distanceFrom code///////////////////
            guard let latitude = dictionary["Actual Latitude"] as? String, let longitude = dictionary["Actual Longitude"] as? String, let latDouble = Double(latitude), let longDouble = Double(longitude) else {
                return }

            let distanceInKms = Database.getDistanceInKms(currentUserLat: DoubleLatitude, currentUserLong: DoubleLongitude, lat: latDouble, long: longDouble)
            ///////////////End of distance code/////////////////



            let user = UserGrapevine(name: displayName, age: age, profession: occupation, imageNames: ["lady5c"], kmsAway: distanceInKms)



            completion(user)


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

   }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...