SwiftUI中如何获取AsyncImage加载完成的图片并直接保存?
报错原因
你遇到的编译错误是因为AsyncImage的内容闭包要求返回符合View协议的类型,而SwiftUI的结果构造器(Result Builder)会默认把闭包内最后一行代码的执行结果作为返回值。你原代码的.success分支内有两行代码:
- 配置好的
Image视图 - 给
urlImageModel.image赋值的操作,该操作返回空类型()
因此闭包最终返回了(),自然无法符合View协议要求,就触发了这个编译错误。
解决方案
方案1:显式声明返回的View
你可以主动指定返回的视图,把赋值操作放在返回语句之前即可:
case .success(let image): let renderedImage = image .resizable() .scaledToFit() // 赋值操作放在返回前执行 urlImageModel.image = renderedImage.snapshot() // 显式返回符合View协议的图片视图 return renderedImage
方案2:通过onAppear修饰符执行副作用(更推荐)
更符合SwiftUI声明式编程习惯的写法是把存储图片这类副作用放到onAppear修饰符的回调中执行,无需显式声明返回值:
case .success(let image): image .resizable() .scaledToFit() .onAppear { // 视图渲染完成后执行存储逻辑,不影响View构造 urlImageModel.image = image.snapshot() }
内容的提问来源于stack exchange,提问作者BillyPullscription
相关产品推荐
相关产品推荐

