I think there's an API change here that isn't acknowledged, I was just
trying to figure out what happened, and how I can investigate them in the
Maybe the answer is I can get lots of detail about Swift core changes, but
what Apple does with the standard library is a little less transparent.
let start = calendar.components([.hour, .minute], from:
from = Int64(( (start.hour ?? 0) * 3600 + (start.minute ?? 0) * 60) *
There are some minor signature changes accounted for by the lowercase enum
and the param naming changes, that's expected.
Component usage now requires the ?? operator but didn't used to. The return
value of calendar.components is a tuple with optional parts. In Swift 2.3,
this wasn't so.
This could be a knock on effect from
which talks about dropping conformance to NilLiteralConvertible, except
NSUndefinedDateComponent isn't mentioned as one of them and the topic is
It also could be a consequence of
-- My functions can no longer return implicitly unwrapped optionals and
perhaps that's how calendar.components was implemented.
On Wed, Jun 22, 2016 at 4:13 PM, Brent Royal-Gordon <firstname.lastname@example.org> wrote:
> I'm now trying to find why, along with changing from NSCalendar to
Calendar, the .components are optional. I can't find any mention of it, and
I'm not sure in what situation minutes or hours could be nil and how I
should guard against it.
In Objective-C, these properties can be `NSUndefinedDateComponent`. In
Swift, that's represented as `nil` instead.
Essentially, this happens when you don't request a particular date
component—for instance, when you say `gregorian.components([.year, .month,
.day], fromDate: date)`, `hours` and `minutes` will be `nil`. In
Objective-C, they would have been `NSUndefinedDateComponent`.