You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 10:00:02