web-dev-qa-db-de.com

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

Dieser Swift 3 Code funktionierte bis 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)

In Xcode 8 Beta 4 scheint Calendar.Unit In Calendar.Component Umbenannt worden zu sein.

Nun dieser Code

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

erzeugt den Compilerfehler cannot convert value of type Calendar.Component to NSCalendar.Unit

Mache ich etwas falsch oder ist das ein Fehler?

26
Gerd Castan

In der mit Xcode 8 Beta 4 ausgelieferten Swift) - Version wurde components in dateComponents umbenannt.

Hinweis: Um den Aufruf zu vereinfachen, können Sie das Präfix Calendar.Component Weglassen.

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

Die Fehlermeldung, die Sie erhalten haben, ist etwas irreführend. Ich denke, der Compiler hatte Probleme mit der Typinferenz.

29
ayaio

Swift 3 und Swift 4:

In diesem Beispiel könnten Sie auch Ihre unitFlags von/bis Datum vorbereiten:

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