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
}
}
}