2016-12-16 67 views
1

我想添加一個特殊的JSONSerializable方法到dateTaken字段,所以我想擴展Date。但我發現Date是一個結構體,不能擴展,所以NSDate。但我無法弄清楚如何從Dateswift 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: ) 
+1

「日期是一個結構,不能擴展」什麼?擴展與子類並不完全相同。 – matt

+0

結構(如'Date')不能被擴展,但像'NSDate'這樣的類可以。不管哪種情況,你都不應該。使用擴展名。 – Alexander

+0

對不起。我來自JS。我想測試一個值是否是一個'instanceof' DateTaken,如果是這樣的話,我可以用不同的方式序列化它。我不想以同樣的方式序列化所有日期。我如何使用'extensions'來實現這個? – michael

回答

0

這是不是Java獲得DateTaken。我們有這個擴展。

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 
    } 
} 

我也懷疑有致的formatter共享這個錯誤。 timeZoneJSONRepresentation中第一次設置後,JSONLocalTimeRepresentation將像JSONRepresentation那樣行事。我可能是錯的,但我現在無法測試它。值得一試。

相關問題