swift5 json

HomeViewController.swift

import UIKit
import Alamofire

let kHomeCellID = "kHomeCellID"
class HomeViewController: UIViewController {

    fileprivate lazy var newsModels : [NewsModel] = [NewsModel]()
    fileprivate lazy var tableView : UITableView = {[weak self] in
        let tableView = UITableView()
        tableView.frame = self!.view.bounds
        tableView.dataSource = self
        tableView.rowHeight = 100
        tableView.register(UINib(nibName: "NewsTableViewCell",bundle: nil), forCellReuseIdentifier: kHomeCellID)
//        tableView.register(UITableViewCell.self, forCellReuseIdentifier: kHomeCellID)
//        tableView.
        return tableView
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupNavigationBar()
//        setNeedsStatusBarAppearanceUpdate()
        navigationController?.navigationBar.barStyle = .black
        self.view.addSubview(self.tableView)
      
        loadData()

    }
    
    private func setupNavigationBar() {
        navigationController?.navigationBar.setBackgroundImage(UIImage(named: "Img_orange"), for: .default)
        
        navigationItem.titleView = UIImageView(image: UIImage(named: "home_header_hot"))
        navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "btn_column_normal"), style: .plain, target: self, action: #selector(searchItemClick))
    }
    

    

}

extension HomeViewController {
    @objc func searchItemClick() {
        print("---------")
        
    }
    
    
    fileprivate func loadData(){
        NetworkTools.requestData(urlString: "https://c.m.163.com/nc/article/list/T1348649079062/0-20.html", type: .get) { (result:Any) in
//            print(result)
            guard let resultDict = result as? [String:Any] else {return}
//            print(resultDict)
            guard let dataArray = resultDict["T1348649079062"] as? [[String:Any]] else {return}
            
            for dict in dataArray {
                
                self.newsModels.append(NewsModel(dict: dict))
//                print((NewsModel(dict: dict) as NewsModel).title )

            }
            
            self.tableView.reloadData()
  
        }
    }
}

extension HomeViewController : UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//        print(newsModels.count)
        return newsModels.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: kHomeCellID, for: indexPath) as! NewsTableViewCell
        
        cell.textLabel?.text = "\(indexPath.row)"
//        cell.textLabel?.text = newsModels[indexPath.row].title
        
        cell.newsModel = newsModels[indexPath.row]
//        print("title: \(newsModels[indexPath.row].title)")

        return cell
    }
    
    
}

NewsTableViewCell.swift

import UIKit
import Kingfisher

class NewsTableViewCell: UITableViewCell {
    
    @IBOutlet weak var iconImageView: UIImageView!
    
    @IBOutlet weak var titleLabel: UILabel!
    
    @IBOutlet weak var sourceLabel: UILabel!
    
    @IBOutlet weak var replyCountLabel: UILabel!
    
    var newsModel : NewsModel? {
        didSet {
            titleLabel.text = newsModel!.title
            sourceLabel.text = newsModel?.source
//            print("title: " + newsModel!.title )
            replyCountLabel.text = "\(newsModel?.replyCount ?? 0)"
            
            let iconURL = URL(string: newsModel?.imgsrc ?? "")
            iconImageView.kf.setImage(with: iconURL)
        }
    }
    

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

NewsModel.swift

import UIKit
@objcMembers
@objc class NewsModel: NSObject {
    @objc var replyCount : Int = 0
    @objc var title : String = ""
    @objc var source : String = ""
    @objc var imgsrc : String = ""
    @objc var postid : String = ""
    @objc init(dict : [String : Any]) {
        super.init()
        
        //不知道为什么,就是不好用.
        setValuesForKeys(dict)
//        print("dict: \(dict)")

    }
    
    //一些东西没有读取,防止报错
    @objc  override func setValue(_ value: Any?, forKey key: String) {
        print(key)
        if key == "title" {
            guard let title = value as? String else {return}
            self.title = title
        }
        if key == "source" {
            guard let source = value as? String else {return}
            self.source = source
        }
        if key == "imgsrc" {
            guard let imgsrc = value as? String else {return}
            self.imgsrc = imgsrc
        }
        if key == "replyCount" {
            guard let replyCount = value as? Int else {return}
            self.replyCount = replyCount
        }
    }
}

NetworkTools.swift

import UIKit
import Alamofire

enum MethodType
{
    case get
    case post
}

class NetworkTools {
    

    
    class func requestData(urlString : String, type : MethodType, paramters : [String:Any]? = nil, finishdCallback : @escaping ( _ result:Any) ->()) {
        
        let method = type == .get ? HTTPMethod.get : HTTPMethod.post
        
        AF.request(urlString, method: method, parameters: paramters).responseJSON { (response) in
            guard let result = response.value else {
                print(response.error as Any)
                print("=========")
                return
            }
            
            finishdCallback(result)
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值