web-dev-qa-db-ja.com

Xcode 8およびSwift 3 NSCalendar

ウォッチプロジェクトを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'に変換できません

16
TheZipper

まず、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)
34
vadian

UnitFlagsのタイプをSetに変更します

0
DerrickHo328