2017-05-23 10 views
-1

これは、以前のバージョンのswiftで動作していたコードです。これは、と定義NSDate拡張機能が動作しない

extension NSDate { 
struct Date { 
    static let formatterISO8601: DateFormatter = { 
     let formatter = DateFormatter() 
     formatter.calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601)! as Calendar 
     formatter.locale = NSLocale.current 
     formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone! 
     formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX" 
     return formatter 
    }() 
} 


var formattedISO8601: String { return Date.formatterISO8601.string(from: self as Date) } 

}

+1

を試してみてください。 Swift 3の構造体 'Date'(これは' Date'構造体と衝突するためエラーになります)、 'Calendar'、' Locale'、 'TimeZone'を使用してください。 – vadian

+0

これは、 'Date'型がすでに存在し、ここに新しい型を宣言していることを除いて、' DateFormatter'の拡張であり、 'Date'ではなく、そうでなければならないようです。また、展開ターゲットに応じて、最新のリリースで導入された 'NSISO8601DateFormatter'クラスを使用することもできます。 – floschliep

答えて

2

問題はスウィフト3に構造が既に存在することである(強制では「NSDate.Date」を入力するタイプ「NSDate」の値を変換できません)今の誤差を与えることですDateという名前です。

だから、あなたの構造体名をMyDateまたはそれ以外のものに変更すれば、すべて行くことができます。新しいDateCalendarTimeZoneの代わりNSDateNSCalendarNSTimeZoneを使用している場合

はまた、それは良いです。

Dateこのようにしてください。

extension Date { 

    static let formatterISO8601: DateFormatter = { 
     let formatter = DateFormatter() 
     formatter.calendar = Calendar(identifier: .iso8601) 
     formatter.locale = Locale.current 
     formatter.timeZone = TimeZone(secondsFromGMT: 0) 
     formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX" 
     return formatter 
    }() 

    var formattedISO8601: String { return Date.formatterISO8601.string(from: self) } 
} 
+0

それはあなたのために働くのですか? –

1

NSDateとDateの両方の拡張機能。

extension Date { 
    static let formatterISO8601: DateFormatter = { 
     let formatter = DateFormatter() 
     formatter.calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601)! as Calendar 
     formatter.locale = NSLocale.current 
     formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone! 
     formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX" 
     return formatter 
    }() 

    func formattedISO8601() -> String { 
     return Date.formatterISO8601.string(from: self) 
    } 
} 

extension NSDate { 
    func formattedISO8601() -> String { 
     return Date.formatterISO8601.string(from: self as Date) 
    } 
} 

そして、このようにそれを使用して...

// NSDate 
let nsdate = NSDate.init() 
let formattedDate = nsdate.formattedISO8601() 

// Date 
let date = Date.init() 
let formattedNsDate = date.formattedISO8601() 
0

はスウィフト3、コードが混乱しているに関しては、この

extension Date { 

    static let formatterISO8601: DateFormatter = { 
     let formatter = DateFormatter() 
     formatter.calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601)! as Calendar 
     formatter.locale = NSLocale.current 
     formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone! 
     formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX" 
     return formatter 
    }() 



    var formattedISO8601: String { return Date.formatterISO8601.string(from: self) 
    } 
} 
+0

なぜですか?スクリーンショットを追加するか、エラーを伝えてください。 – SuryaKantSharma

+0

それは働いていますが、既に 'Date'構造体があり、別の構造体を作成しています –

+0

更新してください。 – SuryaKantSharma

関連する問題