最新Xcode 13版本中如何使用Image Literal?#imageliteral失效有什么替代方案?
#imageliteral失效的替代实现方案
#imageliteral本身对Xcode版本的兼容性较差,高版本Xcode已经逐步弱化对该语法的支持,批量在数组中使用时还容易出现编译异常、维护成本高的问题,以下是可直接落地的替代方案:
- 方案1:按资源名批量加载(适合图片数量多、命名规则统一的场景)
先将所有需要用到的图片导入Assets.xcassets并做好统一命名,通过映射的方式直接生成图片数组,SwiftUI、UIKit的示例代码如下:// SwiftUI 场景 let imageNameList = ["img_0", "img_1", "img_2", "img_3"] // 替换为你的图片资源名 let imageArray = imageNameList.map { Image($0) } // UIKit 场景,使用compactMap过滤加载失败的空值 let imageArray = imageNameList.compactMap { UIImage(named: $0) } - 方案2:枚举封装资源(适合需要编译校验、避免拼写错误的场景)
把所有图片资源定义为枚举类型,新增图片只需新增枚举case即可,维护成本极低,还能避免手动写字符串出现的拼写错误:enum AppImage: String, CaseIterable { case home = "img_home" case profile = "img_profile" case settings = "img_settings" var swiftUIImage: Image { Image(rawValue) } var uiImage: UIImage? { UIImage(named: rawValue) } } // 直接生成全量图片数组 let swiftUIImageArray = AppImage.allCases.map(\.swiftUIImage) let uiImageArray = AppImage.allCases.compactMap(\.uiImage)
以上两种方案兼容性远高于#imageliteral,不会随Xcode版本升级出现失效问题,批量管理上百张图片时效率优势更明显。
内容的提问来源于stack exchange,提问作者Amish
相关产品推荐
相关产品推荐

