16

私は Swift で時計アプリに取り組んでおり、Xcode 6.3.2 では次のコードがビルドされ、正常に実行されます。

// Get current time
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond | .CalendarUnitNanosecond, fromDate: date)
let hour = components.hour % 12
let minute = components.minute
let second = components.second
let nanosecond = components.nanosecond

ただし、同じプロジェクトを Xcode 7.0 ベータ版にロードして何も変更しないと、calendar.components 行でエラーが発生します。

Could not find member 'CalendarUnitHour'

私はドキュメントを見てきましたが、すべての NSCalendarUnit 定数は廃止されています (iOS 8.0 ではそう書かれています)。

他の NSCalendarUnit オートコンプリート値を試してみましたが、動作するコードを生成するものはなく、おそらくこれが新しいため、オンラインで最近の例を見つけることができません。

これを行うための新しい正しい方法を知っている人はいますか?

4

2 に答える 2

32

スイフト2

名前NSCalendarUnitは Swift 2 で変更されました。

また、次のように、これらの引数を OptionSet で渡す必要があります。

let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date)

スイフト3

Swift API Design Guidelinesに従って、多くのことが変更されました。

更新された構文:

let date = Date()
let calendar = Calendar.current()
let components = calendar.components([.hour, .minute, .second, .nanosecond], from: date)

スイフト4

Calendar.currentはプロパティになり、.componentsに名前が変更されました.dateComponents。それ以外は Swift 3 と同じです。

let calendar = Calendar.current
let components = calendar.dateComponents([.hour, .minute, .second, .nanosecond], from: date)
于 2015-06-12T08:29:22.813 に答える
1

それらは現在、新しいプロトコルです。OptionSetType

https://developer.apple.com/library/prerelease/mac/documentation/Swift/Reference/Swift_OptionSetType_Protocol/index.html

于 2015-10-12T10:42:48.900 に答える