Ich schreibe eine Erweiterung für NSDate, die einige fehlgeleitete Initialisierer bietet. Das Endziel besteht darin, eine Datumszeitreihe von einer API zu erhalten und sie in ein NSDate zu analysieren, z.EXC_BAD_ACCESS in NSDate Formatierung Erweiterung
let createdAt = NSDate(apiDateTimeString: "2016-03-29T18:33:49+06:00")
let createdAt = NSDate(apiDateTimeString: "2016-03-29T18:33:49.730+06:00")
Das Datum Zeit Zeichenfolge kann eine von zwei Formate annehmen:
yyyy-MM-dd'T'HH:mm:ssZZZZZ
yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ
Hier ist, was die Erweiterung wie folgt aussieht:
import Foundation
public extension NSDate {
// MARK: Custom Initializers
public convenience init(date: NSDate) {
self.init(timeInterval: 0.0, sinceDate: date)
}
public convenience init?(dateString: String, formatString: String) {
let formatter = NSDateFormatter()
formatter.dateFormat = formatString
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
if let date = formatter.dateFromString(dateString) {
self.init(date: date)
} else {
return nil
}
}
public convenience init?(apiDateTimeString: String?) {
guard let dateString = apiDateTimeString else {
return nil
}
if NSDate(dateString: dateString, formatString: "yyyy-MM-dd'T'HH:mm:ssZZZZZ") != nil {
self.init(dateString: dateString, formatString: "yyyy-MM-dd'T'HH:mm:ssZZZZZ")
} else {
self.init(dateString: dateString, formatString: "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ")
}
}
}
Wenn ich versuche, dies zu verwenden, erhalte ich eine EXC_BAD_ACCESS
unter if NSDate(dateString: dateString, formatString: "yyyy-MM-dd'T'HH:mm:ssZZZZZ") != nil
Jede Hilfe herauszufinden, warum dies nicht funktioniert, wird geschätzt.
EDIT: Ich habe vergessen, hinzuzufügen: das funktionierte mit Swift 2.1, und beendete mit Swift Arbeits 2.2
Das hat es getan. Vielen Dank :) – Jonathan