Swift开发中常量应定义在VC内部 还是单独创建Constants文件夹存放
结论先行
根据你的使用场景选择即可,核心遵循最小作用域原则:
- 如果这个
tableViewRowHeight仅在当前ViewController内部使用,优先选VC内部定义私有Constants结构体的方案 - 如果这个行高值需要在多个业务页面、多个类中复用,再抽取到公共常量分组中
三个维度的对比分析
1. 代码安全性
- 内部私有Constants方案:
private修饰符严格限制了常量作用域仅在当前VC内部,既不会被其他无关类意外引用、修改,也不会污染全局命名空间,不会出现多模块常量重名冲突的问题,完全符合最小权限原则,安全性更高 - 全局常量方案:如果仅单个VC使用的常量被放到全局,相当于无意义扩大了变量作用域,容易出现误引用、重名覆盖的问题,出问题时排查链路更长,安全性更低
2. VC可读性
- 内部私有Constants方案:常量定义和使用场景紧耦合,维护当前VC代码时,不需要跨文件跳转就能直接看到所有用到的常量配置,上下文关联度高,搭配
// MARK: - Constants标记后代码结构非常清晰,可读性更高 - 全局常量方案:仅单个VC使用的常量分散到全局文件后,代码上下文被割裂,查看、修改配置都需要来回跳转文件,如果全局常量文件堆积了大量零散常量,查找成本更高,可读性反而更低
3. 开发最优实践
优先遵守「常量作用域不超过实际使用范围」的原则:
- 仅单类使用的常量:在类内部定义私有常量
- 同模块多类使用的常量:在模块内定义公共常量
- 全项目多模块复用的常量:才放到全局公共常量分组中
如果是UITableView通用行高这类和组件属性强相关的复用常量,还有更优的中间方案:给组件做扩展绑定常量,语义更清晰,也不会污染全局命名空间:
extension UITableView { static let defaultEstimatedRowHeight: CGFloat = 100 } // 使用时 tableView.estimatedRowHeight = UITableView.defaultEstimatedRowHeight
内容的提问来源于stack exchange,提问作者DrainOpener
相关产品推荐
相关产品推荐

