Я уже некоторое время пытаюсь создать контроллер представления, который позволяет вам искать и выбирать пользователей. У меня нет ошибок, и приложение создается успешно, но когда я go для поиска пользователей в панели UISearch, я вижу это предупреждение внизу: «Не удалось получить пользователей: failedToFetch». Я не уверен, почему это не удается. Пожалуйста, помогите.
failedToFetch появляется только в моей быстрой ячейке менеджера баз данных. Вот код для этого -
import Foundation
import FirebaseDatabase
final class DatabaseManager {
static let shared = DatabaseManager()
private let database = Database.database().reference()
static func safeEmail(email: String) -> String {
var safeEmail = email.replacingOccurrences(of: ".", with: "-")
safeEmail = safeEmail.replacingOccurrences(of: "@", with: "-")
return safeEmail
}
}
extension DatabaseManager {
public func userExists(with email: String, completion: @escaping((Bool) -> Void)) {
var safeEmail = email.replacingOccurrences(of: ".", with: "-")
safeEmail = safeEmail.replacingOccurrences(of: "@", with: "-")
database.child(safeEmail).observeSingleEvent(of: .value, with: { snapshot in
guard ((snapshot.value as? String) != nil) else {
completion(false)
return
}
completion(true)
})
}
// inserts new user to database
public func insertUser(with user: ChatAppUser, completion: @escaping (Bool) -> Void){
database.child(user.safeEmail).setValue(["name": user.name], withCompletionBlock: { error, _ in
guard error == nil else {
print("failed to write to database")
completion(false)
return
}
self.database.child("users").observeSingleEvent(of: .value, with: { snapshot in
if var usersCollection = snapshot.value as? [[String: String]] {
//append to user dictionary
let newElement = [
"name": user.name,
"email": user.safeEmail,
]
usersCollection.append(newElement)
self.database.child("users").setValue(usersCollection, withCompletionBlock: { error, _ in
guard error == nil else{
completion(false)
return
}
completion(true)
})
}
else {
//create that array
let newCollection: [[String: String]] = [
[
"name": user.name,
"email": user.safeEmail
]
]
self.database.child("users").setValue(newCollection, withCompletionBlock: { error, _ in
guard error == nil else{
completion(false)
return
}
completion(true)
})
}
})
})
}
public func getAllUsers(completion: @escaping (Result<[[String: String]], Error>) -> Void) {
database.child("users").observeSingleEvent(of: .value, with: { snapshot in
guard let value = snapshot.value as? [[String: String]] else {
completion(.failure(DatabaseError.failedToFetch))
return
}
completion(.success(value))
})
}
public enum DatabaseError: Error {
case failedToFetch
}
}
struct ChatAppUser {
let name: String
let email: String
var safeEmail: String {
var safeEmail = email.replacingOccurrences(of: ".", with: "-")
safeEmail = safeEmail.replacingOccurrences(of: "@", with: "-")
return safeEmail
}
}