Xcode 15 增加了一个新功能,当你在 Assets 里新增资源时,它会帮我们自动生成一个 ImageResource 下的静态变量,方便我们调用,也让代码更安全。
我们先向 Xcode 中添加一个图片:

在以前,新增资源后,使用的时候需要手写名称,比如我要使用一个名为 coffee 的图片,需要这样使用
let image = UIImage(named: "coffee")
这样使用的问题显而易见:
-
即使把名字写错了,编译器也不会报错
-
如果有人把
Assets中的资源误删了,编译器也不会报错
但在 Xcode 15 中,编译器会把所有在 Assets 中的资源自动生成一个 ImageResource 类型的常量。

为了使用这种类型,UIImage 也新增了一个初始化方法,接受 ImageResource 类型
@available(iOS 17.0, tvOS 17.0, *)
extension UIImage {
public convenience init(resource: ImageResource)
}
有了这个方法后,我们只需要这样写:
UIImage(resource: .coffee)
而且 Xcode 会有提示:

在 swiftUI 中的 Image 也增加了相同的能力:
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
extension Image {
/// Initialize an `Image` with an image resource.
public init(_ resource: ImageResource)
}
在 Assets 中创建的颜色,有同样的功能:

创建颜色后,编译器自动生成 ColorResource 常量:
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
extension DeveloperToolsSupport.ColorResource {
/// The "myColor" asset catalog color resource.
static let my = DeveloperToolsSupport.ColorResource(name: "myColor", bundle: resourceBundle)
}
使用的时候直接传入 .my 即可

这样就解决了上边提到隐患:
-
编译器有提示,不容易写错
-
如果真的不小心把 resource 名写错了,编译器会直接报错
-
如果其他人删除了一个正在用的图片,编译器也会报错
本文同步自微信公众号 “iOS新知”,每天准时分享一个新知识,这里只是同步,想要获得更好的体验就扫描下方二维码关注我吧!
