2015-06-12 5 views
13

Ich habe an einer Uhr-App in Swift gearbeitet und mit Xcode 6.3.2 baut der folgende Code auf und läuft gut.Unterschiede in NSDateComponents Syntax?

// Get current time 
let date = NSDate() 
let calendar = NSCalendar.currentCalendar() 
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond | .CalendarUnitNanosecond, fromDate: date) 
let hour = components.hour % 12 
let minute = components.minute 
let second = components.second 
let nanosecond = components.nanosecond 

Allerdings, wenn ich das gleiche Projekt in Xcode laden 7.0 Beta und keinerlei Änderungen machen, bekomme ich einen Fehler auf der calendar.components Linie.

Could not find member 'CalendarUnitHour' 

ich in der Dokumentation geschaut haben und all die NSCalendarUnit Konstanten sind veraltet (in iOS 8.0 heißt es), aber die Beschreibung Verfahren zur Komponenten-Verfahren immer noch sagt, sie zu benutzen.

Ich habe mit anderen AutoComplete-Werten von NSCalendarUnit herumgespielt, aber keiner erzeugt Arbeitscode und ich kann keine aktuellen Beispiele online finden, vielleicht weil dies brandneu ist.

Wer kennt den neuen richtigen Weg?

Antwort

32

Swift 2

Die NSCalendarUnit Namen haben in Swift geändert 2.

Auch jetzt müssen wir diese Argumente in einem OptionSet passieren, wie folgt aus:

let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date) 

Swift 3

Viele Dinge haben sich geändert, accor ding an die Swift API Design Guidelines.

Aktualisierte Syntax:

let date = Date() 
let calendar = Calendar.current() 
let components = calendar.components([.hour, .minute, .second, .nanosecond], from: date) 

Swift 4

Calendar.current ist jetzt eine Eigenschaft, und .components-.dateComponents umbenannt wurde. Ansonsten ist es das gleiche wie in Swift 3.

let calendar = Calendar.current 
let components = calendar.dateComponents([.hour, .minute, .second, .nanosecond], from: date) 
+0

Dank! Es hat mich verrückt gemacht. Mein Code ist jetzt 100% sauber. :-) – zkarj

+1

Eine weitere lächerliche Änderung, bei der es außer der Suche nach dieser SO-Frage nicht möglich ist, sie herauszufinden. Danke Apple! (Sarkasmus). Danke Eric! (nicht Sarkasmus). – lespommes

+0

Aufgrund der Namensänderungen in Swift 2 gab es den Fehler "Art des Ausdrucks ist ambig ohne mehr Kontext". –

Verwandte Themen