Я делаю приложение типа «трут», на данный момент у меня есть 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")
}
}
}
}
}