[ad_1]
I’ve some decoders for various varieties.
On this perform decoders for date are creating.
personal static var __once: () = {
//doable codecs
let formatters = [
"yyyy-MM-dd",
"yyyy-MM-dd'T'HH:mm:ssZZZZZ",
"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ",
"yyyy-MM-dd'T'HH:mm:ss'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SSS",
"yyyy-MM-dd HH:mm:ss"
].map { (format: String) -> DateFormatter in
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = format
formatter.timeZone = TimeZone(secondsFromGMT: 0)
return formatter
}
// Decoder for Date
Decoders.addDecoder(clazz: Date.self) { (supply: AnyObject, occasion: AnyObject?) -> Decoded<Date> in
if let sourceString = supply as? String {
for formatter in formatters {
if let date = formatter.date(from: sourceString) {
return .success(date) //on this state date = 2022-03-26 05:45:00 +0000 (not nil)
}
}
}
...some code
}
Decoder calls right here. It work proper means for an additional varieties, however “date” turns to nil after coming back from decoder perform.
static func decodeOptional<T>(clazz: T.Sort, supply: AnyObject?) -> Decoded<T?> {
if let supply = supply, !(supply is NSNull) {
swap Decoders.decode(clazz: clazz, supply: supply, occasion: nil) { //this perform name decoder for date from above.
case let .success(worth): return .success(worth) // however date on this assertion turns no nil
case let .failure(error): return .failure(error)
}
} else {
return .success(nil)
}
}
Why Date object turns from actual worth to nil after coming back from perform?
[ad_2]
