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

无需第三方库,创建类Objective-C风格的Swift Codable JSON解析模型

Swift Codable 模型实现(Objective-C风格)

没问题,我帮你把给出的Objective-C接口转换成纯Swift的Codable模型,完全不依赖第三方库,直接用系统自带的JSON解析API就能处理你提供的JSON数据。

1. Payload 模型类

对应你Objective-C里的Payload接口,我们创建一个继承自NSObject的Swift类,同时遵循Codable协议:

@objcMembers class Payload: NSObject, Codable {
    // 和Objective-C @property 风格一致,设置默认值避免解析崩溃
    var responseCode: Int = 0
    var nextCheckTime: Int = 30
}

2. MessageModel 主模型类

对应你给出的MessageModel接口,同样继承NSObject并遵循Codable:

@objcMembers class MessageModel: NSObject, Codable {
    var type: String = ""
    // 因为JSON里payload是可选存在的,这里设为可选类型更安全
    var payload: Payload? = nil
}

3. JSON 解析示例

下面是如何把你提供的JSON字符串解析成MessageModel实例的代码:

let msg = """
{"type":"TYPE_NM","payload":{"responseCode":0,"nextCheckTime":30}}
"""

do {
    // 把字符串转成Data,用系统JSONDecoder解析
    guard let jsonData = msg.data(using: .utf8) else {
        print("Failed to convert string to data")
        return
    }
    let messageModel = try JSONDecoder().decode(MessageModel.self, from: jsonData)
    
    // 打印解析结果
    print("Type: \(messageModel.type)")
    if let payload = messageModel.payload {
        print("Response Code: \(payload.responseCode)")
        print("Next Check Time: \(payload.nextCheckTime)")
    }
} catch {
    print("解析出错:\(error.localizedDescription)")
}

关键说明

  • 使用@objcMembers修饰类,让所有属性都能被Objective-C访问,完美匹配你要的Objective-C风格属性
  • 继承NSObject和你给出的Objective-C接口结构保持一致
  • 所有属性都设置了默认值,和Objective-C中属性的默认行为对齐,避免因为JSON缺失某个键导致解析崩溃
  • 完全依赖系统的Codable协议和JSONDecoder,不需要任何第三方解析库

内容的提问来源于stack exchange,提问作者Sagar Snehi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:42:20