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 выдает ошибку в этих строках, и я не могу понять проблему.

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

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

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


person AfterCoder    schedule 12.08.2016    source источник


Ответы (2)


Прежде всего, ни 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)
person vadian    schedule 13.08.2016

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

person DerrickHo328    schedule 13.08.2016