My code uses datePicker , which, when the datePicker changes, matches the current date of the user device. It triggers a notification. However, AVSpeechUtterance I use fire as soon as the datePickers time does not change when a notification appears. I would like AVSpeechUtterance and the notice to be fired at the same time.
import UIKit import AVFoundation import UserNotifications class ViewController: UIViewController { @IBOutlet var datePicker: UIDatePicker! @IBAction func datePicker(_ sender: Any) { let c = UNMutableNotificationContent() c.title = "Lets Roll" c.subtitle = "s" c.body = "d" let begin = AVSpeechUtterance(string: " Hello ") let synthesizer = AVSpeechSynthesizer() begin.voice = AVSpeechSynthesisVoice(language: "en-US") begin.rate = 0.08 synthesizer.speak(begin) let triggerDate = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: datePicker.date ) let t = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: false) let r = UNNotificationRequest(identifier: "any", content: c, trigger: t) UNUserNotificationCenter.current().add(r, withCompletionHandler: nil) }}
APP DELEAGATE
import AVFoundation import UIKit import UserNotifications enum NotificationName: String { case mySpeechNotification } @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() center.delegate = self center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in if error != nil { print("Ops, error trying to get authorization") } else { if !granted { print("Dude, let me use notifications!") } } } } return true } func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { print("Oh, will present a notification, let see the identifier: \(notification.request.identifier)") if (notification.request.identifier == NotificationName.mySpeechNotification.rawValue) { print("Speaking...") } else { print("Nothing to say...") } completionHandler(.alert) let begin = AVSpeechUtterance(string: " Hello ") begin.voice = AVSpeechSynthesisVoice(language: "en-US") begin.rate = 0.08 let synthesizer = AVSpeechSynthesizer() synthesizer.speak(begin) } }

source share