Xcode 8 beta 4: Calendar.Unit против 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
Я делаю что-то не так или это ошибка?
2 ответа
Решение
В версии Swift, поставляемой с Xcode 8 beta 4, components
был переименован в dateComponents
,
Примечание: чтобы сделать вызов проще, вы можете опустить Calendar.Component
префикс.
let anchorComponents = calendar.dateComponents([.day, .month, .year, .hour], from: self)
Полученное вами сообщение об ошибке немного вводит в заблуждение, я думаю, компилятор боролся с выводом типа.
Свифт 3 и Свифт 4:
В этом примере вы также можете подготовить свои unitFlags с / до даты:
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)