Escortx斯威夫特学习笔记1:凯雷德xSwift的编制程序风格

import UIKit
//导入Rx相关框架
import RxSwift
import RxCocoa

struct Music {
    let name:String
    let singer:String

    init(name:String,singer:String) {
        self.name = name
        self.singer = singer
    }
}

extension Music:CustomStringConvertible{
    var description: String {
        return "name:\(name) singer:\(singer)"
    }
}


struct MusicListModel {
    /*
     这里我们将 data 属性变成一个可观察序列对象(Observable Squence),
     而对象当中的内容和我们之前在数组当中所包含的内容是完全一样的。
     关于可观察序列对象在后面的文章中我会详细介绍。
     简单说就是“序列”可以对这些数值进行“订阅(Subscribe)”,有点类似于“通知(NotificationCenter)”
     */
    let data = Observable.just([
        Music(name: "无条件", singer: "陈奕迅"),
        Music(name: "你曾是少年", singer: "S.H.E"),
        Music(name: "从前的我", singer: "陈洁仪"),
        Music(name: "在木星", singer: "朴树")
        ])
}

/*
 这里我们不再需要实现数据源和委托协议了。而是写一些响应式代码,让它们将数据和 UITableView 建立绑定关系。
 */

class ViewController: UIViewController {
    @IBOutlet weak var tableView: UITableView!
    /*
     DisposeBag:作用是 Rx 在视图控制器或者其持有者将要销毁的时候,自动释法掉绑定在它上面的资源。
     它是通过类似“订阅处置机制”方式实现(类似于 NotificationCenter 的 removeObserver)。
     */
    let disposeBag = DisposeBag()
    let musicArray = MusicListModel()


    override func viewDidLoad() {
        super.viewDidLoad()

        //将数据源数据绑定到tableView上
        /*
         rx.items(cellIdentifier:):这是 Rx 基于 cellForRowAt 数据源方法的一个封装。
         传统方式中我们还要有个 numberOfRowsInSection 方法,使用 Rx 后就不再需要了(Rx 已经帮我们完成了相关工作)。
         */
        musicArray.data.bind(to: tableView.rx.items(cellIdentifier:"musicCell")) { _, music, cell in
            cell.textLabel?.text = music.name
            cell.detailTextLabel?.text = music.singer
            }.disposed(by: disposeBag)

        //tableView点击响应
        /*
         rx.modelSelected: 这是 Rx 基于 UITableView 委托回调方法 didSelectRowAt 的一个封装。
         */
        tableView.rx.modelSelected(Music.self).subscribe(onNext: { music in
            print("你选中的歌曲信息【\(music)】")
        }).disposed(by: disposeBag)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

ca88官网,先是天:简单体验与PAJEROxSwift的编制程序风格

由代码能够看到,与法定通过MVC代理格局完结列表的多少浮现和操作,SportagexSwift在代码上跟精简,逻辑上尤为贯通。

相关文章