この配列にはAny
の配列があり、Person
とSportsMan
の2種類の配列があり、両方ともrank
という値があります。ランクに基づいて配列を並べ替える必要があります。ここでは、私は今日それを行っているし、それがどのように動作するかです:変数の基になるAnyのフィルタ配列
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!
で!
のビットがわからない感じ。これを解決するには良い方法ですか、それともこれを使うために組み込み関数ですか?
良い方法: 'Person'と' SportsMan'は、共通の基本クラスを持たせます/プロトコルには 'rank'プロパティがあります。そして '[Any]'ではなく '[YourBaseClass]'を使います。 – luk2302
なぜAnyObject経由でキャストしていますか? 'Person'と' SportsMan'が共通の機能を持っているなら、プロトコルを使います(そしてそのプロトコルの配列を持っています)。 – Hamish
@ luk2302私はあなたが言ったことを続けるでしょう、プロトコルは確かにうまくいくでしょう。 – gwinyai