You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:15:03