2017-05-18 2 views
0

Ich arbeite an einem Stück Code, der Daten manipuliert. Instanzen der Klasse DateFormatter haben eine Eigenschaft namens generateCalendarDates. Dies ist ein boolescher Wert. Ich glaube, dass er verwendet wird, um ein Datum basierend auf dem aktuellen Kalender zu erstellen. Wenn ich jedoch versuche, diese Eigenschaft in Xcode zuzuordnen oder zu prüfen, erhalte ich eine Beschreibung der Eigenschaft aus meiner Code-Vervollständigung.Warum kann ich die DateFormatter-Eigenschaft generateCalendarDates nicht verwenden?

enter image description here

Es sagt mir eigentlich nicht diese Eigenschaft zu verwenden. Ich habe mich gefragt, warum das so ist. Weil ich eigentlich darüber nachgedacht habe, es zu benutzen.

+1

NSCalendarDate wird nicht mehr unterstützt. Benutze es einfach nicht. Warum solltest du es brauchen? –

+0

Oh ich verstehe. Ich hätte gedacht, dass es einfach nicht als Option erscheinen würde. –

Antwort

1

Die Eigenschaft generatesCalendarDates teilt NSDateFormatter mit, Instanzen von NSCalendarDate anstelle von NSDate zu erstellen, wenn ein Datum analysiert wird.

In Swift ist es nicht verfügbar, da NSCalendarDate veraltet ist und die meisten veralteten APIs in Swift nicht verfügbar sind.

Was war also NSCalendarDate? Es war eine Unterklasse von NSDate, die eine timeZone-Eigenschaft hinzufügte und über Methoden zum Ausführen von Berechnungen mit dem Gregorianischen Kalender verfügte.

Warum wurde es veraltet? Weil Apple die Klasse NSCalendar in Mac OS X 10.4 (Tiger) eingeführt hat. Sie können Instanzen von NSCalendar verwenden, um Berechnungen mit mehreren verschiedenen Kalendern durchzuführen, einschließlich des Gregorianischen. NSCalendar hat seine eigene timeZone Eigenschaft, wo es Sinn macht; NSDate Objekte sind immer zeitzonenunabhängig.

DateFormatter analysiert (und formatiert) Daten unter Verwendung seiner calendar Eigenschaft. Standardmäßig ist diese calendar -Eigenschaft auf Calendar.current festgelegt. Dies ist der Systemkalender. Der Benutzer kann den Systemkalender unter Einstellungen> Allgemein> Sprache & Region> Kalender auswählen.

Sie können die Eigenschaft calendar explizit auf Gregorian setzen, wenn Sie möchten: dateFormatter.calendar = Calendar(identifier: .gregorian). Aber ich würde es nicht empfehlen. Wenn der Benutzer einen anderen Kalender ausgewählt hat, möchten Sie Gregorian wirklich verwenden?

Verwandte Themen