RxSwift 深入淺出(五)tableView應(yīng)用

RxSwift 這個(gè)框架看我就夠了钻注,這一篇我重點(diǎn)介紹RxSwift在實(shí)際開發(fā)中的運(yùn)用粗俱。搞RxSwift罐监,我是認(rèn)真的

RxSwift 寶圖鎮(zhèn)博,咔咔點(diǎn)贊~~~~

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
    }
    
}

我們實(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ù)的代理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凸主,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子额湘,更是在濱河造成了極大的恐慌卿吐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锋华,死亡現(xiàn)場離奇詭異嗡官,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)毯焕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門衍腥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纳猫,你說我怎么就攤上這事婆咸。” “怎么了芜辕?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵尚骄,是天一觀的道長。 經(jīng)常有香客問我侵续,道長倔丈,這世上最難降的妖魔是什么憨闰? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮需五,結(jié)果婚禮上起趾,老公的妹妹穿的比我還像新娘。我一直安慰自己警儒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布眶根。 她就那樣靜靜地躺著蜀铲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪属百。 梳的紋絲不亂的頭發(fā)上记劝,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音族扰,去河邊找鬼厌丑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渔呵,可吹牛的內(nèi)容都是我干的怒竿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扩氢,長吁一口氣:“原來是場噩夢啊……” “哼耕驰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起录豺,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤朦肘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后双饥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媒抠,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年咏花,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了趴生。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迟螺,死狀恐怖冲秽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矩父,我是刑警寧澤锉桑,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站窍株,受9級特大地震影響民轴,放射性物質(zhì)發(fā)生泄漏攻柠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一后裸、第九天 我趴在偏房一處隱蔽的房頂上張望瑰钮。 院中可真熱鬧,春花似錦微驶、人聲如沸浪谴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苟耻。三九已至,卻和暖如春扶檐,著一層夾襖步出監(jiān)牢的瞬間凶杖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工款筑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留智蝠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓奈梳,卻偏偏與公主長得像杈湾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子攘须,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,100評論 1 32
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,095評論 25 707
  • 前言 RxSwift的魅力想必用過的人都有心得體會毛秘,簡直就是從入門到想放棄,從想放棄到愛不釋手的過程阻课。但是RxSw...
    Mr杰杰閱讀 4,262評論 6 7
  • 臨淵而立限煞,是一種求生不得求死不能的恐懼抹恳。 對死亡心存恐懼,不敢低頭面對黑暗的萬丈深淵署驻。對生存滿懷渴望奋献,卻背靠陡壁冰...
    舍予的樹洞閱讀 1,489評論 0 1
  • 大三結(jié)束了,大三的暑假也過完了旺上,未來的路越來越撲朔迷離瓶蚂。 是否所有的人都和我有過這樣經(jīng)歷,在找工作前總是有各種的憂...
    凌空13閱讀 214評論 0 1