На основе вашего набора данных и использования чистых массивов и словарей Swift вы можете просто отфильтровать их так:
func getConfirmedOrders(in dict: [String:Any]) -> [[String:Any]] {
guard
let answers = dict["answer"] as? [[String:Any]]
else { print("Answer key not present"); return [] }
//Your basic filter operation
let filtered = answers.filter { (answer) -> Bool in
return answer["status"] as? String == "4"
}
return filtered
}
Это просто правильное приведение типов и применение к нему операции filter
.
Просто используя это так:
self.responseArray = self.getConfirmedOrders(in: dict)
DispatchQueue.main.async {
self.tableView.reloadData()
}
Однако я вижу, что ваш responseArray
имеет тип [ConfirmedOrders.JSONDictionary]
.
Так что либо измените getConfirmedOrders(from:)
, чтобы вернуть [ConfirmedOrders.JSONDictionary]
, либоизмените свой responseArray
на тип [[String:Any]]
.
Пример игровой площадки
let jsonString = """
{"status":"ok","answer":[{"address":"Newyork","comments":"test","contact_name":"ios@ios.com","status":"4"},{"address":"Ohio","comments":"test","contact_name":"ios@ios.com","status":"3"},{"address":"cityname","comments":"test","contact_name":"ios@ios.com","status":"3"},{"address":"Washington","comments":"test","contact_name":"ios@ios.com","status":"4"}]}
"""
if let data = jsonString.data(using: .utf8) {
do {
//basically what you have in `convertToDictionary(text:)`
let dict = try JSONSerialization.jsonObject(with: data, options: []) as! [String: Any]
let filtered = getConfirmedOrders(in: dict)
print(filtered)
}
catch {
print(error)
}
}
Предложения:
- Использование кодируемых моделейвместо массива и словаря Swift
- Используйте Swift
Array
вместо NSArray
и аналогично используйте Swift Dictionary вместо NSDictionary