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
相关产品推荐
相关产品推荐

