web-dev-qa-db-fra.com

Xcode 8 et Swift 3 NSCalendar

J'ai implémenté mon projet de surveillance dans Swift et maintenant je migre vers Swift 3 à cause de Xcode 8. Je laisse Xcode 8 changer le code source en Swift 3. Cependant, le code contient des erreurs et je ne parviens pas à le comprendre.

let unitFlags: Calendar = [.hour, .firstWeekday, .monthSymbols, .year, .minute, .firstWeekday]

var calendar = NSCalendar.current
calendar.timeZone = NSTimeZone(identifier: "UTC")!
let components = (calendar as NSCalendar).components(unitFlags, from: reservationDate)

Xcode donne une erreur dans ces lignes et je ne peux pas comprendre le problème.

ERREUR: le type contextuel 'Calendrier' ne peut pas être utilisé avec un littéral de tableau 

ERREUR: Les étiquettes d'argument '(identifiant :)' ne correspondent à aucune donnée disponible surcharges

ERREUR: impossible de convertir la valeur de type 'Calendrier' en argument attendu tapez 'NSCalendar.Unit'

14
TheZipper

Tout d’abord, ni NSCalendarUnit dans Swift 2 ni Calendar.Component dans Swift 3 ne contiennent les composants firstWeekday et monthSymbols.

Dans Swift 3, l'équivalent de votre code est

let unitFlags = Set<Calendar.Component>([.hour, .year, .minute])
var calendar = Calendar.current
calendar.timeZone = TimeZone(identifier: "UTC")!
let components = calendar.dateComponents(unitFlags, from: reservationDate)
32
vadian

Changer le type de unitFlags en Set

0
DerrickHo328