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

Swift中字典转结构体遇阻,请求MessageKit适配协助

解决Swift中[String, Any]字典转Codable结构体适配MessageKit的问题

问题核心

自定义Codable结构体与API返回的JSON键名不匹配,且未完成[String:Any]到Data的正确转换,导致解析失败。

解决方案步骤

1. 修正结构体的JSON键映射

API返回的JSON采用下划线命名(如parent_chat),而Swift结构体使用驼峰命名(parentChat)。通过设置JSONDecoder的键解码策略可自动适配,无需手动编写CodingKey:

let decoder = JSONDecoder()
// 自动将JSON下划线命名转换为Swift驼峰命名
decoder.keyDecodingStrategy = .convertFromSnakeCase

2. 完成[String:Any]到Data的转换

Codable解析依赖Data类型,需先将字典转成Data:

// 假设apiResponse是接口返回的[String:Any]字典
guard let jsonData = try? JSONSerialization.data(withJSONObject: apiResponse, options: []) else {
    print("字典转Data失败")
    return
}

3. 执行解析并处理错误

do {
    let response = try decoder.decode(Response.self, from: jsonData)
    // 解析成功,获取聊天数据数组response.parentChat
} catch {
    print("解析错误:\(error.localizedDescription)")
    // 打印详细错误定位问题(如键不匹配、类型不兼容)
    print("详细错误信息:\(error)")
}

4. 适配MessageKit展示

将ParentChat转换为符合MessageType协议的结构体,满足MessageKit的展示要求:

// 定义符合SenderType协议的发送者结构体
struct ChatSender: SenderType {
    let senderId: String
    let displayName: String
}

// 定义符合MessageType的聊天消息结构体
struct ChatMessage: MessageType {
    let sender: SenderType
    let messageId: String
    let sentDate: Date
    let kind: MessageKind
    
    init(from parentChat: ParentChat) {
        self.sender = ChatSender(senderId: "\(parentChat.sender_type)", displayName: parentChat.sender_name)
        self.messageId = "\(parentChat.id)"
        
        // 根据API返回的chat_time格式配置DateFormatter
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" // 需与API返回的时间格式一致
        self.sentDate = dateFormatter.date(from: parentChat.chat_time) ?? Date()
        
        self.kind = .text(parentChat.message)
    }
}

// 将解析后的数组转换为MessageKit可用的消息数组
let messageKitMessages = response.parentChat.map { ChatMessage(from: $0) }

报错说明

截图中的错误源于JSON键名与结构体属性名不匹配,设置keyDecodingStrategy = .convertFromSnakeCase即可解决该问题。

内容的提问来源于stack exchange,提问作者Ankit Tale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:05:01