Sort array of objects by two properties
Yes there is a very simple way using the Array.sort()
Code:
var sorted = array.sorted({ (s1, s2) -> Bool in if s1.isPriority && !s2.isPriority { return true //this will return true: s1 is priority, s2 is not } if !s1.isPriority && s2.isPriority { return false //this will return false: s2 is priority, s1 is not } if s1.isPriority == s2.isPriority { return s1.ordering < s2.ordering //if both save the same priority, then return depending on the ordering value } return false})
The sorted array:
true - 10true - 10true - 12true - 12true - 19true - 29false - 16false - 17false - 17false - 17false - 18
Another a bit shorter solution:
let sorted = array.sorted { t1, t2 in if t1.isPriority == t2.isPriority { return t1.ordering < t2.ordering } return t1.isPriority && !t2.isPriority }