web-dev-qa-db-ja.com

Xcode 8ベータ4:Calendar.UnitとCalendar.Component

この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.UnitCalendar.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を生成します

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

26
Gerd Castan

Xcode 8ベータ4に付属のSwiftバージョンでは、componentsdateComponentsに名前が変更されました。

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

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

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

29
ayaio

Swift 3およびSwift 4:

この例では、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)
28