NSCalendarUnit标志用于设置所有标志

Chr*_*ord 5 nsdate nscalendar nsdatecomponents swift

下面将创建一个NSDateComponents包含对象dayweekday而不是hour:

var today = NSDate()
var gregorian = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var flags: NSCalendarUnit = .DayCalendarUnit | .WeekdayCalendarUnit
var components = gregorian.components(flags, fromDate: today)

// valid
components.day
components.weekday
// invalid
components.hour
Run Code Online (Sandbox Code Playgroud)

为了拥有hour,我必须|- .HourCalendarUnit就像这样:

flags = flags | .HourCalendarUnit
Run Code Online (Sandbox Code Playgroud)

是否有标志来指定所有标志?或者我只需要手动将|它们全部放入,如果我想要NSDateComponents全部拥有它们?

或者,理想情况下,我只想说today.hour不用就可以NSDateComponents了.这样的课程存在吗?

Mar*_*n R 10

NSCalendarUnit可以使用a初始化UInt,因此这为您提供了所有可能的组件:

var today = NSDate()
var gregorian = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var flags = NSCalendarUnit(UInt.max)
var components = gregorian.components(flags, fromDate: today)
Run Code Online (Sandbox Code Playgroud)

一个today.hour方法不存在,因为计算不可能不知道时区使用的转换来完成.

Swift 2更新:

let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let flags = NSCalendarUnit(rawValue: UInt.max)
Run Code Online (Sandbox Code Playgroud)