为什么不建议直接写如下代码?
UIImage.init(named: "logo")
- 1.使用了字符串,书写容易出错
- 2.一个图片可能多个地方使用,一旦修改了图片名称,多个地方都要修改
你可能觉得,我为啥要修改图片名称呢?
1.项目初期,图片名称是UI命名,有很多不规范,程序员没有修改
2.随着项目的功能的增加,图片资源数量增加,需要对命名统一规范
参考了Android的资源名管理方式
/// R 是Resource的缩写
enum R {
/// 服务模块
enum Service: String {
/// 电话
case market_call = "market_call"
/// 如果不写value的话,默认 rawValue == "market_add"
case market_add
}
/// 商品详情模块
enum ShopDetail: String {
case log = "log"
}
}
// 使用
UIImage.init(named: R.Service.market_call.rawValue)
如果想要写法更精简,省略.rawValue
,实现如下写法
UIImage.init(R.Service.market_add)
需要给UIImage添加扩展
extension UIImage {
convenience init?(_ name: R.Service) {
self.init(named: name.rawValue)
}
convenience init?(_ name: R.ShopDetail) {
self.init(named: name.rawValue)
}
// 其他模块
...
}