NSDate

2016-09-19 5 views
9

だから、僕はただ変換のXcode 8に更新し、スウィフト3、およびスウィフト3に私のスウィフト2.3のコードに変換したすべてのNSDateFoundation.DateNSDate

にそして私はextensionを持っていました

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! 
    } 
} 

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

そしてスウィフト3はこれにそれを変換:NSDateのために、今Foundation.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

Swift 3では 'rangeOfUnit'は' dateInterval'です(例:http://stackoverflow.com/a/39527482/1187415)。 –

+0

あなたは正しいですMartin R、ありがとうございます。 –

答えて

6

さて、この変換は;-)

移行の最高の仕事ではありませんこれはintervalパラメータは、そうでない場合でも必須のようですあなたのコードのスウィフト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 
    } 
} 

です中古。