Возврат массива структуры после использования for-in и применение shuffled (). Sorted () - PullRequest
1 голос
/ 08 апреля 2019

Я хочу вернуть массив после использования цикла 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()
}
...