Подтвердить что ты не робот

Различия в синтаксисе NSDateComponents?

Я работаю над часовым приложением в Swift и с Xcode 6.3.2 следующий код строит и работает просто отлично.

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

Однако, когда я загружаю тот же проект в Xcode 7.0 beta и не изменяю никаких изменений, я получаю сообщение об ошибке в строке calendar.components.

Could not find member 'CalendarUnitHour'

Я просмотрел документацию, и все константы NSCalendarUnit устарели (в iOS 8.0, которые она говорит), но описание метода для метода компонентов все еще говорит, чтобы использовать их.

Я играл с другими значениями автозаполнения NSCalendarUnit, но ни один из них не создает рабочий код, и я не могу найти последние примеры в Интернете, возможно, потому что это совершенно новый.

Кто-нибудь знает новый правильный способ сделать это?

4b9b3361

Ответ 1

Swift 2

Имена NSCalendarUnit изменены в Swift 2.

Кроме того, теперь мы должны передать эти аргументы в OptionSet, например:

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

Swift 3

Многие вещи изменились в соответствии с Swift API Design Guidelines.

Обновлен синтаксис:

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

Swift 4

Calendar.current теперь является свойством, а .components переименовано в .dateComponents. В противном случае это то же самое, что и в Swift 3.

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