1
을 확장하고자하므로 dateTaken
필드에 특별한 JSONSerializable
메서드를 추가하려고합니다. 하지만 Date
은 구조체이므로 확장 할 수 없다는 것을 알아 냈으므로 NSDate
입니다. 하지만 난이 자바가 아닌 Date
swift 3 NSDate 또는 Date 서브 클래스 방법
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: )
"날짜는 구조체이며 확장 할 수 없습니다."무엇을 ?? Extend는 서브 클래스와 완전히 같지 않습니다. – matt
구조체 ('Date'와 같은)는 확장 될 수 없지만 'NSDate'와 같은 클래스는 확장 될 수 있습니다. 어느 경우 든, 당신은해서는 안됩니다. 확장 기능을 사용하십시오. – Alexander
죄송합니다. JS에서 왔어. 값이 'instanceof' DateTaken인지 테스트하고 싶으면 다른 방법으로 직렬화해야합니다. 나는 모든 날짜를 같은 방식으로 직렬화하고 싶지 않다. 이것을 달성하기 위해'extensions '을 어떻게 사용합니까? – michael