swift入门

Swift:简单的demo

2018-12-21  本文已影响60人  春暖花已开
包括Alamofire的网络请求,HandyJSON解析,Kingfisher的图片加载和cell高度自适应

先上效果图:


VC
import UIKit

import SnapKit
import Reusable
import Alamofire

class YQUpdateMainVC: UIViewController {
    
    var dataList: [YQUpdateComicsModel] = []
    
    private lazy var mTableView: UITableView = {
        let mTableView = UITableView()
        mTableView.delegate = self
        mTableView.dataSource = self
        mTableView.estimatedRowHeight = 375
        mTableView.rowHeight = UITableViewAutomaticDimension
        mTableView.register(cellType: YQUpdateMainCell.self)
        return mTableView
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        buildViews()
        getDataFromServer()
        
    }
    
    //MARK: - create UI
    private func buildViews() {
        view.addSubview(mTableView)
        mTableView.snp.makeConstraints { (make) in
            make.edges.equalToSuperview()
        }
    }

    //MARK: - 网络请求
    private func getDataFromServer() {
        Alamofire.request("http://app.u17.com/v3/appV3_3/ios/phone/list/todayRecommendList").responseString { [weak self] (response) in
            
            guard let jsonValue = response.result.value else {return}
            guard let model = YQUpdateMainModel.deserialize(from: jsonValue) else {return}
            
            if let comicsModel = model.data?.returnData?.comics {
                self?.dataList = comicsModel
                self?.mTableView.reloadData()
            }
        }
    }
}


extension YQUpdateMainVC: UITableViewDelegate, UITableViewDataSource {
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataList.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: YQUpdateMainCell = tableView.dequeueReusableCell(for: indexPath)
        cell.model = dataList[indexPath.row]
        return cell
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
    }
}

Model
import Foundation

import HandyJSON

struct YQUpdateMainModel: HandyJSON {
    var code: Int = 0
    var data: YQUpdateDataModel?
    var msg: String?
}

struct YQUpdateDataModel: HandyJSON {
    var stateCode: Int = 0
    var returnData: YQUpdateReturnDataModel?
    var message: String?
}

struct YQUpdateReturnDataModel: HandyJSON {
    var hasMore: Bool = false
    var comics = [YQUpdateComicsModel]()
    var page: Int = 0
    var isNew: Bool = false
    var curDay: Int = 0
}

struct YQUpdateTagListModel: HandyJSON {
    var tagStr: String?
    var tagColor: String?
}

struct YQUpdateComicsModel: HandyJSON {
    var actionType: Int = 0
    var cover: String?
    var chapterIndex: Int = 0
    var todayId: Int = 0
    var description: String?
    var tagList = [YQUpdateTagListModel]()
    var title: String?
    var chapterId: Int = 0
    var uiType: Int = 0
    var author: String?
    var comicId: Int = 0
    var btnColor: Int = 0
}
Cell
import UIKit

import Reusable
import SnapKit
import Kingfisher

class YQUpdateMainCell: UITableViewCell, Reusable {

    //MARK: - Getters
    private lazy var imgButton: UIButton = {
        let button = UIButton(type: .custom)
        return button
    }()
    
    private lazy var titleLabel: UILabel = {
        let label = UILabel(title: "惊叹之夜", fontSize: 17, fontColor: "333333")
        label.font = UIFont.boldSystemFont(ofSize: 17)
        return label
    }()
    
    private lazy var tagLabel: UILabel = {
        let label = UILabel(title: "魔幻", fontSize: 12, fontColor: "ffffff")
        label.layer.backgroundColor = UIColor(hexString: "ff0025")?.cgColor
        label.layer.cornerRadius = 6
        return label
    }()
    
    private lazy var updateLabel: UILabel = {
        let label = UILabel(title: "更新至", fontSize: 12, fontColor: "666666")
        return label
    }()
    
    private lazy var nameLabel: UILabel = {
        let label = UILabel(title: "兔B", fontSize: 12, fontColor: "666666")
        return label
    }()

    private lazy var showButton: UIButton = {
        let button = UIButton(type: .custom)
        button.setTitle("全集", for: .normal)
        button.titleLabel?.font = UIFont.systemFont(ofSize: 14)
        button.setTitleColor(UIColor(hexString: "666666"), for: .normal)
        button.setImage(UIImage(named: "mineRightArrow"), for: .normal)
        button.addTarget(self, action: #selector(buttonSkip), for: .touchUpInside)
        button.layoutButtonImageStyle(style: UIButton.MZImageStyle.right, imageTitleSpace: 10)
        return button
    }()
    
    
    //MARK: - Setter
    var model: YQUpdateComicsModel? {
        didSet {
            guard let model = model else { return }
            
            titleLabel.text = model.title
            tagLabel.text = " " + (model.tagList.first?.tagStr)! + " "
            nameLabel.text = model.author
            updateLabel.text = "更新至 " + model.description!
            
            imgButton.kf.setImage(with: URL(string: "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=729382916,2146689896&fm=26&gp=0.jpg"), for: .normal)
        }
    }
    
    
    //MARK: - Initializer
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        buildSubviews()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    @objc private func buttonSkip() {
        
    }
    
    
    // 添加子视图
    private func buildSubviews() {
        
        contentView.addSubview(imgButton)
        contentView.addSubview(titleLabel)
        contentView.addSubview(tagLabel)
        contentView.addSubview(updateLabel)
        contentView.addSubview(nameLabel)
        contentView.addSubview(showButton)
        
        imgButton.snp.makeConstraints { (make) in
            make.top.left.right.equalToSuperview()
            make.height.equalTo(280)
        }
        
        titleLabel.snp.makeConstraints { (make) in
            make.top.equalTo(imgButton.snp.bottom).offset(20)
            make.left.equalTo(20)
            make.size.equalTo(titleLabel).inset(UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5))
        }
        
        tagLabel.snp.makeConstraints { (make) in
            make.left.equalTo(titleLabel.snp.right).offset(10)
            make.centerY.equalTo(titleLabel)
            make.size.equalTo(tagLabel)
        }
        
        nameLabel.snp.makeConstraints { (make) in
            make.size.equalTo(nameLabel)
            make.right.equalTo(-20)
            make.centerY.equalTo(titleLabel)
        }
        
        updateLabel.snp.makeConstraints { (make) in
            make.left.equalTo(titleLabel)
            make.top.equalTo(titleLabel.snp.bottom).offset(15)
            make.size.equalTo(updateLabel)
            make.bottom.equalTo(-20)
        }
        
        showButton.snp.makeConstraints { (make) in
            make.size.equalTo(showButton)
            make.right.equalTo(nameLabel)
            make.centerY.equalTo(updateLabel)
        }
    }
}

小tips:

清除程序里所有的偏好设置:

let bundleID = Bundle.main.bundleIdentifier
UserDefaults.standard.removePersistentDomain(forName: bundleID!)
上一篇 下一篇

猜你喜欢

热点阅读