This is my NSObject class
class CustomDate: NSObject {
var quarter: Int!
var day: String!
var month: String!
var db: String!
var long: String
To compare strings in numeric order either use localizedStandardCompare
which sorts like in Finder
dates.sort(by: {$0.month.localizedStandardCompare($1.month) == .orderedAscending})
or compare
with option numeric
dates.sort(by: {$0.month.compare($1.month, options: .numeric) == .orderedAscending})
The best solution might be to declare month
as Int
.
You can sort your custom array by this. The sort is one of the High order function which used to sort custom array.
func apiData() {
Alamofire.request("https://api.lrs.org/random-date-generator?lim_quarters=40&source=api-docs", method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
guard let json = response.result.value as? [String: Any] else { return }
guard let data = json["data"] as? [String: Any] else { return }
for (_, value) in data {
let dateValue = value as! [String: Any]
let date = CustomDate(quarter: dateValue["quarter"] as! Int,
day: dateValue["day"] as! String,
month: dateValue["month"] as! String,
db: dateValue["db"] as! String,
long: dateValue["long"] as! String,
unix: dateValue["unix"] as! Int)
self.dates.append(date)
}
print("unsorted array \(self.dates.map({$0.month})))")
self.dates = self.dates.sorted(by: { (objModel, objModel1) -> Bool in return
(Int(objModel.month ?? "0") ?? 0) < (Int(objModel1.month ?? "0") ?? 0)
})
print("sorted array \(self.dates.map({$0.month}))")
break
case .failure(_):
print(response.result.error as Any)
break
}
}
}