Как я могу использовать функцию диапазона NSCalendar в календаре?

голоса
2

У меня есть следующий код, который используется Вкомпилировать Swift 2, однако будет не в Swift 4.2. нет Функция диапазон, который возвращает логическое значение больше не является частью типа данных календаря, однако она является частью типа данных NSCalendar. Есть ли способ, что я могу использовать или форматировать эту функцию, чтобы сделать его компиляции в 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)
    }
}

Я попытался следующие, однако функция диапазон не то же самое, и не компилируется:

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)
    }
}
Задан 20/10/2018 в 05:23
источник пользователем
На других языках...                            


1 ответов

голоса
2

Эквивалент range(of:start:interval:for:)ин CalendarявляетсяdateInterval(of:start:interval:for:)

Не следует использовать NSDateв 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)
    }
}

Я рекомендую использовать выделенный в DateIntervalкачестве возвращаемого значения , а не кортеж:

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)
    }
}
Ответил 20/10/2018 в 05:32
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more