Comment utiliser UILocalNotification dans Swift

J'essaie de comprendre comment configurer un UILocalNotification rapidement, mais je n'ai pas beaucoup de chance. J'essaie ceci:

var notification = UILocalNotification() notification.timeZone = NSTimeZone.defaultTimeZone() var dateTime = NSDate.date() notification.fireDate(dateTime) notification.alertBody("Test") UIApplication.sharedApplication().scheduleLocalNotification(notification) 

Pour commencer, je ne suis pas sûr si c'est la bonne façon d'get la date actuelle. Dans .Net, je voudrais juste faire DateTime.Now ().

Deuxièmement, quand j'essaye cela, j'obtiens une erreur qui dit:

'(@lvalue NSDate!) -> $ T3' n'est pas identique à 'NSDate'

Malheureusement, je n'ai aucune idée de ce que cela signifie ou comment procéder.

Tout d'abord, vous construisez un NSDate utilisant la syntaxe d'initialisation:

 let dateTime = NSDate() 

La documentation montre comment les constructors de commodité ObjC sont mappés aux initialiseurs Swift. Si les docs affichent un init() pour une class, vous l'appelez en utilisant le nom de la class: pour NSDate , init() signifie que vous appelez NSDate() , init(timeInterval:sinceDate:) signifie que vous appelez NSDate(timeInterval: x, sinceDate: y) , etc.

Deuxièmement: fireDate n'est pas une méthode, c'est une propriété. Vous devriez l'assigner au lieu d'essayer de l'appeler:

 notification.fireDate = dateTime 

Idem pour alertBody .

Vous pouvez également find la syntaxe Swift pour les API Cocoa en cliquant sur un nom de class (ou un autre symbole d'API) dans votre file source Swift; cela fait que Xcode génère une version "Swift-ified" du file d'en-tête correspondant.

 func setupNotificationReminder() { var title:Ssortingng = "Your reminder text goes here" let calendar = NSCalendar.currentCalendar() let calendarComponents = NSDateComponents() calendarComponents.hour = 7 calendarComponents.second = 0 calendarComponents.minute = 0 calendar.timeZone = NSTimeZone.defaultTimeZone() var dateToFire = calendar.dateFromComponents(calendarComponents) // create a corresponding local notification let notification = UILocalNotification() let dict:NSDictionary = ["ID" : "your ID goes here"] notification.userInfo = dict as! [Ssortingng : Ssortingng] notification.alertBody = "\(title)" notification.alertAction = "Open" notification.fireDate = dateToFire notification.repeatInterval = .Day // Can be used to repeat the notification notification.soundName = UILocalNotificationDefaultSoundName UIApplication.sharedApplication().scheduleLocalNotification(notification) } 

Ne répondant pas à votre question mais valant la note:

 notification.fireDate(dateTime) notification.alertBody("Test") 

lancera également une erreur de compilation en disant qu'il ne peut pas find l'init. faites cela à la place

 notification.fireDate = NSDate(timeIntervalSinceNow: 15) notification.alertBody = "Notification Received" 

Il existe également un support pour créer la date comme ceci:

 NSDate(timeIntervalSinceNow: 15) 

Dans Swift, pour annuler la notification locale particulière à l'aide de la key unique:

 func cancelLocalNotification(UNIQUE_ID: Ssortingng){ var notifyCancel = UILocalNotification() var notifyArray = UIApplication.sharedApplication().scheduledLocalNotifications for notifyCancel in notifyArray as! [UILocalNotification]{ let info: NSDictionary = notifyCancel.userInfo as! [Ssortingng : Ssortingng] if info[UNIQUE_ID]!.isEqual(UNIQUE_ID){ UIApplication.sharedApplication().cancelLocalNotification(notifyCancel) }else{ println("No Local Notification Found!") } } } 

Serait agréable de séparer également certains des composants:

 private let kLocalNotificationMessage:Ssortingng = "Your message goes here!" private let kLocalNotificationTimeInterval:NSTimeInterval = 5 private func LocalNotification() -> UILocalNotification { var localNotification:UILocalNotification = UILocalNotification() localNotification.fireDate = NSDate(timeIntervalSinceNow:kLocalNotificationTimeInterval) localNotification.alertBody = kLocalNotificationMessage return localNotification } private func ScheduleLocalNotificationIfPossible() { if (UIApplication.sharedApplication().isRegisteredForRemoteNotifications()) { UIApplication.sharedApplication().scheduleLocalNotification(LocalNotification()) } } 

Vous pouvez maintenant appeler ScheduleLocalNotificationIfPossible() pour planifier la notification locale si l'user s'est enregistré pour les notifications à distance.