RxSwift 這個(gè)框架看我就夠了钻注,這一篇我重點(diǎn)介紹
RxSwift
在實(shí)際開發(fā)中的運(yùn)用粗俱。搞RxSwift
罐监,我是認(rèn)真的
RxSwift 寶圖鎮(zhèn)博,咔咔點(diǎn)贊~~~~
-
RxSwift 深入淺出(一)RxSwift初探
-
RxSwift 深入淺出(二)高階函數(shù)
-
RxSwift 深入淺出(三)Subject
-
RxSwift 深入淺出(四)控件應(yīng)用
-
RxSwift 深入淺出(五)tableView應(yīng)用
-
RxSwift 深入淺出(六)RxDataSources
-
RxSwift 深入淺出(七)網(wǎng)絡(luò)封裝
-
RxSwift 深入淺出(八)開發(fā)總結(jié)
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource{
var tableView : UITableView!
let reuserId = "reuserId"
override func viewDidLoad() {
super.viewDidLoad()
testUITableView()
}
func testUITableView(){
tableView = UITableView(frame: self.view.bounds, style: .plain)
tableView.delegate = self
tableView.dataSource = self
tableView.register(MyTableViewCell.self, forCellReuseIdentifier: MyTableViewCell.description())
self.view.addSubview(tableView)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: MyTableViewCell.description(), for: indexPath) as? MyTableViewCell
cell?.getvalue(titleStr: "\(indexPath.row)", nameStr: " Cooci \(indexPath.row)")
return cell!
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.navigationController?.pushViewController(RxSwiftTableVC(), animated: true)
}
}
class MyTableViewCell: UITableViewCell {
var titlteLabel:UILabel?
var nameLabel:UILabel?
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.titlteLabel = UILabel(frame: CGRect(x: 10, y: 0, width: 100, height: self.contentView.bounds.height))
self.contentView.addSubview(self.titlteLabel!)
self.nameLabel = UILabel(frame: CGRect(x: self.titlteLabel!.bounds.maxX, y: 0, width: 100, height: self.contentView.bounds.height))
self.contentView.addSubview(self.nameLabel!)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func getvalue(titleStr:String,nameStr:String){
self.titlteLabel?.text = titleStr
self.nameLabel?.text = nameStr
}
}
我們實(shí)際開發(fā)
tableview
是非常難受的,因?yàn)槊看味夹枰獙憙蓚€(gè)代理UITableViewDelegate
,UITableViewDataSource
,很多的時(shí)候代碼都分離開來侧啼,并且代碼會隨著項(xiàng)目越來越大张峰,最后你看都覺得惡心
- 代碼量大
- 代碼邏輯泪蔫,與需求邏輯分離
下面我們來看看RxSwift的爽,爽挟炬,爽
class RxSwiftTableVC: UIViewController {
var myTableView:UITableView!
let reuserId = "cell"
let disposeB = DisposeBag()
let datas = GithubData()
override func viewDidLoad() {
super.viewDidLoad()
self.title = "RxSwift進(jìn)階";
self.view.backgroundColor = UIColor.white
self.myTableView = UITableView(frame: self.view.bounds, style: UITableViewStyle.plain)
self.view.addSubview(self.myTableView)
self.myTableView.register(SectionTableCell.self, forCellReuseIdentifier: reuserId)
let items = Observable.just(InfoViewModel().arr)
items.bind(to: self.myTableView.rx.items) { (tb, row, model) -> UITableViewCell in
let cell = tb.dequeueReusableCell(withIdentifier: self.reuserId) as? MyTableViewCell
cell?.titlteLabel?.text = model.despStr
cell?.nameLabel?.text = model.nameStr
return cell!
}
.disposed(by: disposeB)
myTableView.isEditing = true
myTableView.rx.itemSelected
.subscribe(onNext: { indexPath in
print("選中項(xiàng)的indexPath為:\(indexPath)")
})
.disposed(by: disposeB)
myTableView.rx.modelSelected(DataModel.self)
.subscribe(onNext: { (model) in
print("點(diǎn)擊了 \(model.despStr) :\(model.nameStr)" )
})
.disposed(by: disposeB)
myTableView.rx.itemDeleted
.subscribe(onNext: { (indexPath) in
print("刪除 \(indexPath)")
})
.disposed(by: disposeB)
myTableView.rx.itemMoved
.subscribe(onNext: { (soureIndex,destiIndex) in
print("從 \(soureIndex)移動到 \(destiIndex)")
})
.disposed(by: disposeB)
myTableView.rx.itemInserted
.subscribe(onNext: { indexPath in
print("從 \(indexPath) 插入")
})
.disposed(by: disposeB)
}
}
struct DataModel {
let despStr:String
let nameStr:String
}
struct InfoViewModel {
var arr = Array<DataModel>()
init(){
arr.append(DataModel(despStr: "first", nameStr: "Cooci"))
arr.append(DataModel(despStr: "2", nameStr: "Gavin"))
arr.append(DataModel(despStr: "3", nameStr: "James"))
arr.append(DataModel(despStr: "4", nameStr: "Dean"))
arr.append(DataModel(despStr: "5", nameStr: "Kody"))
}
}
這里看一下鸥滨,是不是賊爽,實(shí)現(xiàn)cell的移動谤祖,刪除婿滓,選擇,邏輯都是簡單到一句代碼粥喜,不需要次重復(fù)的代理