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

Swift基于当前日期计算:仅当今日为周日/周一时优雅获取下周周二

优化实现

你的原有实现可以从几个方向优化:

  • 无需自定义周几枚举,Calendar的weekday组件已经有统一规则:1对应周日、2对应周一、3对应周二,额外维护枚举反而增加出错概率
  • 原有代码存在变量名大小写笔误(分支判断的Monday和定义的monday不符),会导致编译失败
  • 强制解包有潜在崩溃风险,即使场景下触发概率极低,也建议做兜底处理
  • 方法命名表意模糊,其他维护者无法直接从startDate看出和周二的关联

优化后代码

extension Date {
    /// 仅当当前日期为周日/周一时返回最近的周二,其余情况返回自身
    func adjustedNextTuesday(using calendar: Calendar = .current) -> Date {
        let weekday = calendar.component(.weekday, from: self)
        switch weekday {
        case 1: // 周日,加2天到周二
            return calendar.date(byAdding: .day, value: 2, to: self) ?? self
        case 2: // 周一,加1天到周二
            return calendar.date(byAdding: .day, value: 1, to: self) ?? self
        default:
            return self
        }
    }
}

关于DateInterval的疑问

你这个场景完全不需要使用DateInterval,它的设计目的是描述一段连续的时间区间,你只需要做简单的日期偏移计算,直接用date(byAdding:)就是最简洁高效的方案,引入额外类型反而会增加不必要的复杂度。


内容的提问来源于stack exchange,提问作者kAiN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:48:03