debug_cat 发表于 2021-3-5 00:01

[ios]获取网络数据显示到列表上(连载1)

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

## ios获取网络数据,ui tableview展示

- 主页代码
```
import AlamofireObjectMapper
import UIKit
import Alamofire
class ViewController: UIViewController ,UITableViewDelegate,UITableViewDataSource{
    let cellId = "sob_loop"

    var list = ()
   
    private lazy var tableView :UITableView = {
      let tab = UITableView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height), style: UITableView.Style.plain)
      return tab
    }()
   
    let blogUrl = "http://moonlightshadow.cn:2020/portal/web_size_info/friend_link"
   
    override func viewDidLoad() {
      super.viewDidLoad()
      //添加到主视图
      view.addSubview(tableView)
      //注册代{过}{滤}理
      tableView.dataSource = self
      tableView.delegate = self
      //高度自动
      tableView.rowHeight = UITableView.automaticDimension
      tableView.register(CellLoopDetail.self, forCellReuseIdentifier: cellId)
      //请求网络数据
      httpGetLoop()
    }
   

}
extension ViewController{
    func httpGetLoop() {
      Alamofire.request(blogUrl).responseObject { (response: DataResponse<LoopBean>) in

            let weatherResponse = response.result.value
            //print(weatherResponse?.message ?? "")
            self.list = weatherResponse?.data ?? ()
            self.tableView.reloadData()
            //print("\(self.list.count)")
      }
    }
}

extension ViewController{
   
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      return list.count
    }
   
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      //item
      let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! CellLoopDetail
         
      cell.setValueForCell(item: self.list)
      return cell
    }
}

```

- cell代码
```
//
//CellLoopDetail.swift
//sw-http
//
//Created by Alice on 2021/3/2.
//

import Foundation
import UIKit
import SnapKit
import Kingfisher
class CellLoopDetail: UITableViewCell {
   
    private lazy var ivLoop :UIImageView = {
      let img = UIImageView()
      //比例,填充,超出界限,裁剪
      img.contentMode = .scaleAspectFill
      img.clipsToBounds = true
      img.layer.cornerRadius = 6
      img.layer.masksToBounds = true
      return img
    }()
   
    private lazy var labTitle:UILabel = {
       let lab = UILabel()
      //单行显示
      lab.lineBreakMode = NSLineBreakMode.byWordWrapping
      lab.numberOfLines = 1
      lab.textColor = ColorUtils.parser("#313131")
      
      return lab
    }()
   
    private lazy var labDesc:UILabel = {
       let lab = UILabel()
      lab.lineBreakMode = NSLineBreakMode.byWordWrapping
      lab.numberOfLines = 1
      lab.textColor = ColorUtils.parser("#666666")
      
      return lab
    }()
   
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
      super.init(style: style, reuseIdentifier: reuseIdentifier)
      addSubview(ivLoop)
      addSubview(labTitle)
      addSubview(labDesc)
      ivLoop.snp.makeConstraints { (make) in
            make.size.equalTo(50)
            make.left.equalToSuperview().offset(10)
            make.top.equalToSuperview().offset(10)
            make.bottom.equalToSuperview().offset(-10)
      }
      labTitle.snp.makeConstraints { (make) in
            make.top.equalTo(ivLoop.snp.top)
            make.left.equalTo(ivLoop.snp.right).offset(10)
      }
      labDesc.snp.makeConstraints { (make) in
            make.left.equalTo(ivLoop.snp.right).offset(10)
            make.bottom.equalTo(ivLoop.snp.bottom)
      }
    }
   
    required init?(coder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
    }
   
   
   
    func setValueForCell(item: Forecast){
      
      let imagePath = "http://mp.moonlightshadow.cn:2020/admin/image/"
      //设置轮播图的数据
      labTitle.text = item.name
      labDesc.text = item.id
      //图片显示
      if let img = item.logo {
            print(img)
            let url = URL(string: imagePath + img)
            ivLoop.kf.setImage(with: url)
      }
      
    }
}

```

- 模型
```
//
//WeatherResponse.swift
//sw-http
//
//Created by Alice on 2021/3/2.
//

import Foundation
import ObjectMapper

class LoopBean: Mappable {
    var success :Bool=false
    var code :Int=0
    var message : String=""
    var data : ?
   
    required init?(map: Map){

    }
   
    func mapping(map: Map) {
      success   <- map["success"]
      code      <- map["code"]
      message   <- map["message"]
      data      <- map["data"]
    }
}

class Forecast: Mappable {
    var id:String?
    var name:String?
    var logo:String?
    var url:String?
    var order:Int?
    var state:String?
    var createTime:String?
    var updateTime:String?
   
   
    required init?(map: Map){

    }
   
    func mapping(map: Map) {
      id          <- map["id"]
      name      <- map["name"]
      logo      <- map["logo"]
      url         <- map["url"]
      order       <- map["order"]
      state       <- map["state"]
      createTime<- map["createTime"]
      updateTime<- map["updateTime"]
      
    }
}

```

这是源码地址
https://github.com/cat13954/IOSUiTableViewSample.git

后面会继续分享。
现在是自己学习,写一个app。
这个app demo包含了网络请求,json转模型,图片加载。
是学习笔记。
计划:今年写一个属于自己的app。

大猫King 发表于 2021-3-5 01:00

不懂 看着很高级的亚纸,爱了爱了,纯帮顶~~~
楼主加油~

52jcool 发表于 2021-3-5 09:22

ios应用是要mac机才能开发?

mo211683 发表于 2021-3-5 09:46

大猫King 发表于 2021-3-5 01:00
不懂 看着很高级的亚纸,爱了爱了,纯帮顶~~~
楼主加油~

谢谢额,这个是学习笔记有需要可以收藏

mo211683 发表于 2021-3-5 09:48

52jcool 发表于 2021-3-5 09:22
ios应用是要mac机才能开发?

最好是使用苹果电脑开发,现在也可以用黑苹果开发的。只是没那么方便的。
比如xcode开发工具的升级。或者系统升级==,因为黑苹果升级比较麻烦。如果是单纯学习可以用黑苹果的。
页: [1]
查看完整版本: [ios]获取网络数据显示到列表上(连载1)