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 刚刚转换了所有 NSDate
到 Foundation.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
参数似乎是强制性的,即使它没有被使用。
所以我刚刚更新到 Xcode 8 并将我的 Swift 2.3 代码转换为 Swift 3,而 Swift 3 刚刚转换了所有 NSDate
到 Foundation.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
参数似乎是强制性的,即使它没有被使用。