NSCalendar.startOfDayForDate(date :)等效于iOS 7,具有非可选的返回类型

时间:2016-06-04 19:40:13

标签: swift ios7 nsdate nscalendar nsdatecomponents

是否可以更改NSDate对象,使结果等同于NSCalendar.startOfDayForDate(date:)?该方法仅适用于iOS 8及更高版本,但我正在寻找适用于iOS 7的功能。

我看过两种方法:

  • NSCalendar.dateFromComponents(comps:),如下所述:NSDate beginning of day and end of day。例如,像这样:

    class func startOfDay(date: NSDate, calendar: NSCalendar) -> NSDate {
      if #available(iOS 8, *) {
        return calendar.startOfDayForDate(date)
      } else {
        let dateComponents = calendar.components([.Year, .Month, .Day], fromDate: date)
        return calendar.dateFromComponents(dateComponents)!
      }
    }
    
  • NSDateFormatter.dateFromString(string:)通过 stringFromDate(date:),即将NSDate对象转换为没有时间的字符串,然后将其转换回NSDate对象。

这两种方法的问题是它们返回一个可选的NSDate。我不愿意隐式解开这个,我宁愿避免改变调用这些方法的方法的返回类型。

1 个答案:

答案 0 :(得分:2)

我认为calendar.components()方法返回一个可选项,因为理论上你可以输入不创建有效日期的组件,比如2000-02-30。如果,在您的情况下,组件已经来自有效日期,我不会不愿意隐式解包可选项。