SwiftUI中不使用UIImage如何将base64图片字符串转为Image可加载格式
解决方案
SwiftUI 从 iOS 16/macOS 13 开始提供了原生的 Image(data:) 初始化方法,不需要借助 UIImage 即可直接从图片二进制数据生成 Image 实例,对应你的需求只需要先把base64字符串转为Data即可。
注意事项
- 首先要判断base64字符串是否带
data:image/xxx;base64,这类MIME前缀,如果有的话需要先剔除前缀再做转换 - 部分base64字符串会携带换行、空格等无效字符,转换前需要先清理避免转换失败
- 要增加容错处理,避免base64非法时页面崩溃
完整实现代码
import SwiftUI struct ContentView: View { @State var img_base64:String = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD [...]" var body: some View { if let imageData = Data(base64Encoded: cleanBase64String(img_base64)), let image = Image(data: imageData) { image .resizable() .scaledToFit() } else { // 加载失败占位图,可根据需求修改 Image(systemName: "photo.badge.exclamationmark") } } // 清理base64字符串的工具方法 private func cleanBase64String(_ rawStr: String) -> String { // 去除换行、空格、回车等无效字符 var cleanStr = rawStr.replacingOccurrences(of: "\n", with: "") .replacingOccurrences(of: "\r", with: "") .replacingOccurrences(of: " ", with: "") // 剔除MIME前缀 if cleanStr.contains("base64,") { cleanStr = cleanStr.components(separatedBy: "base64,").last ?? cleanStr } return cleanStr } }
如果你的应用需要兼容 iOS 15 及更低版本,SwiftUI 原生没有提供
Image(data:)方法,此时如果严格要求不能使用UIImage没有原生方案可选,建议提升应用最低支持版本到 iOS 16。
内容的提问来源于stack exchange,提问作者user2926577
相关产品推荐
相关产品推荐

