swift - NSCalendar.startOfDayForDate(日期 :) equivalent for iOS 7 with non-optional return type

标签 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。我不愿意隐式地解开它,并且我宁愿避免更改调用这些方法的方法的返回类型。

最佳答案

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

关于swift - NSCalendar.startOfDayForDate(日期 :) equivalent for iOS 7 with non-optional return type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37634297/

相关文章:

arrays - 检查数组是否包含 Swift 4 中的元素

ios - 快速实现查询

ios - 以表单大小显示弹出 View

macos - 在 Cocoa 中安排方法调用的方法?

swift - 在以下示例中如何计算日差

ios - 如何在ios swift中从Parse中按降序对NSDate进行排序

ios - Activity 指示器 webView Xcode 5 IOS 7

ios7 - UICollectionView + iOS 7/Xcode 5 = 断言失败

ios - 如何在 Xcode 6.0 Beta 中运行 iOS 7.1 模拟器?

ios - 即使计时器在视觉上已经停止,NSTimer 也会继续计数