根据变量筛选Any的数组

时间:2017-06-05 17:03:29

标签: swift filter anyobject

我在该数组中有一个Any类型的数组,有两种不同的类型,PersonSportsMan这两种类型都有一个名为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!,我感到有些不确定。这是解决这个问题的好方法,还是用于此的任何内置函数?

1 个答案:

答案 0 :(得分:2)

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

protocol Rankable {
    var rank: Int { get }
}

然后将您的数组变为[Rankable](a.k.a。Array<Rankable>)而不是[Any],并将其排序为:

self.persons.sort{ $0.rank < $1.rank }