经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Swift » 查看文章
RxSwift学习笔记1:RxSwift的编程风格
来源:cnblogs  作者:mapanguan  时间:2018/9/25 20:29:00  对本文有异议

第一天:简单体验与RxSwift的编程风格

  1. import UIKit
    //导入Rx相关框架
  2. import RxSwift
  3. import RxCocoa
  4. struct Music {
  5. let name:String
  6. let singer:String
  7. init(name:String,singer:String) {
  8. self.name = name
  9. self.singer = singer
  10. }
  11. }
  12. extension Music:CustomStringConvertible{
  13. var description: String {
  14. return "name:\(name) singer:\(singer)"
  15. }
  16. }
  17. struct MusicListModel {
  18. /*
  19. 这里我们将 data 属性变成一个可观察序列对象(Observable Squence),
  20. 而对象当中的内容和我们之前在数组当中所包含的内容是完全一样的。
  21. 关于可观察序列对象在后面的文章中我会详细介绍。
  22. 简单说就是“序列”可以对这些数值进行“订阅(Subscribe)”,有点类似于“通知(NotificationCenter)”
  23. */
  24. let data = Observable.just([
  25. Music(name: "无条件", singer: "陈奕迅"),
  26. Music(name: "你曾是少年", singer: "S.H.E"),
  27. Music(name: "从前的我", singer: "陈洁仪"),
  28. Music(name: "在木星", singer: "朴树")
  29. ])
  30. }
  31. /*
  32. 这里我们不再需要实现数据源和委托协议了。而是写一些响应式代码,让它们将数据和 UITableView 建立绑定关系。
  33. */
  34.  
  35. class ViewController: UIViewController {
  36. @IBOutlet weak var tableView: UITableView!
  37. /*
  38. DisposeBag:作用是 Rx 在视图控制器或者其持有者将要销毁的时候,自动释法掉绑定在它上面的资源。
  39. 它是通过类似“订阅处置机制”方式实现(类似于 NotificationCenter 的 removeObserver)。
  40. */
  41. let disposeBag = DisposeBag()
  42. let musicArray = MusicListModel()
  43. override func viewDidLoad() {
  44. super.viewDidLoad()
  45. //将数据源数据绑定到tableView上
  46. /*
  47. rx.items(cellIdentifier:):这是 Rx 基于 cellForRowAt 数据源方法的一个封装。
  48. 传统方式中我们还要有个 numberOfRowsInSection 方法,使用 Rx 后就不再需要了(Rx 已经帮我们完成了相关工作)。
  49. */
  50. musicArray.data.bind(to: tableView.rx.items(cellIdentifier:"musicCell")) { _, music, cell in
  51. cell.textLabel?.text = music.name
  52. cell.detailTextLabel?.text = music.singer
  53. }.disposed(by: disposeBag)
  54. //tableView点击响应
  55. /*
  56. rx.modelSelected: 这是 Rx 基于 UITableView 委托回调方法 didSelectRowAt 的一个封装。
  57. */
  58. tableView.rx.modelSelected(Music.self).subscribe(onNext: { music in
  59. print("你选中的歌曲信息【\(music)】")
  60. }).disposed(by: disposeBag)
  61. }
  62. override func didReceiveMemoryWarning() {
  63. super.didReceiveMemoryWarning()
  64. // Dispose of any resources that can be recreated.
  65. }
  66. }

由代码可以看出,与官方通过MVC代理方式实现列表的数据展示和操作,RxSwift在代码上跟精简,逻辑上更加连贯。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号