Ce code Swift 3 a fonctionné jusqu'à 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)
Dans Xcode 8 beta 4 Calendar.Unit
semble renommé Calendar.Component
.
Maintenant, ce code
let calendar = Calendar.current
let anchorComponents = calendar.components([Calendar.Component.day, Calendar.Component.month, Calendar.Component.year, Calendar.Component.hour], from: self)
produit l'erreur du compilateur cannot convert value of type Calendar.Component to NSCalendar.Unit
Suis-je en train de faire quelque chose de mal ou est-ce un bug?
Dans la version Swift fournie avec Xcode 8 beta 4, components
a été renommé dateComponents
.
Remarque: pour simplifier l'appel, vous pouvez omettre le Calendar.Component
préfixe.
let anchorComponents = calendar.dateComponents([.day, .month, .year, .hour], from: self)
Le message d'erreur que vous avez obtenu est un peu trompeur, je suppose que le compilateur a eu du mal avec l'inférence de type.
Dans cet exemple, vous pouvez également préparer vos unitFlags de/à ce jour:
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)