首页 > 解决方案 > 如何在 Swift 上发出多个本地通知?

问题描述

底线是我在 10 秒的时间间隔内发出了一个本地通知。如何以不同的时间延迟向此代码添加多个通知?也就是说,具有不同延迟(几个小时、几天等)的不同通知。如果可能,请使用我的代码示例。有人告诉我,我需要输入一个不同的标识符:“内容”和不同的时间。但我不明白我需要复制代码的哪些部分。

import UIkit
import UserNotifications

class ViewController UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let center = UNUserNotificationCenter.current()
        
        let content = UNMutableNotificationContent()
        
        content.title = "Hi"
        content.body = "Bear"
        content.sound = UNNotificationSound.default
        content.threadIdentifier = "local-notifications"
        
        let date = Date(timeIntervalSinceNow: 10)
        let dateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date)
        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
        let request = UNNotificationRequest(identifier: "content", content: content, trigger: trigger)
        
        center.add(request) {(error) in 
            if error != nil {
                print (error)
            }
        }
    }
```

标签: swift

解决方案


scheduleNotification(identifier:content:date:)您可以在中创建方法UNUserNotificationCenter extension

extension UNUserNotificationCenter {
    func scheduleNotification(identifier: String, content: UNMutableNotificationContent, date: Date) {
        let dateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date)
        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)

        let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
        self.add(request) {(error) in
            if error != nil {
                print (error)
            }
        }
    }
}

现在,为多个通知调用此方法,并使用您要使用的适当参数,即

示例 1:

let content1 = UNMutableNotificationContent()
content1.title = "Hi"
UNUserNotificationCenter.current().scheduleNotification(identifier: "content1", content: content1, date: Date(timeIntervalSinceNow: 10))

示例 2:

let content2 = UNMutableNotificationContent()
content2.title = "Hello"
UNUserNotificationCenter.current().scheduleNotification(identifier: "content2", content: content2, date: Date(timeIntervalSinceNow: 20))

推荐阅读