func setImageNames(_ imageNames: [String]) {
let images = imageNames.compactMap { UIImage(named: $0) }
setImages(images)
}
方法来处理图片名称数组,让我详细解释一下:# 这段代码使用了 Swift 中的 compactMap 方法来处理图片名称数组,让我详细解释一下:
代码功能
let images = imageNames.compactMap { UIImage(named: $0) }
这行代码的作用是将字符串数组 imageNames 转换为 UIImage 对象数组。
compactMap 的作用
compactMap 有两个主要功能:
- 转换(Map):对数组中的每个元素执行转换操作
- 过滤(Compact):自动过滤掉转换结果为
nil的元素
具体执行过程
假设有:
let imageNames = ["photo1", "photo2", "invalid_image", "photo3"]
执行流程:
- 遍历
imageNames中的每个元素 - 对每个图片名称调用
UIImage(named: $0) - 如果图片存在,返回对应的
UIImage对象 - 如果图片不存在(返回
nil),自动过滤掉该元素 - 最终返回一个只包含有效图片的
[UIImage]数组
与普通 map 的区别
// 使用 map - 可能包含 nil 值
let imagesWithNil = imageNames.map { UIImage(named: $0) }
// 结果类型: [UIImage?]
// 使用 compactMap - 自动过滤 nil
let imagesWithoutNil = imageNames.compactMap { UIImage(named: $0) }
// 结果类型: [UIImage]
实际效果
如果资源中存在 "photo1" 和 "photo3" 但不存在 "invalid_image":
- 输入:
["photo1", "photo2", "invalid_image", "photo3"] - 输出:
[UIImage(photo1), UIImage(photo3)]
这样确保了 setImages(images) 方法接收到的都是有效的图片对象,避免了因图片不存在导致的异常。