Swift开发:如何取匹配当前日期的字典值作为本地通知标题
解决方案
- 首先你原有遍历字典存储
the number和the word的逻辑存在缺陷:循环过程中会持续覆盖这两个UserDefaults字段的值,最终只会保留字典最后一个被遍历到的元素的内容,完全无法满足按日期匹配取值的需求,这段代码可以直接删除。 - 实现逻辑非常简单:你只需要在
scheduleLocal方法内拿到格式化后的当前日期字符串,再以该字符串为key从字典中取出对应数组的第一个元素作为通知标题即可,建议同时添加默认值做异常兼容,避免日期不在字典范围内时出现崩溃问题。
修改后的完整代码如下:
func scheduleLocal() { let center = UNUserNotificationCenter.current() let content = UNMutableNotificationContent() // 新增逻辑:匹配日期取通知标题 let currentDate = Date() let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd.MM.yyyy" let currentDateStr = dateFormatter.string(from: currentDate) // 从字典中取对应日期的第一个元素作为标题,无匹配时用默认值 content.title = dict[currentDateStr]?.first ?? "今日提醒" content.body = "点击查看" content.categoryIdentifier = "alarm" content.userInfo = ["customData": "fizzbuzz"] content.sound = UNNotificationSound.default TimeSet.datePickerMode = .time let pickerDate = TimeSet.date let timeComponents = Calendar.current.dateComponents([.hour, .minute], from: pickerDate) let hour = timeComponents.hour! let minute = timeComponents.minute! var dateComponents = DateComponents() dateComponents.hour = hour dateComponents.minute = minute let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true) let request = UNNotificationRequest(identifier: "X", content: content, trigger: trigger) center.add(request) }
如果你要复用之前已经存入UserDefaults的nextDAY日期值,也可以把获取日期key的逻辑替换为下面的代码,不需要重复格式化日期:
let currentDateStr = UserDefaults.standard.string(forKey: "nextDAY") ?? ""
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

