如何在 Swift 中为工作周(周一至周五)设置 UNCalendarNotificationTrigger?
Posted
技术标签:
【中文标题】如何在 Swift 中为工作周(周一至周五)设置 UNCalendarNotificationTrigger?【英文标题】:How to set UNCalendarNotificationTrigger for workweek (Monday to Friday) in Swift? 【发布时间】:2020-04-22 17:42:52 【问题描述】:使用ios13.4、XCode11.4、Swift5.2,
您如何设置将在每个工作日(即周一至周五,而不是周六和周日)触发的本地通知??
我尝试了不同的日历组件设置,但没有成功解决工作日问题。
这是我到目前为止所做的......
如果警报需要在特定日期:
Calendar.current.dateComponents([.day, .month, .year, .hour, .minute, .second], from: notificationDate)
如果闹钟需要每天重复:
Calendar.current.dateComponents([.hour, .minute], from: notificationDate)
如果闹钟需要在特定工作日重复:
Calendar.current.dateComponents([.weekday, .hour, .minute], from: notificationDate)
等等
但是如何设置几个工作日(例如每个工作日周一到周五)??
这是我的代码,用于精确的 notificationDate 示例:
import UIKit
class MyViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
let content = UNMutableNotificationContent()
content.title = "My Notification Title"
content.categoryIdentifier = UUID().uuidString
var notificationIdentifier = "23224-23134-234234"
var notificationDate = Date(timeInterval: 30, since: Date())
let notificationTriggerKind = Calendar.current.dateComponents([.day, .month, .year, .hour, .minute, .second], from: notificationDate)
let notificationTrigger = UNCalendarNotificationTrigger(dateMatching: notificationTriggerKind, repeats: false)
let notificationRequest = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: notificationTrigger)
let notificationCenter = UNUserNotificationCenter.current()
notificationCenter.delegate = self
notificationCenter.add(notificationRequest) (error) in if let error = error print("error: \(error)")
extension MyViewController: UNUserNotificationCenterDelegate
// kicks in when App is running in Foreground (without user interaction)
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
// ...do your custom code...
completionHandler([.alert, .sound])
// kicks in when App is running in Foreground or Background
// (AND App is open) AND user interacts with notification
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse, withCompletionHandler
completionHandler: @escaping () -> Void)
// ... do your custom code ....
return completionHandler()
【问题讨论】:
【参考方案1】:你做得很好。
要做到这一点,您需要为每一天安排一个通知。
检查这个例子:
创建和扩展日期以获取特定日期的小时、分钟和秒 extension Date
public func getDateComponents() -> DateComponents
let dateComponents = Calendar.current.dateComponents([ .hour, .minute, .second], from: self)
return dateComponents
或者直接创建一个日期组件:
var dateComponents = DateComponents()
dateComponents.hour = 9
dateComponents.minutes = 10
dateComponents.weekDay = 1
然后检查从星期一 (2) 到星期五 (6) 的需要天数
并迭代一系列工作日以创建每天的特定通知并重复。
let workDays = 2...6
for day in workDays
var dateComponents = date.getDateComponents()
dateComponents.weekday = day
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: repeats)
let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
self.notificationCenter.add(request) (error) in
if let error = error
【讨论】:
以上是关于如何在 Swift 中为工作周(周一至周五)设置 UNCalendarNotificationTrigger?的主要内容,如果未能解决你的问题,请参考以下文章
oracle如何根据传入的时间参数,得到这个参数所在周的周一至周五的日期和星期数