Я использую базу данных Firebase Firestore, и у меня есть таблица элементов, хранящихся в базе данных. Мое приложение позволяет пользователю выбрать 2 элемента. Я хочу иметь возможность сравнить эти два элемента.
Учитывая, что это асинхронный вызов, я использую обработчик завершения, чтобы убедиться, что информация получена. Однако я не могу понять, как я мог бы сравнить два непосредственно из асинхронных методов, как если бы я изменил уже инициированную переменную, это не изменится. Код ниже:
if (selectedIndexes.contains(indexPath.row)) {
selectedIndexes.remove(at: selectedIndexes.index(of: indexPath.row)!)
navigationController?.navigationBar.isHidden = true
cell!.accessoryType = UITableViewCell.AccessoryType.none
} else {
if selectedIndexes.count == 2 {
selectedIndexes[0] = indexPath.row
} else {
if selectedIndexes.count == 0 {
selectedIndexes.append(indexPath.row)
print("anything?")
getItem1(id: idArray[indexPath.row]) { res in
print(res)
item1 = res!
}
cell!.accessoryType = UITableViewCell.AccessoryType.checkmark
}
else{
selectedIndexes.append(indexPath.row)
getItem2(id: idArray[indexPath.row]) { res in
print(res)
item2 = res!
genderArray.append(gender)
}
cell!.accessoryType = UITableViewCell.AccessoryType.checkmark
navigationController?.navigationBar.isHidden = false
}
}
Методы, которые я вызываю, чтобы получить предметы, как показано ниже:
func getItem1(id: String, completion: @escaping((String?) -> ())) {
let user = id
var preference = ""
let docRef = self.db.collection("users").document(user)
docRef.getDocument { (document, error) in
if let document = document , document.exists {
let newdoc = document as? [String:Any]
let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
item1 = document["interestedIn"] as! String
completion(item1)
} else {
print("Document does not exist")
completion(nil)
}
}
}