Я пытаюсь собрать базовое приложение для знакомств, и мне нужна помощь с пониманием того, как выбрать подходящих пользователей и загрузить их на отдельной странице ChatLobby. Вот где я сейчас:
// (1) when currentUser rejects/likes another user, this is saved into firestore as 0/1, respectively.
fileprivate func saveSwipeToFirestore(didLike: Int) {
guard let uid = Auth.auth().currentUser?.uid else { return }
guard let cardUID = topCardView?.cardViewModel.uid else { return }
let documentData = [cardUID: didLike]
Firestore.firestore().collection("swipes").document(uid).getDocument { (snapshot, err) in
if let err = err {
print("Failed to fetch swipe document: ", err)
return
}
if snapshot?.exists == true {
Firestore.firestore().collection("swipes").document(uid).updateData(documentData) { (err) in
if let err = err {
print("Failed to save swipe data: ", err)
return
}
print("Successfully updated swipe...")
if didLike == 1 {
self.checkIfMatchExists(cardUID: cardUID)
}
}
} else {
Firestore.firestore().collection("swipes").document(uid).setData(documentData) { (err) in
if let err = err {
print("Failed to save swipe data: ", err)
return
}
print("Successfully saved swipe...")
if didLike == 1 {
self.checkIfMatchExists(cardUID: cardUID)
}
}
}
}
}
Вышеприведенный код загружает словарь пользователей, по которым смахнул currentUser (в данный момент вошедший в систему), ключом является uid пользователя, с которым проведено перелистывание, и пара, показывающая, смахнул ли currentUser влево (Int == 0) или справа (Int == 1):
["1i8BNLIXBlbtwNSqw3JkX3QDDNl2": 1, "faImO8S61VNjXNe8CGa2SuDLmXf2": 1, "jittehkU6bNON9Feowh8xJt9ey62": 1] * 1006
// (2) if two users have swiped right on eachother, call a function which loads their profile pic and name into ChatLobbyController (where matches are shown)
fileprivate func checkIfMatchExists(cardUID: String) {
Firestore.firestore().collection("swipes").document(cardUID).getDocument { (snapshot, err) in
if let err = err {
print("Failed to fetch document for card user:", err)
return
}
guard let data = snapshot?.data() else { return }
print(data)
guard let uid = Auth.auth().currentUser?.uid else { return }
let hasMatched = data[uid] as? Int == 1
if hasMatched {
addMatchToFriends(cardUID: String)
}
}
}
// (3) not sure how to place this info into addMatchToFriends
fileprivate func addMatchToFriends(cardUID: String) {
??????
}
У меня есть идея о логике выполнения (3), но я не уверен, как правильно выполнить в коде, кто-нибудь сможет сделать некоторые предложения? Информация о пользователе хранится в отдельной коллекции под названием «users», которая содержит поля «name» и «imageUrl», за которыми я слежу, а также сохраняет uid, который я использую, в моем словаре «swipes». Не стесняйтесь спрашивать дополнительную информацию о моем конце также. Спасибо.