Я хочу вернуть массив после использования цикла for-in. И после того, как я верну массив, мне нужно будет применить shuffled()
и sorted()
к этому массиву.
Данные, которые я загружаю, используя backend и firestore .
Сначала я получаю идентификатор backend , а затем эти идентификаторы, которые я загружаю из firestore , используя цикл for-in.
func hallQuery(hall: String)
используется в func fetchDataFromBackend()
т.е. мне нужно применить shuffled()
и sorted()
к var halls: [Halls] = []
, чтобы это выглядело так self.halls.shuffled().sorted(by: { $0.priority > $1.priority })
, но где его применить, я не понимаю.
Код ниже:
var halls: [Halls] = []
var tempHalls: [Halls] = []
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
fetchDataFromBackend()
}
func hallQuery(hall: String) {
Firestore.firestore().collection(...).document(hall).getDocument{ (document, error) in
if let doc = document, doc.exists {
if let newHallModel = Halls(dictionary: doc.data()!, id: doc.documentID) {
self.tempHalls.append(newHallModel)
self.tableView.reloadData()
} else {
fatalError("Fatal error")
}
} else {
print("Document does not exist")
return
}
}
}
private func fetchDataFromBackend() {
var request = URLRequest(url: URL(string: ...)!)
request.httpMethod = "POST"
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if error != nil {
print("Error \(String(describing: error))")
return
}
if let httpResponse = response as? HTTPURLResponse {
...
}
do {
if let jsonResult = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] {
if let idsList = jsonResult["hall_id_list"] as? [String] {
if idsList.isEmpty {
let alertController = UIAlertController(title: NSLocalizableNothingFound,
message: NSLocalizableNothingFoundMessage,
preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: NSLocalizableOk, style: .cancel, handler: { (_) in
MBProgressHUD.hide(for: self.view, animated: true)
return
}))
self.present(alertController, animated: true, completion: nil)
} else {
self.halls.removeAll()
self.tempHalls.removeAll()
DispatchQueue.main.async {
for id in idsList {
self.hallQuery(hall: id)
}
MBProgressHUD.hide(for: self.view, animated: true)
}
}
}
}
} catch {
print("catch block error")
}
}
task.resume()
}