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
相关产品推荐
相关产品推荐

