26

この 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 beta 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

私は何か間違ったことをしていますか、それともこれはバグですか?

4

2 に答える 2

31

Xcode 8 beta 4 に同梱されている Swift バージョンでは、componentsは に名前が変更されましたdateComponents

注: 呼び出しを簡単にするために、Calendar.Componentプレフィックスを省略できます。

let anchorComponents = calendar.dateComponents([.day, .month, .year, .hour], from: self)

あなたが得たエラーメッセージは少し誤解を招くものです.コンパイラは型推論に苦労していたと思います.

于 2016-08-02T12:28:23.733 に答える
31

スウィフト 3 とスウィフト 4:

この例では、unitFlags from/to date を準備することもできます:

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)
于 2016-09-21T07:49:51.930 に答える