2017-05-23 1 views
-1

Ceci est un morceau de code qui fonctionnait dans la version antérieure de swift. Il est maintenant donner une erreur (Impossible de convertir la valeur de type « NSDate » taper « NSDate.Date » dans la coercition)Extension NSDate ne fonctionne pas

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

}

+1

En ce qui concerne Swift 3 votre code est un gâchis. Veuillez utiliser les structures natives Swift 3 'Date' (ce qui provoque l'erreur car elle est en conflit avec votre structure' Date'!), 'Calendar',' Locale', 'TimeZone'. – vadian

+0

Cela semble être une extension de 'DateFormatter' et non de' Date' (mis à part le fait que le type 'Date' existe déjà et que vous déclarez un nouveau type ici ...). En outre, en fonction de votre cible de déploiement, vous pouvez utiliser la classe 'NSISO8601DateFormatter' introduite dans la dernière version. – floschliep

Répondre

2

problème est que dans Swift 3 il y a déjà une structure DETERMINANT nommé Date.

Donc, ce que vous pouvez faire est de changer votre nom de structure à MyDate ou autre chose et vous avez tous mis à aller.

En outre, il est préférable si vous utilisez de nouveaux Date, Calendar et TimeZone au lieu de NSDate, NSCalendar et NSTimeZone.

Ou faire l'extension de Date comme ceci.

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) } 
} 
+0

Est-ce que ça marche pour vous ou pas? –

1

Extensions pour NSDate et 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) 
    } 
} 

et de l'utiliser comme ça ...

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

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

essayer cette

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) 
    } 
} 
+0

pourquoi? S'il vous plaît ajouter une capture d'écran ou dire une erreur. – SuryaKantSharma

+0

Ok son fonctionnement, mais il y a déjà une structure 'Date' et vous faites une autre structure avec elle –

+0

mise à jour vérifier s'il vous plaît. – SuryaKantSharma