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

Swift开发中常量应定义在VC内部 还是单独创建Constants文件夹存放

结论先行

根据你的使用场景选择即可,核心遵循最小作用域原则:

  • 如果这个tableViewRowHeight仅在当前ViewController内部使用,优先选VC内部定义私有Constants结构体的方案
  • 如果这个行高值需要在多个业务页面、多个类中复用,再抽取到公共常量分组中

三个维度的对比分析

1. 代码安全性

  • 内部私有Constants方案:private修饰符严格限制了常量作用域仅在当前VC内部,既不会被其他无关类意外引用、修改,也不会污染全局命名空间,不会出现多模块常量重名冲突的问题,完全符合最小权限原则,安全性更高
  • 全局常量方案:如果仅单个VC使用的常量被放到全局,相当于无意义扩大了变量作用域,容易出现误引用、重名覆盖的问题,出问题时排查链路更长,安全性更低

2. VC可读性

  • 内部私有Constants方案:常量定义和使用场景紧耦合,维护当前VC代码时,不需要跨文件跳转就能直接看到所有用到的常量配置,上下文关联度高,搭配// MARK: - Constants标记后代码结构非常清晰,可读性更高
  • 全局常量方案:仅单个VC使用的常量分散到全局文件后,代码上下文被割裂,查看、修改配置都需要来回跳转文件,如果全局常量文件堆积了大量零散常量,查找成本更高,可读性反而更低

3. 开发最优实践

优先遵守「常量作用域不超过实际使用范围」的原则:

  1. 仅单类使用的常量:在类内部定义私有常量
  2. 同模块多类使用的常量:在模块内定义公共常量
  3. 全项目多模块复用的常量:才放到全局公共常量分组中

如果是UITableView通用行高这类和组件属性强相关的复用常量,还有更优的中间方案:给组件做扩展绑定常量,语义更清晰,也不会污染全局命名空间:

extension UITableView {
    static let defaultEstimatedRowHeight: CGFloat = 100
}
// 使用时
tableView.estimatedRowHeight = UITableView.defaultEstimatedRowHeight

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 20:18:01