2 votes

Comment puis-je utiliser la fonction NSCalendar range dans Calendar ?

J'ai le code suivant qui compilait dans Swift 2 mais qui ne compile pas dans Swift 4.2. La fonction range qui renvoie un booléen ne fait plus partie du type de données Calendar mais fait partie du type de données NSCalendar. Y a-t-il un moyen d'utiliser ou de formater cette fonction pour qu'elle compile dans Swift 4.2 ?

extension Calendar {
    /**
     Returns a tuple containing the start and end dates for the week that the
     specified date falls in.
     */
    func weekDatesForDate(date: NSDate) -> (start: NSDate, end: NSDate) {
        var interval: TimeInterval = 0
        var start: NSDate?
        range(of: .weekOfYear, start: &start, interval: &interval, for: date as Date)
        let end = start!.addingTimeInterval(interval)

        return (start!, end)
    }
}

J'ai essayé ce qui suit mais la fonction range n'est pas la même et ne compile pas :

extension NSCalendar {
    /**
     Returns a tuple containing the start and end dates for the week that the
     specified date falls in.
     */
    func weekDatesForDate(date: NSDate) -> (start: NSDate, end: NSDate) {
        var interval: TimeInterval = 0
        var start: NSDate?
        range(of: .weekOfYear, start: &start, interval: &interval, for: date as Date)
        let end = start!.addingTimeInterval(interval)

        return (start!, end)
    }
}

2voto

vadian Points 29149

L'équivalent de range(of:start:interval:for:) en Calendar es dateInterval(of:start:interval:for:)

Ne pas utiliser NSDate dans Swift

extension Calendar {
    /**
     Returns a tuple containing the start and end dates for the week that the
     specified date falls in.
     */
    func weekDatesForDate(date: Date) -> (start: Date, end: Date) {
        var interval: TimeInterval = 0
        var start = Date()
        dateInterval(of: .weekOfYear, start: &start, interval: &interval, for: date)
        let end = start.addingTimeInterval(interval)

        return (start, end)
    }
}

Je recommande l'utilisation d'un système dédié DateInterval comme valeur de retour plutôt qu'un tuple :

extension Calendar {
    /**
     Returns a tuple containing the start and end dates for the week that the
     specified date falls in.
     */
    func weekDatesForDate(date: Date) -> DateInterval {
        var interval: TimeInterval = 0
        var start = Date()
        dateInterval(of: .weekOfYear, start: &start, interval: &interval, for: date)
        let end = start.addingTimeInterval(interval)
        return DateInterval(start: start, end: end)
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X