当前位置: 首页 > news >正文

企业网站后台模版app开发开发公司

企业网站后台模版,app开发开发公司,上海正规网站建设,电子商务网站建设设计方案文章目录 RxSwift - 实现一个MVVM架构的TableView前沿MVVM架构的Tableview目录结构1、模型#xff08;Model#xff09;2、视图模型#xff08;ViewModel#xff09;3、视图#xff08;View#xff09; 界面效果 RxSwift - 实现一个MVVM架构的TableView 前沿 MVVM架构在… 文章目录 RxSwift - 实现一个MVVM架构的TableView前沿MVVM架构的Tableview目录结构1、模型Model2、视图模型ViewModel3、视图View 界面效果 RxSwift - 实现一个MVVM架构的TableView 前沿 MVVM架构在在实际开发中被广泛应用它让代码结构清晰美观易于阅读维护同时也弥补了MVC结构中Controller臃肿的问题 今天来实现一个基于RxSwift的基础TableView页面 效果使用RxSwift将View与Model进行绑定实现动态修改数据时更新UI MVVM架构的Tableview 目录结构 以下是目录结构 目录由ViewModel、View、Model三个文件夹组成 1、模型Model 在Model文件夹下新建Product文件 import Foundationstruct Product {let imgName: String // 图let name: String// 名称let price: String// 价格 }模型简单表示了一个商品的 2、视图模型ViewModel 在ViewModel文件夹下新建ProductViewModel文件。它相当于是View和Model的桥梁在ViewModel中会有相应的获取数据以及处理数据的方法然后将数据传输到View import Foundation import RxSwiftclass ProductViewModel {// PublishSubject 只会发送新的事件给订阅者订阅之前的事件不会发送// BehaviorSubject 会保持最新的值并将其发送给新的订阅者let items PublishSubject[Product]() // let items BehaviorSubject[Product](value: [])var productArray: [Product]!func fetchProductList() {// 在这里可以做网络请求// 咱们就直接用假数据productArray [Product(imgName: apple, name: apple, price: 10),Product(imgName: banana, name: banana, price: 5),Product(imgName: pear, name: pear, price: 4),Product(imgName: watermelon, name: watermelon, price: 3),Product(imgName: mango, name: mango, price: 8)]items.onNext(productArray) // items.onCompleted()}func addData() {productArray.append(Product(imgName: peach, name: peach, price: 7))items.onNext(productArray)} }该类中: 定义了时间发布者items使用PublishSubject类型定义获取数据的方法fetchProductList()获取完数据后使用onNext将事件发布出去。代码中注释掉onCompleted()是因为想要实现后续数据更新的操作onCompleted会终止序列使其不再接收新的元素。定义addData()方法界面中将通过点击按钮模拟增加数据操作 3、视图View 在View层首先有个简单的CellProductTableViewCell它有一个数据有属性item赋值时进行UI内容样式设置 import UIKitclass ProductTableViewCell: UITableViewCell {var item: Product? nil {didSet{textLabel?.text item?.name}}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}}接下来是ViewController import UIKit import RxSwift import RxCocoaclass ViewController: UIViewController, UIScrollViewDelegate {private let bag DisposeBag()private let viewModel ProductViewModel()lazy var tableView: UITableView {let tableView UITableView(frame: view.bounds, style: UITableView.Style.grouped)view.addSubview(tableView)return tableView}()override func viewDidLoad() {super.viewDidLoad()tableView.rx.setDelegate(self).disposed(by: bag)bindTableView()let btn:UIButton UIButton(type: .system)btn.frame CGRectMake(10, view.frame.size.height - 80, view.frame.size.width - 20, 50)btn.backgroundColor .lightGraybtn.setTitle(addData, for: UIControl.State.normal)btn.rx.tap.subscribe(onNext: { [unowned self] inself.viewModel.addData()}).disposed(by: bag)view.addSubview(btn)}private func bindTableView() {tableView.register(ProductTableViewCell.self, forCellReuseIdentifier: cellId)viewModel.items.bind(to: tableView.rx.items(cellIdentifier: cellId, cellType: ProductTableViewCell.self)) { (row,item,cell) incell.item item}.disposed(by: bag)tableView.rx.modelSelected(Product.self).subscribe(onNext: { item inprint(SelectedItem: \(item.name))}).disposed(by: bag)viewModel.fetchProductList()} }定义private let bag DisposeBag()作用就是在合适的时机自动调用这些 Disposable 对象的 dispose() 方法释放资源避免内存泄漏持有ViewModelprivate let viewModel ProductViewModel()初始化tableViewviewDidLoad()中指定了tableView代理为self然后将viewModel的items事件绑定到tableView即将数据源绑定到表视图行。同时订阅了选中某个模型的事件modelSelected即选中某个Cell的事件。使用RxCocoa提供的方法实现增加一个按钮点击时调用viewModel.addData()方法动态修改数据源。因为已将tableView绑定到数据源视图也将动态刷新 界面效果 oubijiexi
http://www.w-s-a.com/news/662971/

相关文章:

  • 网站建设费大概多少钱成都网站建设低价
  • 做表格的网站东莞常平房价
  • 国家级建设网站高密做网站哪家强价位
  • 江西省新的建设厅三类人员网站做标记网站
  • 做最精彩绳艺网站产品设计培训
  • 营销型网站建设品牌深圳网络推广最新招聘
  • 单位网站等级保护必须做吗广州app软件开发公司
  • 免费flash网站模板怎么仿网站链接
  • 泉州网站建设哪家好平面设计转行做什么比较好
  • 忘记网站备案账号设计一个网站
  • 国内购物网站哪个最好海珠营销网站建设报价
  • 小型网站搭建logo免费制作
  • dede 网站模板哈尔滨房产信息网官方网站
  • 设计师个人作品集模板班级优化大师网页版登录
  • 高端网站建设教学网站开发前期准备工作
  • 网站评论列表模板设计官网的
  • 怎么做可以访问网站ui设计自学学的出来吗
  • 网站如何接入支付宝软件开发工作内容描述
  • 廊坊网站建设搭建整合营销传播的效果表现为
  • 网站服务器在本地是指园林绿化
  • 公司网站建设需要什么科目网站代运营价格
  • 网站建设前的ER图ppt模板图片 背景
  • 做一个网站花多少钱网站导航营销步骤
  • 仙桃网站定制做房产网站能赚钱吗
  • 西安网站制作模板最新源码
  • 南京江宁网站建设大学高校网站建设栏目
  • 模板网站建设明细报价表做网站第一
  • 公司网站建设系统软件开发 上海
  • 怎么让公司建设网站固安县建设局网站
  • 360免费建站官网入口手机网站建设设计