中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

怎樣做百度網(wǎng)站推廣青島seo關(guān)鍵詞優(yōu)化公司

怎樣做百度網(wǎng)站推廣,青島seo關(guān)鍵詞優(yōu)化公司,外貿(mào)網(wǎng)站服務(wù)器,怎么做中英文網(wǎng)站文章目錄 RxSwift - 實(shí)現(xiàn)一個MVVM架構(gòu)的TableView前沿MVVM架構(gòu)的Tableview目錄結(jié)構(gòu)1、模型(Model)2、視圖模型(ViewModel)3、視圖(View) 界面效果 RxSwift - 實(shí)現(xiàn)一個MVVM架構(gòu)的TableView 前沿 MVVM架構(gòu)在…

文章目錄

  • RxSwift - 實(shí)現(xiàn)一個MVVM架構(gòu)的TableView
    • 前沿
    • MVVM架構(gòu)的Tableview
      • 目錄結(jié)構(gòu)
      • 1、模型(Model)
      • 2、視圖模型(ViewModel)
      • 3、視圖(View)
    • 界面效果

RxSwift - 實(shí)現(xiàn)一個MVVM架構(gòu)的TableView

前沿

MVVM架構(gòu)在在實(shí)際開發(fā)中被廣泛應(yīng)用,它讓代碼結(jié)構(gòu)清晰美觀,易于閱讀維護(hù),同時也彌補(bǔ)了MVC結(jié)構(gòu)中Controller臃腫的問題

今天來實(shí)現(xiàn)一個基于RxSwift的基礎(chǔ)TableView頁面

效果:使用RxSwift,將ViewModel進(jìn)行綁定,實(shí)現(xiàn)動態(tài)修改數(shù)據(jù)時更新UI

MVVM架構(gòu)的Tableview

目錄結(jié)構(gòu)

以下是目錄結(jié)構(gòu)

-w400

目錄由ViewModel、View、Model三個文件夾組成

1、模型(Model)

Model文件夾下新建Product文件

import Foundationstruct Product {let imgName: String // 圖let name: String// 名稱let price: String// 價格
}

模型簡單表示了一個商品的

2、視圖模型(ViewModel)

ViewModel文件夾下新建ProductViewModel文件。它相當(dāng)于是ViewModel的橋梁,在ViewModel中會有相應(yīng)的獲取數(shù)據(jù)以及處理數(shù)據(jù)的方法,然后將數(shù)據(jù)傳輸?shù)?code>View

import Foundation
import RxSwiftclass ProductViewModel {// PublishSubject: 只會發(fā)送新的事件給訂閱者,訂閱之前的事件不會發(fā)送// BehaviorSubject: 會保持最新的值,并將其發(fā)送給新的訂閱者let items = PublishSubject<[Product]>()
//  let items = BehaviorSubject<[Product]>(value: [])var productArray: [Product]!func fetchProductList() {// 在這里可以做網(wǎng)絡(luò)請求// 咱們就直接用假數(shù)據(jù)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)}
}

該類中:

  • 定義了時間發(fā)布者items,使用PublishSubject類型
  • 定義獲取數(shù)據(jù)的方法fetchProductList(),獲取完數(shù)據(jù)后,使用onNext將事件發(fā)布出去。代碼中注釋掉onCompleted(),是因?yàn)橄胍獙?shí)現(xiàn)后續(xù)數(shù)據(jù)更新的操作,onCompleted會終止序列,使其不再接收新的元素。
  • 定義addData()方法,界面中將通過點(diǎn)擊按鈕模擬增加數(shù)據(jù)操作

3、視圖(View)

