web-dev-qa-db-fra.com

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

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?

26
Gerd Castan

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.

29
ayaio

Swift 3 et Swift 4:

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)
28
Alessandro Ornano