2015-06-12 10 views
13

Pracuję nad aplikacją zegara w Swift i przy Xcode 6.3.2 następujący kod buduje i działa dobrze.Różnice w składni NSDateComponents?

// 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 

Jednakże gdy załadować tego samego projektu w Xcode 7.0 beta i nie wprowadzi zmian w ogóle, pojawia się błąd na linii calendar.components.

Could not find member 'CalendarUnitHour' 

Szukałem w dokumentacji i wszystkich stałych NSCalendarUnit są nieaktualne (w iOS 8.0 jest napisane), ale opis metoda dla metody elementów nadal mówi do nich korzystać.

Grałem około z innymi autouzupełnianie wartości NSCalendarUnit ale żaden produkować kod działa i nie mogę znaleźć żadnych nowych przykładów w internecie, być może dlatego, że to jest nowy.

Ktoś wie, nowy prawidłowy sposób to zrobić?

Odpowiedz

32

Swift 2

The NSCalendarUnit nazwy zostały zmienione w Swift 2.

Również teraz musimy przekazać te argumenty w OptionSet, tak:

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

Swift 3

Wiele rzeczy się zmieniło, accor ding do Swift API Design Guidelines.

aktualizowane składnia:

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

Swift 4

Calendar.current jest obecnie własnością i .components została zmieniona na .dateComponents. W przeciwnym razie jest taki sam jak w Swift 3.

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

Dzięki! To doprowadzało mnie do szału. Mój kod jest teraz w 100% czysty. :-) – zkarj

+1

Kolejna śmieszna zmiana w żaden sposób zrozumieć to oprócz znalezienia ten SO pytanie. Dzięki Apple! (sarkazm). Dzięki Eric! (nie sarkazm). – lespommes

+0

Ze względu na zmiany nazw w Swift 2, to daje mi błąd „typ wyrażenia jest ambigous bez dalszych kontekście”. –