我在该数组中有一个Any
类型的数组,有两种不同的类型,Person
和SportsMan
这两种类型都有一个名为rank
的值。我想根据排名对数组进行排序。我今天就是这样做的,它起作用了:
self.persons.sort {
let a = ($0 as AnyObject) as? Person
let b = ($0 as AnyObject) as? SportsMan
let l = a?.rank ?? b?.rank
let c = ($1 as AnyObject) as? Person
let d = ($1 as AnyObject) as? SportsMan
let r = c?.rank ?? d?.rank
return l! < r!
}
由于!
中的l! < r!
,我感到有些不确定。这是解决这个问题的好方法,还是用于此的任何内置函数?
答案 0 :(得分:2)
制定Rankable
等协议,并使Person
和SportsMan
符合该协议。
protocol Rankable {
var rank: Int { get }
}
然后将您的数组变为[Rankable]
(a.k.a。Array<Rankable>
)而不是[Any]
,并将其排序为:
self.persons.sort{ $0.rank < $1.rank }