2016-06-04 2 views
2

결과가 NSCalendar.startOfDayForDate(date:)과 같도록 NSDate 객체를 변경할 수 있습니까? 그 방법은 아이폰 OS 8 및 최신 만 사용할 수 있습니다,하지만 난 두 가지 방법에 아이폰 OS 7NSCalendar.startOfDayForDate (date :) 반환 값이 아닌 선택형 인 iOS 7에 해당

나는 보았다 작동 뭔가를 찾고 있어요 : 여기에 설명 된대로

  • NSCalendar.dateFromComponents(comps:) : NSDate beginning of day and end of day합니다. 예를 들어,이 같은, 즉 stringFromDate(date:)로서,있는 NSDate 객체로 다시 변환 한 후, 시간이없는 문자열에있는 NSDate 객체를 변환하여

    class func startOfDay(date: NSDate, calendar: NSCalendar) -> NSDate { 
        if #available(iOS 8, *) { 
        return calendar.startOfDayForDate(date) 
        } else { 
        let dateComponents = calendar.components([.Year, .Month, .Day], fromDate: date) 
        return calendar.dateFromComponents(dateComponents)! 
        } 
    } 
    
  • NSDateFormatter.dateFromString(string:).

두 방법의 문제점은 선택 사항 인 NSDate를 반환한다는 점입니다. 나는 이것을 암묵적으로 unwrap하는 것을 꺼려하고 있으며, 나는이 메소드가 호출되는 메소드의 리턴 타입을 변경하는 것을 피하려고한다.

답변

2

calendar.components() 메서드는 이론적으로 2000-02-30과 같은 유효한 날짜를 만들지 않는 구성 요소를 입력 할 수 있기 때문에 선택 사항을 반환한다고 생각합니다. 귀하의 경우처럼, 구성 요소가 이미 유효한 날짜에서 온다면, 나는 암시 적으로 옵션의 포장을 푸는 것을 꺼려하지 않을 것입니다.

+0

나는 이것에 대해 조금 더 생각했다. 초보자 인 경우 암시 적으로 래핑되지 않은 옵션을 언제 받아 들일 수 있는지를 쉽게 알 수 없습니다. 나는 이것이 올바른 접근법이 될지 확신하지 못했다. 왜냐하면 그 방법이 무엇을 반환하지 않을지 알 수 없기 때문이다. 지금 당장 당신의 제안을 따를 것입니다. – Eitot