Вы должны оба ваших класса соответствовать протоколу, который объявляет createdDate
.Введите orderMOs
как таковой.чем вам не понадобятся условные приведения.
import Foundation
class A {
init(created createdDate: Date) {
self.createdDate = createdDate
}
let createdDate: Date
}
class B {
init(created createdDate: Date) {
self.createdDate = createdDate
}
var createdDate: Date
}
protocol Created {
var createdDate: Date { get }
}
extension A: Created {}
extension B: Created {}
func createDate(year: Int, month: Int, day: Int) -> Date {
var comps = DateComponents()
comps.year = year
comps.month = month
comps.day = day
return Calendar.current.date(from: comps)!
}
var objects = [Created]()
objects.append(A(created: createDate(year: 2018, month: 2, day: 1)))
objects.append(B(created: createDate(year: 2017, month: 12, day: 1)))
objects.append(B(created: createDate(year: 2018, month: 5, day: 18)))
objects.append(A(created: Date()))
Сортируйте как
objects.sort { (c1, c2) -> Bool in
return c1.createdDate < c2.createdDate
}
Еще одна вещь, которую вы можете сделать, это использовать оператор switch с шаблоном соответствие , чтобы немного очистить код.