2016-09-06 3 views
6

나는 dateByAddingComponents:toDate:options:dateByAddingUnit:value:toDate:options:을 사용하고 옵션 바인딩을 사용하여 날짜를 가져 왔습니다. 이처럼 :dateByAddingComponents : toDate : options는 언제 nil을 반환합니까?

결과 :

oneMonthComponent 나는 그것에 대해 읽을 때 1

로 설정 달의 값으로 단지 NSDateComponent입니다

guard let startOfNextMonth = calendar.dateByAddingComponents(oneMonthComponent, toDate: startOfThisMonth, options: []) else { 
    return nil 
} 

는 문서에 둘 다 무언가 같이 말한다 날짜가 수신기의 정의 된 범위를 벗어나거나 계산을 수행 할 수없는 경우에는 nil입니다.

그리고 정확히 언제 발생했는지 궁금합니다. 만약 내가 한 달을 데이트에 추가한다면, 그럴 수있는 방법이 없을까? 일부 단위를 추가하는 것이 의미가 없으면 다른 달력 시스템에서 약간의 차이가 있기 때문입니까?

나는 주위를 검색하여 nil을 리턴 할 인스턴스를 찾을 수 없습니다.

위의 코드가 0이 될 수있는 것이 있습니까? 구성 요소를 추가하는 것이 0이 될 수있는 예제는 무엇입니까?

+0

참고. –

답변

3

실제로 날짜에 한 달 추가하는 경우 실제로는 nil 값이 표시되지 않습니다.

일부 퇴보 상황에서는 nil 값을 얻을 수 있습니다. 예를 들어, 이슬람 달력을 사용하고 -9,999,999 년을 추가하면 nil이됩니다 (다른 캘린더에서는 기이하게도). 이러한 극단적 인 상황에서 다른 캘린더는 종종 오버플로/포장됩니다 (비록 당신이 인용 한 문서를 보면 nil을 반환 할 것으로 예상되지만).

개인적으로, 나는 현재 거의 상황이 의심되어 nil 값을 얻지 못할 것이라고 생각합니다. 나는 모든 종류의 극단적 인 가치를 시험해 보았고 이슬람 달력 만이 nil 값을 얻는 데 성공했다. 그렇다고해서 애플이 장래에 더 강력한 날짜 검증 논리를 추가하지 않을 수도있다. 이 질문에 확실하게 대답하려면 Apple (또는 NSCalendar의 소스 코드 참조)의 상담을 받아야 할 것입니다.

그래서, 결론, 당신의 guard 문을 유지하는 게 좋을 것,하지만 실제 시나리오에서 실패 할 확률이 낮다. `스위프트> = 3, 방법 이름 (님 : 옵션 byAdding) '날짜인지