澳门新萄京 1

为什么学习RxSwift,RxSwift学习笔记1

由代码能够见见,与官方通过MVC代理格局完毕列表的数目展示和操作,纳瓦拉xSwift在代码上跟精简,逻辑上越来越贯通。

RxSwift的优点

  • Composable
    可构成,在设计方式中有壹种形式叫做组合形式,你能够便宜的用不相同的3结合完毕不相同的类
  • Reusable 代码可采取,原因很简短,对应途胜x斯威夫特,正是一群Obserable
  • Declarative 响应式的,因为状态不可变,唯有数据变化
  • Understandable and concise 简洁,简单领会。
  • Stable 稳定,因为科雷傲xSwift写出的代码,单元测试时分方便
  • 澳门新萄京 ,Less stateful
    “无”状态性,因为对此响应式编制程序,你的应用程序便是一群数据流
  • Without leaks 未有败露,因为能源管理万分简单

GitHub约10000个Star

澳门新萄京 1screen.png

第二天:简单体验与陆风X8x斯维夫特的编制程序风格

见名知意,SportagexSwift 是在 Apple 推出 斯维夫特 后,针对 Swift 语言 ReactiveX 推出 Reactive Extensions 体系3个兑现库;除了这些之外,ReactiveX 还推出了 PRADOxJava,LANDxAndroid,EscortxPHP 等富含类似思想的框架。
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.
    }

}

RxSwift扫盲

用作iOS开发者,可能你没据他们说过Kugax斯维夫特,不过一定听大人讲过函数式编制程序[Functional
Programming]、响应式编制程序[Reactive
Programming]、函数响应式编制程序[Functional Reactive Programming];

发表评论

电子邮件地址不会被公开。 必填项已用*标注