如何在Swift 5的UIImageView中使用MySQL内以Blob形式存储的图片
问题原因
接口返回的profile_image为嵌套结构:外层是字典,包含type(字符串类型)、data(数值数组类型,存储图片二进制对应的字节数值)两个核心字段,你之前的两次类型定义都和实际结构不匹配:
- 第一次定义为
[String:[String]]?:要求字典所有值都是字符串数组,与type字段的字符串类型冲突,触发首次解码报错 - 第二次定义为
[String:String]?:要求字典所有值都是字符串,与data字段的数组类型冲突,触发第二次报错
解决方法
1. 调整解码结构
单独定义ProfileImage结构体匹配嵌套结构:
import Foundation import UIKit // 匹配profile_image的嵌套结构 struct ProfileImage: Decodable { let type: String let data: [Int] // 接口返回的是数值数组,用[Int]接收即可 } struct UserData: Decodable { let id: Int let first_name: String let last_name: String let gender: String let email: String let joined: String let profile_image: ProfileImage? // 替换为自定义结构体类型 let rating: Float let rating_count: Int }
2. 转换为UIImage使用
解码成功后,将data字段的数值数组转换为二进制Data,再生成UIImage即可:
// 假设你已经解码得到了userData对象 guard let profileImageData = userData.profile_image?.data else { return } // 把Int数组转成UInt8字节数组,再生成Data let byteArray = profileImageData.map { UInt8($0) } let imageData = Data(bytes: byteArray, count: byteArray.count) // 生成UIImage let image = UIImage(data: imageData)
内容的提问来源于stack exchange,提问作者JoeZ
相关产品推荐
相关产品推荐

