В вашем коде есть еще несколько неправильных вещей.
Вы удаляете индикатор активности только в блоке успеха?Есть ли цикл для элемента в JSON?могу я узнать, почему ты это сделал?:
let filtered = json.filter { (dict) -> Bool in
guard let status : [String : String] = dict["status"] as? [String : String], let statusString = status["name"] else {
return false
}
var a = statusString.compare("test") != .orderedSame
var b = statusString.compare("testing") != .orderedSame
return a && b
}
for item in json {
self.getAllDetail = filtered
self.tableView.reloadData()
self.refresher.endRefreshing()
self.activityIndicator.stopAnimating()
}
if !self.getAllDetail.isEmpty{
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
Вы можете заменить этот код на:
self.refresher.endRefreshing()
self.activityIndicator.stopAnimating()
//Remove activity indiactor when you get any response not just success, otherwise for failure it will keep aimating, then in success case
let filtered = json.filter { (dict) -> Bool in
guard let status : [String : String] = dict["status"] as? [String : String], let statusString = status["name"] else {
return false
}
var a = statusString.compare("test") != .orderedSame
var b = statusString.compare("testing") != .orderedSame
return a && b
}
if !self.getAllDetail.isEmpty{
DispatchQueue.main.async {
// Sorting using string comparison, g > b in ASCII value
self.getAllDetail = filtered.sorted { (firstObject, secondObject) -> Bool in
guard let statusDictFromFirst = firstObject["status"] as? [String: String], let statusKeyFromFirst = statusDictFromFirst["name"] , let statusDictFromSecond = secondObject["status"] as? [String: String], let statusKeyFromSecond = statusDictFromSecond["name"] else {
return false
}
return statusKeyFromFirst > statusKeyFromSecond
}
print("getAllData : \(getAllData)")
self.tableView.reloadData()
}
}
И в tableView
показать данные без каких-либо if else
условий для хороших и плохих.Теперь сверху будут поступать все данные good status
и после этого bad status
.
Также узнайте о completion callbacks
.Это помогает в async operations
как получение API
ответа и обновление пользовательского интерфейса после получения ответа.