1
我想添加一個特殊的JSONSerializable
方法到dateTaken
字段,所以我想擴展Date
。但我發現Date
是一個結構體,不能擴展,所以NSDate
。但我無法弄清楚如何從Date
swift 3如何子類NSDate或日期
class DateTaken : NSDate, JSONRepresentable {
static var formatter = DateFormatter()
var JSONRepresentation: AnyObject {
DateTaken.formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" // ISO8601
DateTaken.formatter.timeZone = NSTimeZone(abbreviation: "UTC") as TimeZone!
return DateTaken.formatter.string(from:self as Date) as AnyObject
}
var JSONLocalTimeRepresentation: AnyObject {
DateTaken.formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
return DateTaken.formatter.string(from:self as Date) as AnyObject
}
}
let d = Date()
let dateTaken : DateTaken = DateTaken.init(timeInterval: 0, since: d)
// exception
(lldb) p NSDate.init(timeInterval: 0, since: dateTaken)
(NSDate) $R0 = 0x0000000156e6fdb0 2014-10-13 08:49:18 UTC
(lldb) p dateTaken.init(timeInterval: 0, since: dateTaken)
error: <EXPR>:3:1: error: 'init' is a member of the type; use 'type(of: ...)' to initialize a new object of the same dynamic type
dateTaken.init(timeInterval: 0, since: dateTaken)
^
type(of: )
「日期是一個結構,不能擴展」什麼?擴展與子類並不完全相同。 – matt
結構(如'Date')不能被擴展,但像'NSDate'這樣的類可以。不管哪種情況,你都不應該。使用擴展名。 – Alexander
對不起。我來自JS。我想測試一個值是否是一個'instanceof' DateTaken,如果是這樣的話,我可以用不同的方式序列化它。我不想以同樣的方式序列化所有日期。我如何使用'extensions'來實現這個? – michael