2016-09-20 1 views
11

유형이 Date 인 구성원이있는 배열이 있는데 전체 배열을 Date으로 정렬하려고하는데 올바르게 정렬되지 않습니다. 이것은 내가 사용하고있는 코드입니다. 배열의 이름은 alarms이고 구성원 유형 이름은 Date입니다. time입니다.(Swift 3) 신속한 3 단계에서 Date를 사용하여 클래스 개체의 배열을 정렬하려고합니까?

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

나는 그냥 제대로 작동하지 않으며, 나는 for 루프의 모든 값을 인쇄하여 테스트있어 그것을 정렬 할 때마다.

누군가이 구문에 대한 도움을 줄 수 있습니까?

+0

'날짜'에는 '시간'속성이 없습니다. 이것은 어디서 오는 것입니까? –

+0

@TomHarrington -'time'은 그의 알람 유형의'Date' 속성의 이름이라고 생각합니다. – Rob

+0

예 톰, 고마워요! – Jolaroux

답변

19

compareNSDate입니다. 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