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

iOS Swift中获取API全量数据 仅在Cell显示Title的实现方法

实现全量数据拉取 + Cell点击展示详情

没问题,我来帮你一步步完成这个需求,核心思路是先把API返回的全量数据存起来,Cell只展示title字段,点击时再取出对应数据的完整信息用Alert展示:

1. 定义完整的数据模型

首先创建一个符合Codable的结构体,用来映射API返回的所有字段(比如id、title、body等),这样Alamofire可以直接帮我们完成数据解析:

struct Post: Codable {
    let id: Int
    let title: String
    let body: String
    // 如果API还有其他字段(比如userId),直接在这里添加对应的属性即可
}

2. 修改Alamofire请求,拉取全量数据

把原来只解析title的请求改成解析整个Post数组,同时将数据源替换为[Post]类型:

import Alamofire
import UIKit

class YourViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    // 替换原来的[String]数据源为Post数组
    private var posts: [Post] = []
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = self
        tableView.delegate = self
        fetchFullPosts()
    }

    private func fetchFullPosts() {
        let apiURL = "你的API地址" // 替换成实际的API URL

        AF.request(apiURL)
            .responseDecodable(of: [Post].self) { [weak self] response in
                guard let self = self else { return }
                switch response.result {
                case .success(let fetchedPosts):
                    self.posts = fetchedPosts
                    self.tableView.reloadData() // 刷新表格
                case .failure(let error):
                    print("数据请求失败: \(error.localizedDescription)")
                }
            }
    }
}

3. 更新TableView的Cell展示逻辑

保持Cell只显示title,数据源改用我们的Post数组:

// 实现TableView数据源方法
extension YourViewController {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return posts.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 注意替换成你实际的Cell标识符
        let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath)
        let currentPost = posts[indexPath.item]
        cell.textLabel?.text = currentPost.title // 仅显示title
        return cell
    }
}

4. 处理Cell点击,弹出Alert展示详情

实现TableView的didSelectRowAt方法,点击时取出对应位置的Post数据,用Alert展示完整信息:

// 实现TableView代理方法处理点击
extension YourViewController {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // 点击后取消Cell的选中状态,提升体验
        tableView.deselectRow(at: indexPath, animated: true)
        
        let selectedPost = posts[indexPath.item]
        // 构建Alert的内容,把需要展示的字段拼接进去
        let alert = UIAlertController(
            title: "帖子详情 #\(selectedPost.id)",
            message: """
            标题: \(selectedPost.title)
            
            内容: \(selectedPost.body)
            """,
            preferredStyle: .alert
        )
        // 添加确认按钮
        alert.addAction(UIAlertAction(title: "确定", style: .default))
        
        // 弹出Alert
        present(alert, animated: true)
    }
}

一些注意事项

  • 确保你的TableView已经设置了正确的Cell标识符,并且在Storyboard/XIB中关联了tableView的IBOutlet
  • 如果API返回的字段名和模型属性名不一致(比如API里是post_title而你模型里是title),可以用CodingKeys来映射:
    enum CodingKeys: String, CodingKey {
        case id
        case title = "post_title"
        case body = "post_body"
    }
    
  • 网络请求中用[weak self]避免循环引用,防止内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:42:33