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

Xcode 8 и Swift 3 NSCalendar

Я реализовал свой проект часов в Swift, и теперь я переношу на Swift 3 из-за Xcode 8. Я разрешаю Xcode 8 изменять исходный код на Swift 3. Однако в коде есть ошибки, и я не могу понять это.

let unitFlags: Calendar = [.hour, .firstWeekday, .monthSymbols, .year, .minute, .firstWeekday]

var calendar = NSCalendar.current
calendar.timeZone = NSTimeZone(identifier: "UTC")!
let components = (calendar as NSCalendar).components(unitFlags, from: reservationDate)

Xcode дает ошибку в этих строках, и я не могу понять проблему.

ОШИБКА: Контекстный тип "Календарь" не может использоваться с литералом массива

ОШИБКА: метки аргументов '(идентификатор:)' не соответствуют никаким доступным Перегрузки

ОШИБКА: невозможно преобразовать значение типа "Календарь" в ожидаемый аргумент type 'NSCalendar.Unit'

4b9b3361

Ответ 1

Прежде всего, ни NSCalendarUnit в Swift 2, ни Calendar.Component в Swift 3 не содержат компонентов firstWeekday и monthSymbols.

В Swift 3 эквивалент вашего кода

let unitFlags = Set<Calendar.Component>([.hour, .year, .minute])
var calendar = Calendar.current
calendar.timeZone = TimeZone(identifier: "UTC")!
let components = calendar.dateComponents(unitFlags, from: reservationDate)

Ответ 2

Измените тип unitFlags на Set