基于变量过滤 Any 数组

Filter array of Any based on variable

我有一个类型为 Any 的数组,在该数组中有两种不同的类型,PersonSportsMan 这两种类型都有一个名为 rank 的值。我想根据排名对我的数组进行排序。这是我今天的做法并且有效:

self.persons.sort {
    let a = ([=10=] as AnyObject) as? Person
    let b = ([=10=] as AnyObject) as? SportsMan
    let l = a?.rank ?? b?.rank

    let c = ( as AnyObject) as? Person
    let d = ( as AnyObject) as? SportsMan
    let r = c?.rank ?? d?.rank
    return l! < r!
}

由于 l! < r! 中的 !,我有点不确定。这是解决此问题的好方法还是用于此的任何内置函数?

制定协议如Rankable,并使PersonSportsMan符合。

protocol Rankable {
    var rank: Int { get }
}

然后将你的数组变成 [Rankable] (a.k.a. Array<Rankable>) 而不是 [Any],并像这样排序:

self.persons.sort{ [=11=].rank < .rank }