Как сделать локальные уведомления по дням/часам на Swift?

Для создания локальных уведомлений по дням и часам в Swift вы можете воспользоваться фреймворком UserNotifications.

Первым шагом нужно добавить импорт UserNotifications в ваш файл ViewController:

import UserNotifications

Затем вы можете создать функцию, которая будет устанавливать локальные уведомления. Эта функция может, например, вызываться при загрузке приложения или при изменении настроек пользователем.

func setupLocalNotifications() {
    let center = UNUserNotificationCenter.current()
    
    // Запрашиваем разрешение для отправки уведомлений
    center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
        if granted {
            // Разрешение получено, создаем уведомления
            self.createNotifications()
        } else {
            // Разрешение не получено
        }
    }
}

Внутри функции createNotifications вы можете создать одно или несколько уведомлений, указывая дату и время их отправления.

func createNotifications() {
    let center = UNUserNotificationCenter.current()
    center.removeAllPendingNotificationRequests() // Очищаем предыдущие уведомления
    
    // Создаем контент уведомления
    let content = UNMutableNotificationContent()
    content.title = "Напоминание"
    content.body = "Текст вашего уведомления"
    content.sound = UNNotificationSound.default
    
    // Создаем триггер, указывающий время и дату отправки уведомления
    var dateComponents = DateComponents()
    dateComponents.calendar = Calendar.current
    dateComponents.hour = 10 // Час, когда будет отправлено уведомление
    dateComponents.minute = 0 // Минута, когда будет отправлено уведомление
    
    // Создаем условие повторения уведомления по дням недели
    let repeatDays: [Int] = [2, 4, 6] // Дни недели, например, вторник, четверг и суббота
    
    for day in repeatDays {
        dateComponents.weekday = day
        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
        
        // Создаем запрос на отправку уведомления с созданными контентом и триггером
        let request = UNNotificationRequest(identifier: "dailyNotification(day)", content: content, trigger: trigger)
        
        // Добавляем запрос в центр уведомлений
        center.add(request) { (error) in
            if let error = error {
                // Возникла ошибка при добавлении уведомления
            }
        }
    }
}

Теперь у вас есть функция setupLocalNotifications, которая запрашивает разрешение отправки уведомлений и вызывает функцию createNotifications, которая создает уведомления для выбранных дней недели и времени.

Вы можете вызвать функцию setupLocalNotifications в нужном месте вашего кода для инициализации и настройки локальных уведомлений.