View層,首先有個簡單的CellProductTableViewCell,它有一個數(shù)據(jù)有屬性item,賦值時進(jìn)行UI內(nèi)容樣式設(shè)置

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(),作用就是在合適的時機(jī)自動調(diào)用這些 Disposable 對象的 dispose() 方法,釋放資源,避免內(nèi)存泄漏
  • 持有ViewModelprivate let viewModel = ProductViewModel()
  • 初始化tableView
  • viewDidLoad()中,指定了tableView代理為self,然后將viewModelitems事件綁定到tableView,即將數(shù)據(jù)源綁定到表視圖行。同時訂閱了選中某個模型的事件modelSelected,即選中某個Cell的事件。(使用RxCocoa提供的方法實(shí)現(xiàn))
  • 增加一個按鈕,點(diǎn)擊時調(diào)用viewModel.addData()方法,動態(tài)修改數(shù)據(jù)源。因?yàn)橐褜?code>tableView綁定到數(shù)據(jù)源,視圖也將動態(tài)刷新

界面效果

-w200

@oubijiexi

http://m.risenshineclean.com/news/62042.html

相關(guān)文章:

  • 網(wǎng)站建設(shè)管理中se是什么意思數(shù)據(jù)分析培訓(xùn)
  • vue做視頻網(wǎng)站怎樣做推廣更有效
  • 有個網(wǎng)站發(fā)任務(wù) 用手機(jī)可以做百度快照什么意思
  • 黑客網(wǎng)站裝b武漢大學(xué)人民醫(yī)院精神科
  • 蔬菜水果網(wǎng)站建設(shè)軟文網(wǎng)站推廣
  • 中國建設(shè)工程招標(biāo)網(wǎng)官方網(wǎng)站自建網(wǎng)站平臺
  • 網(wǎng)站設(shè)計不同的原因中國足球世界排名
  • 推推蛙網(wǎng)站建設(shè)合肥網(wǎng)站seo費(fèi)用
  • 昆明網(wǎng)站建設(shè)價目表網(wǎng)絡(luò)營銷課程ppt
  • 徐州seo關(guān)鍵詞排名優(yōu)化價格
  • 網(wǎng)站建設(shè)項(xiàng)目風(fēng)險管理的主要內(nèi)容成品短視頻app源碼的優(yōu)點(diǎn)
  • 做風(fēng)險投資網(wǎng)站程序員培訓(xùn)
  • 手機(jī)網(wǎng)站用單獨(dú)做嗎列舉常見的網(wǎng)絡(luò)營銷工具
  • 西安微信平臺網(wǎng)站建設(shè)沈陽沈河seo網(wǎng)站排名優(yōu)化
  • 自己怎樣免費(fèi)建設(shè)網(wǎng)站分發(fā)平臺
  • 專門做離異相親的網(wǎng)站惠州seo報價
  • 專業(yè)網(wǎng)站建設(shè)品牌策劃方案惠州網(wǎng)站排名提升
  • 蘇州做網(wǎng)站套路騙寧波網(wǎng)絡(luò)推廣平臺
  • 大型網(wǎng)站建設(shè)制作平臺seo推廣的公司
  • 章瑩穎被賣做性奴網(wǎng)站深圳百度seo整站
  • 濰坊大型做網(wǎng)站建設(shè)的公司網(wǎng)站收錄提交入口
  • 保定網(wǎng)站設(shè)計網(wǎng)站app開發(fā)軟件
  • 為什么不建議去代賬公司廣州網(wǎng)站優(yōu)化系統(tǒng)
  • dede 手機(jī)網(wǎng)站模板徐州網(wǎng)站設(shè)計
  • 網(wǎng)站建設(shè)套餐寧波關(guān)鍵詞優(yōu)化平臺
  • table做的電腦端網(wǎng)站改成手機(jī)板純注冊app拉新掙錢
  • 國內(nèi)一家做國外酒店團(tuán)購的網(wǎng)站域名是什么
  • 靜態(tài)網(wǎng)站模板源碼下載免費(fèi)男女打撲克的軟件
  • 做網(wǎng)站和網(wǎng)站頁面設(shè)計公司網(wǎng)站建設(shè)開發(fā)
  • 北京網(wǎng)站制作公司清遠(yuǎn)semen是什么意思