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

Swift解析Alamofire返回的JSON数组至自定义Person模型(Xcode8)

解决Xcode 8下Alamofire解析JSON数组到Person模型的方案

Hey there! 既然你用的是Xcode 8(对应Swift 3,确实还没引入Codable),那咱们就用传统的手动解析方式来搞定这个需求,其实上手很简单~

第一步:定义Person模型

先把你的Person模型写好,我们给它加一个从字典初始化的方法,用来做类型校验和字段提取:

struct Person {
    var name: String
    var id: String
    
    // 从字典初始化,若字段缺失/类型不匹配则返回nil
    init?(dict: [String: Any]) {
        guard let id = dict["id"] as? String,
              let name = dict["name"] as? String else {
            print("Person字典字段不符合要求")
            return nil
        }
        self.id = id
        self.name = name
    }
}

第二步:Alamofire请求+解析

接下来处理Alamofire的请求响应,把返回的JSON数组逐个转成Person实例:

import Alamofire

// 替换成你的实际接口地址
let targetURL = "https://your-api-endpoint.com/persons"

Alamofire.request(targetURL).responseJSON { response in
    switch response.result {
    case .success(let jsonData):
        // 先把响应数据转成[[String: Any]]类型的数组
        guard let personJSONArray = jsonData as? [[String: Any]] else {
            print("响应格式错误,不是预期的JSON数组")
            return
        }
        
        // 遍历数组,生成Person模型数组
        var personList: [Person] = []
        for personDict in personJSONArray {
            if let person = Person(dict: personDict) {
                personList.append(person)
            } else {
                print("跳过解析失败的Person数据: \(personDict)")
            }
        }
        
        // 到这里personList就是你要的模型数组啦,后续可以直接使用
        print("解析完成,共获取\(personList.count)个Person")
        for person in personList {
            print("ID: \(person.id) | Name: \(person.name)")
        }
        
    case .failure(let error):
        print("请求接口失败: \(error.localizedDescription)")
    }
}

一些注意事项

  • 这个方法的核心是手动类型校验,用guard语句确保每个字段的类型和存在性,避免因为接口返回异常导致崩溃
  • 如果接口返回的id是数字类型(比如1而不是"1"),你可以在初始化方法里把它转成String:let id = "\(dict["id"] as? Int ?? 0)"(根据实际情况调整默认值)
  • 如果你需要处理更复杂的嵌套JSON,只需要在Person模型里加对应的属性,然后在初始化方法里逐层解析嵌套字典就好

内容的提问来源于stack exchange,提问作者Tony George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:30:55