How To Use UILocalNotification In Swift

十年热恋 提交于 2019-12-03 02:52:36

First, you construct an NSDate using initializer syntax:

let dateTime = NSDate()

The documentation shows how ObjC convenience constructors map to Swift initializers. If the docs show an init() for a class, you call it using the name of the class: for NSDate, init() means you call NSDate(), init(timeInterval:sinceDate:) means you call NSDate(timeInterval: x, sinceDate: y), etc.

Second: fireDate isn't a method, it's a property. You should assign to it instead of trying to call it:

notification.fireDate = dateTime

Ditto for alertBody.

You can also find the Swift syntax for Cocoa APIs by command-clicking a class name (or other API symbol) in your Swift source file; this causes Xcode to generate a "Swift-ified" version of the relevant header file.

func setupNotificationReminder() {
    var title:String = "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! [String : String]
    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)
}

Not answering your question but worth the note:

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

will also throw a compiler error saying that it can't find the init. do this instead

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

There's also support for creating the date like so:

NSDate(timeIntervalSinceNow: 15)

In Swift, to cancel the particular local notification using Unique Key:

func cancelLocalNotification(UNIQUE_ID: String){

        var notifyCancel = UILocalNotification()
        var notifyArray = UIApplication.sharedApplication().scheduledLocalNotifications

        for notifyCancel in notifyArray as! [UILocalNotification]{

            let info: NSDictionary = notifyCancel.userInfo as! [String : String]

            if info[UNIQUE_ID]!.isEqual(UNIQUE_ID){

                UIApplication.sharedApplication().cancelLocalNotification(notifyCancel)
            }else{

                println("No Local Notification Found!")
            }
        }
    }

Would be nice to also separate out some of the components:

private let kLocalNotificationMessage:String = "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())
  }
}

Now you can call, ScheduleLocalNotificationIfPossible() to schedule the local notification if the user has registered for remote notifications.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!