Подтвердить что ты не робот

Xcode 8 beta 4: Calendar.Unit vs Calendar.Component

Этот код Swift 3 работал до тех пор, пока XCode 8 beta 3:

let calendar = Calendar.current
let anchorComponents = calendar.components([Calendar.Unit.day, Calendar.Unit.month, Calendar.Unit.year, Calendar.Unit.hour], from: self)

В Xcode 8 beta 4 Calendar.Unit представляется переименованным в Calendar.Component.

Теперь этот код

let calendar = Calendar.current
let anchorComponents = calendar.components([Calendar.Component.day, Calendar.Component.month, Calendar.Component.year, Calendar.Component.hour], from: self)

выдает ошибку компилятора cannot convert value of type Calendar.Component to NSCalendar.Unit

Я делаю что-то неправильно или это ошибка?

4b9b3361

Ответ 1

В версии Swift, поставляемой с Xcode 8 beta 4, components был переименован в dateComponents.

Примечание. Чтобы сделать вызов более простым, вы можете опустить префикс Calendar.Component.

let anchorComponents = calendar.dateComponents([.day, .month, .year, .hour], from: self)

Сообщение об ошибке, которое вы получили, немного вводит в заблуждение, я думаю, что компилятор боролся с типом вывода.

Ответ 2

Swift 3 и Swift 4:

В этом примере вы также можете подготовить свои флэшки с/по дате:

let calendar = NSCalendar.current
let unitFlags = Set<Calendar.Component>([.day, .month, .year, .hour])
let anchorComponents = calendar.dateComponents(unitFlags, from: startDate as Date,  to: endDate as Date)