このSwift 3コードはXCode 8ベータ3まで機能しました:
let calendar = Calendar.current
let anchorComponents = calendar.components([Calendar.Unit.day, Calendar.Unit.month, Calendar.Unit.year, Calendar.Unit.hour], from: self)
Xcode 8ベータ4では、Calendar.Unit
はCalendar.Component
に名前が変更されたようです。
今、このコード
let calendar = Calendar.current
let anchorComponents = calendar.components([Calendar.Component.day, Calendar.Component.month, Calendar.Component.year, Calendar.Component.hour], from: self)
コンパイラエラーcannot convert value of type Calendar.Component to NSCalendar.Unit
を生成します
私は何か間違ったことをしていますか、これはバグですか?
Xcode 8ベータ4に付属のSwiftバージョンでは、components
はdateComponents
に名前が変更されました。
注:呼び出しを簡単にするために、Calendar.Component
プレフィックスを省略できます。
let anchorComponents = calendar.dateComponents([.day, .month, .year, .hour], from: self)
あなたが受け取ったエラーメッセージは少し誤解を招くものです、私はコンパイラが型推論に苦労していたと思います。
この例では、unitFlagsの開始日と終了日を準備することもできます。
let calendar = NSCalendar.current
let unitFlags = Set<Calendar.Component>([.day, .month, .year, .hour])
let anchorComponents = calendar.dateComponents(unitFlags, from: startDate as Date, to: endDate as Date)