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

Swift中使用Alamofire构建接口响应模型并实现数据展示的方法

Swift结合Alamofire、SwiftyJSON构建接口数据模型及展示实现方案

实现步骤

  • 第一步:规范数据模型定义,遵循Swift大驼峰命名规则,调整模型层级和接口返回结构完全匹配
  • 第二步:修正Alamofire网络请求中的JSON解析逻辑,确保层级取值正确
  • 第三步:拿到解析完成的模型对象后,赋值给UI控件完成展示,所有UI操作需切到主队列执行

修正后的完整代码

import Foundation
import SwiftyJSON
import Alamofire

// 最外层响应模型,对应接口最外层data字段
struct ResponseData {
    var users : User?
    
    init(json : JSON?) {
        if let value = json?["data"].dictionaryObject {
            self.users = User(json: JSON(value))
        }
    }
}

// 第二层用户容器模型,对应data下的user字段
struct User {
    var userinfo : UserInfo?
    
    init(json : JSON?) {
        if let value = json?["user"].dictionaryObject {
            self.userinfo = UserInfo(json: JSON(value))
        }
    }
}

// 最内层用户详细信息模型
struct UserInfo {
    var id:String?
    var firstname: String?
    var username: String?
    var profilepicture: String?
    var biography: String?
    var lastname: String?
    var gender: String?
    var email: String?
    var phone: String?
    
    init(json : JSON?) {
        self.id = json?["id"].string
        self.firstname = json?["firstname"].string
        self.username = json?["username"].string
        self.profilepicture = json?["profilepicture"].string
        self.biography = json?["biography"].string
        self.lastname = json?["lastname"].string
        self.gender = json?["gender"].string
        self.email = json?["email"].string
        self.phone = json?["phone"].string
    }
}

// 网络请求及解析逻辑(前提:已提前定义urlVal、headers、userData数组变量)
Alamofire.request(urlVal, method: .get, parameters:nil, encoding: URLEncoding.queryString, headers: headers).responseJSON { (resp) in
    switch resp.result {
    case .success(let value):
        let response = JSON(value)
        print("Response JSON: \(response)")
        // 完成模型转换
        let newData = ResponseData(json: response)
        self.userData.append(newData)
        print(self.userData)
        
        // 数据展示示例
        DispatchQueue.main.async {
            // 单个字段展示:将用户名赋值给对应文本控件
            if let firstName = self.userData.first?.users?.userinfo?.firstname {
                self.nameLabel.text = firstName
            }
            // 列表展示:刷新列表控件即可
            self.listTableView.reloadData()
        }
    case .failure(let error):
        print(error)
        break
    }
}

注意事项

  • 可选值取值时建议使用可选绑定处理,避免强制解包导致崩溃
  • 如果接口返回的根节点是数组类型,需要对应调整模型为数组类型接收
  • 所有UI更新操作必须放在主队列执行,不可在网络请求的后台回调中直接操作UI

内容的提问来源于stack exchange,提问作者JAYMEEN SHAH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:24:03