NSDate扩展无法正常工作

时间:2017-05-23 10:45:04

标签: ios swift3 nsdate

这是一段在早期版本的swift中运行的代码。它现在给出了一个错误(无法转换类型的值' NSDate'键入' NSDate.Date'在强制中)

extension NSDate {
struct Date {
    static let formatterISO8601: DateFormatter = {
        let formatter = DateFormatter()
        formatter.calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601)! as Calendar
        formatter.locale = NSLocale.current
        formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone!
        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX"
        return formatter
    }()
}


var formattedISO8601: String { return Date.formatterISO8601.string(from: self as Date) }

}

3 个答案:

答案 0 :(得分:2)

问题是在Swift 3中已经有一个名为Date的结构定义。

所以你可以做的是将你的结构名称更改为MyDate或其他内容,然后你就可以了。

最好使用新的DateCalendarTimeZone代替NSDateNSCalendarNSTimeZone

或者像这样扩展Date

extension Date {

    static let formatterISO8601: DateFormatter = {
        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .iso8601)
        formatter.locale = Locale.current
        formatter.timeZone = TimeZone(secondsFromGMT: 0)
        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX"
        return formatter
    }()

    var formattedISO8601: String { return Date.formatterISO8601.string(from: self) }
}

答案 1 :(得分:1)

NSDate和Date的扩展。

extension Date {
    static let formatterISO8601: DateFormatter = {
        let formatter = DateFormatter()
        formatter.calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601)! as Calendar
        formatter.locale = NSLocale.current
        formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone!
        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX"
        return formatter
    }()

    func formattedISO8601() -> String {
        return Date.formatterISO8601.string(from: self)
    }
}

extension NSDate {
    func formattedISO8601() -> String {
        return Date.formatterISO8601.string(from: self as Date)
    }
}

并像这样使用它......

// NSDate
let nsdate = NSDate.init()
let formattedDate = nsdate.formattedISO8601()

// Date
let date = Date.init()
let formattedNsDate = date.formattedISO8601()

答案 2 :(得分:0)

试试这个

   extension Date {

    static let formatterISO8601: DateFormatter = {
      let formatter = DateFormatter()
      formatter.calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601)! as Calendar
      formatter.locale = NSLocale.current
      formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone!
      formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX"
      return formatter
    }()



  var formattedISO8601: String { return Date.formatterISO8601.string(from: self)
  }
}