1

我有一个类型的数组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!
}

!由于in ,我感到有点不确定l! < r!。这是解决这个问题的好方法,还是有任何内置函数可以用来解决这个问题?

4

1 回答 1

2

制定一个协议,例如Rankable, 并制定PersonSportsMan遵守它。

protocol Rankable {
    var rank: Int { get }
}

然后将您的数组变成[Rankable](aka Array<Rankable>) 而不是[Any],并像这样对其进行排序:

self.persons.sort{ $0.rank < $1.rank }
于 2017-06-05T17:41:07.590 回答