RxSwift 这个框架看我就够了,这一篇我重点介绍
RxSwift
在实际开发中的运用。搞RxSwift
,我是认真的
RxSwift 宝图镇博,咔咔点赞~~~~
Rxswift-
RxSwift 深入浅出(一)RxSwift初探
-
RxSwift 深入浅出(二)高阶函数
-
RxSwift 深入浅出(三)Subject
-
RxSwift 深入浅出(四)控件应用
-
RxSwift 深入浅出(五)tableView应用
-
RxSwift 深入浅出(六)RxDataSources
-
RxSwift 深入浅出(七)网络封装
-
RxSwift 深入浅出(八)开发总结
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
}
}
我们实际开发
tableview
是非常难受的,因为每次都需要写两个代理UITableViewDelegate
,UITableViewDataSource
,很多的时候代码都分离开来,并且代码会随着项目越来越大,最后你看都觉得恶心
- 代码量大
- 代码逻辑,与需求逻辑分离
下面我们来看看RxSwift的爽,爽,爽
class RxSwiftTableVC: UIViewController {
var myTableView:UITableView!
let reuserId = "cell"
let disposeB = DisposeBag()
let datas = GithubData()
override func viewDidLoad() {
super.viewDidLoad()
self.title = "RxSwift进阶";
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("选中项的indexPath为:\(indexPath)")
})
.disposed(by: disposeB)
myTableView.rx.modelSelected(DataModel.self)
.subscribe(onNext: { (model) in
print("点击了 \(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"))
}
}
这里看一下,是不是贼爽,实现cell的移动,删除,选择,逻辑都是简单到一句代码,不需要次重复的代理
网友评论