2016-09-19 69 views
9

所以我刚刚更新到Xcode中8和转换我的雨燕2.3的代码斯威夫特3,和斯威夫特3只全部转换NSDateFoundation.Date的NSDate从雨燕2.3,从斯威夫特3转换日期

而且我有一个extensionNSDate,现在被称为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

我怎样才能使这项工作?

+3

'rangeOfUnit'是Swift 3中的'dateInterval',参见http://stackoverflow.com/a/39527482/1187415。 –

+0

你是对的Martin R,谢谢。 –

回答

6

那么,这种转换是不迁移;-)

最好的作品这是雨燕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参数似乎是强制性的,即使它不是用过的。