【问题标题】:NSCalendar.startOfDayForDate(date:) equivalent for iOS 7 with non-optional return typeNSCalendar.startOfDayForDate(date:) 等效于 iOS 7,具有非可选返回类型
【发布时间】:2016-10-04 16:42:03
【问题描述】:

是否可以更改 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。我不愿意隐含地解开它,我宁愿避免更改调用这些方法的方法的返回类型。

【问题讨论】:

    标签: swift ios7 nsdate nscalendar nsdatecomponents


    【解决方案1】:

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

    【讨论】:

    • 我想了更多。作为初学者,很难判断隐式展开的可选项何时可以接受。我不确定这是否是正确的方法,因为我看不出是什么导致该方法返回 nil。我现在会听从你的建议。
    猜你喜欢
    • 2020-09-23
    • 2019-06-14
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    相关资源
    最近更新 更多