2016-09-20 12 views
11

タイプがDateのメンバを持つオブジェクトの配列があり、配列全体をDateでソートしようとしていますが、正しくソートされていません。 これは私が使用しているコードです。配列の名前はalarmsであり、メンバータイプの名前はDateで、timeです。(Swift 3)クラスオブジェクトの配列をSwift 3で日付別にソートしようとしていますか?

alarms.sort(by: { $0.time.compare($1.time) == .orderedAscending }) 

とするたびに、私はそれだけで正常に動作しない、と私はforループ内のすべての値を印刷して、それをテストしています、それを並べ替えます。

誰かがこの構文を教えてくれますか?

+0

'Date'には' time'プロパティがありません。これはどこから来たのですか? –

+0

@TomHarrington - 私は 'time'は彼のアラームタイプの' Date'プロパティの名前だと思います。 – Rob

+0

はい、トム、ありがとう! – Jolaroux

答えて

19

compareは、NSDateの機能です。 Dateでは、<演算子を使用することができます。たとえば:

alarms.sort { $0.time < $1.time } 

compareはしかし、あまりにも、動作するはず、と述べました。おそらくあなたのtimeの値には異なる日付がついていると思います。あなたは時間部分だけを見ているかもしれませんが、Dateオブジェクトを比較すると、日付と時刻の両方が考慮されます。あなたが唯一の時間の部分を見たい場合は、例えば、time間の時間間隔と一日のスタートを見て、ということのいくつかの方法があります。

let calendar = Calendar.current 

alarms.sort { 
    let elapsed0 = $0.time.timeIntervalSince(calendar.startOfDay(for: $0.time)) 
    let elapsed1 = $1.time.timeIntervalSince(calendar.startOfDay(for: $1.time)) 
    return elapsed0 < elapsed1 
} 

を行うための方法はたくさんあります。これは、しかし、うまくいけば、このアイデアを示しています。

+0

私は彼らが異なる日付を持っていると思います!そして、その盗んでくれてありがとう、私はそれを試して、それがどのようになったかをあなたに知らせます。 – Jolaroux

+0

Calendar.startOfDayの部分でエラーが発生していますが、これはエラーです。 'Calendar'タイプのインスタンスメンバー 'startOfDay'の使用。代わりに 'カレンダー'タイプの値を使用することを意味しましたか? – Jolaroux

+0

それは今完璧に動作します! +1ありがとう:) – Jolaroux

関連する問題