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)
}
}
}