16

I implemented my watch project in Swift and now I am migrating to Swift 3 because of Xcode 8. I let Xcode 8 change the source code to Swift 3. However, there are errors in the code and I can not figure it out.

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 gives error in these lines and I can not understand the problem.

ERROR: Contextual type ' Calendar' cannot be used with array literal

ERROR: Argument labels '(identifier:)' do not match any available overloads

ERROR: Cannot convert value of type 'Calendar' to expected argument type 'NSCalendar.Unit'

Marcus Leon
  • 53,069
  • 115
  • 287
  • 420
AfterCoder
  • 721
  • 2
  • 6
  • 21

2 Answers2

36

First of all, neither NSCalendarUnit in Swift 2 nor Calendar.Component in Swift 3 contain the components firstWeekday and monthSymbols.

In Swift 3 the equivalent of your code is

let unitFlags = Set<Calendar.Component>([.hour, .year, .minute])
var calendar = Calendar.current
calendar.timeZone = TimeZone(identifier: "UTC")!
let components = calendar.dateComponents(unitFlags, from: reservationDate)
vadian
  • 253,546
  • 28
  • 306
  • 323
0

Change the type of unitFlags to Set

DerrickHo328
  • 4,404
  • 6
  • 26
  • 49