如果明确请求组件,日期组件可以为零吗?

Can date components be nil if explicity requesting the component?

我想知道是否可以在这里强制解包:

let components = calendar.dateComponents([.day], from: from, to: to)

return components.day!

是的,那是完全安全的。 DateComponents 的所有组件属性(例如 daymonth 等)都是 Optional,因为您可以创建仅包含一个子集的 DateComponents 实例组件。

但是,Date 对象始终包含所有 DateComponents,因此当您使用 Calendar.dateComponentsDate 请求特定组件的值时,可以保证包含请求的组件。所以强制展开该组件是安全的。

另一方面,如果您尝试访问 DateComponents 的组件,而您没有使用 Calendar.dateComponents 请求,那将是 nil。请参阅下面的示例。

let components = Calendar.current.dateComponents([.day], from: Date())
components.day // 13
components.month // nil