ウォッチプロジェクトをSwiftに実装しましたが、Xcode 8が原因でSwift 3に移行しています。Xcode8でソースコードを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はこれらの行でエラーを出し、問題を理解できません。
エラー:コンテキストタイプ 'Calendar'は配列リテラルでは使用できません
エラー:引数ラベル '(identifier :)'は使用可能なオーバーロードと一致しません
エラー:タイプ 'Calendar'の値を予期される引数タイプ 'NSCalendar.Unit'に変換できません
まず、NSCalendarUnit
in Swift 2もCalendar.Component
in 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)
UnitFlagsのタイプをSetに変更します