CollectionView中base64转UIImage解包遇nil报错,该如何设置默认返回值
报错原因
- 变量引用错误:函数形参名为
imageBase64String,但构造Data时传入了不存在的变量imageString,直接导致imageData必然为nil - 强制解包风险:
Data(base64Encoded:)、UIImage(data:)两个方法的返回值均为可选类型,只要任意一步解析失败返回nil,末尾的!强制解包就会触发崩溃
解决方案
方案1:修改返回值为可选类型(Swift推荐安全方案)
如果上层调用可以处理图片为空的场景,优先修改返回值类型,从根源避免强制解包:
func convertBase64StringToImage(imageBase64String: String) -> UIImage? { guard let imageData = Data(base64Encoded: imageBase64String), let validImage = UIImage(data: imageData) else { return nil } return validImage }
调用时自行处理空值,比如给UIImageView设置默认占位图即可。
方案2:保留非空返回值(适配现有要求)
如果上层逻辑要求必须返回非空UIImage,可以在解析失败时返回默认占位图:
func convertBase64StringToImage(imageBase64String: String) -> UIImage { guard let imageData = Data(base64Encoded: imageBase64String), let validImage = UIImage(data: imageData) else { // 有自定义占位图的话替换成你的占位图资源名 return UIImage(named: "custom_placeholder") ?? UIImage() // 无自定义占位图时直接返回UIImage(),是空白透明图片,不会触发崩溃 } return validImage }
注意事项
- 传入的base64字符串需要是纯编码内容,如果带有
data:image/png;base64,这类HTTP头前缀,需要先截取掉前缀再传入函数,否则会解析失败 - CollectionView中调用该方法时建议放到异步线程执行,避免阻塞主线程影响滑动流畅度
内容的提问来源于stack exchange,提问作者Mel
相关产品推荐
相关产品推荐

