Swift:简单的demo
2018-12-21 本文已影响60人
春暖花已开
包括Alamofire的网络请求,HandyJSON解析,Kingfisher的图片加载和cell高度自适应
先上效果图:
![](https://img.haomeiwen.com/i2028539/4bbeaa6367a863c3.png)
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!)