NSDate 从 Swift 2.3 到日期从 Swift 3 转换

NSDate from Swift 2.3 to Date from Swift 3 Conversion

所以我刚刚更新到 Xcode 8 并将我的 Swift 2.3 代码转换为 Swift 3,而 Swift 3 刚刚转换了所有 NSDateFoundation.Date

我有一个 extension 用于 NSDate,现在称为 Foundation.Date,它看起来像这样:

extension NSDate
{
  var firstDayOfTheMonth:NSDate
  {
     var date: NSDate?
     NSCalendar.currentCalendar().rangeOfUnit(.Month, startDate:&date , interval: nil, forDate: self)
     return date!
  }
}

和Swift 3 将其转换为:

extension Foundation.Date
{
  var firstDayOfTheMonth:Foundation.Date
  {
     var date: Foundation.Date?
    (Calendar.current as NSCalendar).range(of: .month, start:&date , interval: nil, for: self)
     return date!
  }
}

这里的问题是 Xcode 建议我这样做:Cannot convert value of type 'Date?' to expected argument type 'NSDate?' 并删除 &.

所以,我更改了它,函数现在看起来像这样:

extension Foundation.Date
{
  var firstDayOfTheMonth:Foundation.Date
  {
     var date: Foundation.Date?
    (Calendar.current as NSCalendar).range(of: .month, start:date as NSDate?, interval: nil, for: self)
     return date!
  }
}

但现在 Xcode 说 Cannot convert value of type 'Date?' to type 'NSDate?' in coercion

我怎样才能完成这项工作?

好吧,这个转换并不是迁移器的最佳工作 ;-)

这是 Swift 3 等同于您的代码

extension Date
{
  var firstDayOfTheMonth:Date
  {
    var date = Date()
    var interval : TimeInterval = 0
    Calendar.current.dateInterval(of: .month, start: &date, interval: &interval, for: self)
    return date
  }
}

interval参数似乎是强制性的,即使它没有被使用。