Swift3 swift 3如何将NSDate或Date子类化

Swift3 swift 3如何将NSDate或Date子类化,swift3,Swift3,我正在尝试向datetake字段添加一个特殊的JSONSerializable方法,因此我想扩展Date。但是我发现Date是一个结构,不能扩展,所以NSDate。但是我不知道如何从日期中获取日期 class DateTaken : NSDate, JSONRepresentable { static var formatter = DateFormatter() var JSONRepresentation: AnyObject { DateTaken.for

我正在尝试向
datetake
字段添加一个特殊的
JSONSerializable
方法,因此我想扩展
Date
。但是我发现
Date
是一个结构,不能扩展,所以
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:  )
类日期:NSDate,JSONRepresentable{
静态变量格式化程序=日期格式化程序()
var JSONRepresentation:AnyObject{
datetake.formatter.dateFormat=“yyyy-MM-dd'T'HH:MM:ss.SSS'Z'//ISO8601
datetake.formatter.timeZone=NSTimeZone(缩写:“UTC”)作为时区!
返回DateTake.formatter.string(from:self as Date)作为任何对象
}
var JSONLocalTimeRepresentation:AnyObject{
datetake.formatter.dateFormat=“yyyy-MM-dd HH:MM:ss.SSS”
返回DateTake.formatter.string(from:self as Date)作为任何对象
}
}
设d=Date()
让datetake:datetake=datetake.init(时间间隔:0,自:d)
//例外情况
(lldb)p NSDate.init(时间间隔:0,自:datetake)
(NSDate)$R0=0x0000000156e6fdb0 2014-10-13 08:49:18 UTC
(lldb)p datetake.init(时间间隔:0,自:datetake)
错误::3:1:错误:“init”是该类型的成员;使用“type(of:…)”初始化同一动态类型的新对象
datetake.init(时间间隔:0,自:datetake)
^
类型(类别:)

这不是Java。我们对此有扩展

extension 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 = TimeZone(abbreviation: "UTC")
        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
    }
}

我还怀疑这里面有一个bug,它是由
格式化程序的共享引起的。在
JSONRepresentation
中首次设置
时区后,
jsonLocaltimerRepresentation
将起到
JSONRepresentation
的作用。我可能错了,但我现在不能测试它。值得一看

“日期是一个结构,不能扩展”什么??Extend与subclass完全不同。不能扩展结构(如
Date
),但可以扩展类(如
NSDate
)。不管是哪种情况,你都不应该。请使用分机。对不起。我来自JS。我想测试一个值是否为
datetake的
实例,如果是,我想以不同的方式序列化它。我不想以相同的方式序列化所有日期。如何使用
扩展来实现这一点?