debug_cat 发表于 2021-3-5 22:46

[ios]获取wanAndroid的公众号列表数据(连载2)

本帖最后由 莫问刀 于 2021-3-7 22:47 编辑



上面是效果图
## ios网络请求-> 列表展示数据

## 背景

网络请求工具:Alamofire

列表展示控件:uitableview

json转模型:AlamofireObjectMapper

---

### 获取wanAndroid的api数据

https://wanandroid.com/wxarticle/chapters/json

数据不多,不用分页。

---

- 控制器代码

```swift
//
//WxListController.swift
//uitable
//
//Created by Alice on 2021/3/5.
//
import AlamofireObjectMapper
import UIKit
import Alamofire

//公众号列表展示页面               
class WxListController: UIViewController, UITableViewDelegate, UITableViewDataSource{

   
    //保存微信列表
    var wxList = ()
   
    private lazy var uiTableView : UITableView = {
      let tab = UITableView(frame: .zero)
      
      return tab
    }()
   
    override func viewDidLoad() {
      super.viewDidLoad()
      view.addSubview(uiTableView)
      uiTableView.snp.makeConstraints { (make) in
            //大小和父容器一样大
            make.width.equalToSuperview()
            //设置上下位置,在安全区内
            make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
            make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
      }
      //设置代{过}{滤}理
      uiTableView.delegate = self
      uiTableView.dataSource = self
      uiTableView.rowHeight = UITableView.automaticDimension
      uiTableView.register(CellWxAuthor.self, forCellReuseIdentifier: "cell")
      getWxList()
    }
   
    func getWxList() {
      //获取列表数据
      Alamofire.request(ApiConstant.getChaptersUrl()).responseObject { (response: DataResponse<BeanWxList>) in
            
            let wxListBean = response.result.value
            //print(wxListBean?.data?.toJSONString() ?? "")
            self.wxList = wxListBean?.data ?? ()
            self.uiTableView.reloadData()
            
      }
      
    }
}
//tabview的cell实现
extension WxListController{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      return wxList.count
    }
   
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CellWxAuthor
      
      //设置数据
      cell.setValueForCell(data: wxList)
      return cell
    }
}

```



- 模型代码

```swift
//
//BeanWxList.swift
//uitable
//公众号列表模型
//Created by Alice on 2021/3/5.
//

import Foundation
import ObjectMapper

class BeanWxList: Mappable {
      
      var errorCode : Int = 0
      var errorMsg : String =""
      var data : ?
      
      required init?(map: Map) {
         
      }
      
      func mapping(map: Map) {
          errorCode   <- map["errorCode"]
          errorMsg    <- map["errorMsg"]
          data      <- map["data"]
      }
}

class WxAuthor: Mappable {
      required init?(map: Map) {
         
      }
      
      func mapping(map: Map) {
          courseId          <- map["courseId"]
          id                <- map["id"]
          name            <- map["name"]
          order             <- map["order"]
          parentChapterId   <- map["parentChapterId"]
      }
      
      var courseId: Int = 0
      var id : Int = 0
      var name : String = ""
      var order : Int = 0
      var parentChapterId : Int = 0
}

```



- cell代码

```swift
//
//CellWxAuthor.swift
//uitable
//
//Created by Alice on 2021/3/5.
//
import UIKit
import Foundation
import SnapKit
//微信作者
class CellWxAuthor: UITableViewCell {
      
      private lazy var labName : UILabel = {
          let lab = UILabel(frame: .zero)
          //显示作者名字
          lab.numberOfLines = 1
          lab.textColor = ColorUtils.parser("#000811")
          return lab
      }()
      
      private lazy var labID : UILabel = {
          let lab = UILabel(frame: .zero)
          //显示作者id
          lab.textColor = ColorUtils.parser("#666666")
          return lab
      }()
      
      required init?(coder: NSCoder) {
          fatalError("init(coder:) has not been implemented")
      }
      override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
          super.init(style: style, reuseIdentifier: reuseIdentifier)
          //ui编写
          addSubview(labName)
          addSubview(labID)
         
          //开始约束,名字在上面,id在下面.
          labName.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(12)
            make.top.equalToSuperview().offset(12)
            
          }
         
          labID.snp.makeConstraints { (make) in
            //左边位置到屏幕左边,margin 12
            make.left.equalToSuperview().offset(12)
            //顶部在name的下边,margin top 4
            make.top.equalTo(labName.snp.bottom).offset(4)
            //一定要约束下边.距离-12
            //下和右的margin,都是负数
            make.bottom.equalTo(-12)
          }
      }
      
      //设置数据
      func setValueForCell(data : WxAuthor) {
          labName.text = data.name
          labID.text = String(data.id)
      }
}

```



> 纯代码构建的ui。
>
> 当前目标,就是先加载出列表数据。
>
> 点击不同的作者,进入该作者的文章列表中。展示文章的标题,封面等数据。
>
> 点击文章列表,进入文章详情中。webview展示。

以上就是简单的网络数据获取,和ui展示。

下一篇就是页面的跳转了。

代码地址

https://github.com/cat13954/IOSUiTableViewSample

a3322a 发表于 2021-3-6 03:35

感谢分享,学习了!

日月与你 发表于 2021-3-6 09:17

学习了,感谢楼主
页: [1]
查看完整版本: [ios]获取wanAndroid的公众号列表数据(连载2)