Le code ci-dessous fait partie d'une extension de date. Cependant, dans Swift 3, je reçois quelques erreurs qui ne disparaîtront pas. Je l'ai déjà changé "NSCalendar" à "Calendrier":Extensions de date dans Swift 3
func startOfWeek(_ weekday: Int?) -> Date? {
guard
let cal = Calendar.current,
let comp: DateComponents = (cal as Calendar).components([.yearForWeekOfYear, .weekOfYear], from: self) else { return nil }
comp.to12pm()
cal.firstWeekday = weekday ?? 1
return cal.date(from: comp)!
}
func endOfWeek(_ weekday: Int) -> Date? {
guard
let cal = Calendar.current,
var comp: DateComponents = (cal as Calendar).components([.weekOfYear], from: self) else { return nil }
comp.weekOfYear = 1
comp.day -= 1
comp.to12pm()
return (cal as NSCalendar).date(byAdding: comp, to: self.startOfWeek(weekday)!, options: [])!
}
Lignes 3 & 11: laisser cal = Calendar.current, Initializer pour la liaison conditionnelle doit avoir un type en option, non 'Calendrier'
ligne 12: J'ai eu une erreur, mais fixe en changeant "laisser comp:" à "var comp:"
ligne 14: comp.day - = 1 Erreur: L'opérateur binaire '- =' ne peut pas être appliqué aux opérandes de type 'Int?' et 'Int'
Je ne suis pas génial avec les extensions, ce code a été adapté à partir d'une extension que j'ai trouvé en ligne, alors maintenant la mise à jour se révèle difficile. Aucune suggestion?
Dépannage (choses que j'ai essayé):
cal = Calendrier laissent .current,
Erreur: '?' Calendrier Type n'a pas de membre 'current'
let cal: Calendrier? = Calendar.current,
Erreur: Type explicitement spécifié 'Calendrier?' ajoute un niveau supplémentaire de facultatif à la initialiseur, ce qui rend le contrôle en option toujours réussir
laisser cal = Calendar.current ?,
Erreur: Impossible d'utiliser en option sur Enchaînement valeur non optionnelle de type « Calendrier »
Vous devriez suivre ce que le tout compilateur vous dit. Certains types étaient optionnels, maintenant ils ne le sont pas: supprimez vos liaisons optionnelles. Il vous dit que la structure devrait être modifiable: faites-le ensuite voir comment cela fonctionne maintenant. Etc. – Moritz
@EricAya J'ai essayé un let cal: 'Calendrier? = Calendar.current 'ainsi que' let cal = Calendar? .current 'et' let cal = Calendar.current? ' mais aucun n'a fonctionné. Alors, comment est-ce que je rends le calendrier facultatif? –
juste une conjecture, comp.day - = 1' comp.day n'est pas une lvalue, c'est juste le retour d'une méthode appelée day on comp ... dans l'objectif-C il y a un peu de magie pour que les propriétés fonctionnent façon (c.-à-d. qu'il est différent d'un accesseur de point d'un objet obj c classique), peut-être que la magie est désactivée dans swift 3 –