您现在的位置:新闻首页>热点要闻

使用RxSwift进行反应式编程:如何开始

2018-01-26 11:38大渝新闻网编辑:admin人气:




技术的发展创造了应用程序和系统应具有一定响应性的期望,因此,冻结用户屏幕以进行底层处理是当前不可接受的。解决这个问题的方法是通过异步编程。RxSwift库可以帮助你。

RxSwift宇宙是巨大的。要进入它,你需要学习被动的思维方式,这可能会改变你的编程思维。反应式编程需要真正理解正确的使用,从核心概念和这种不同的编程方法背后的动机开始。没有单独的文章可以教你RxSwift或反应式编程。但是下面的讨论为您提供了一个路线图,资源和建议,以识别您的应用中哪些模块最适合被动方法。
 

让RxSwift缓慢
在将RxSwift应用到您的项目时不要全力以赴。选择一个孤立的应用程序的一部分,将其迁移到被动,然后衡量这种新方法的好处,差异,优点和缺点。
 
以下是最适合使用RxSwift的系统部分。我已经按照难度排序,从最简单到最具挑战性:
 
UI组件。观察UI组件中的更改并对其作出响应。忘记代表。
TableView和CollectionView的数据源  
控制器和对象之间的信息共享(反应式方法使用可观测量)
网络层(使用observables而不是回调)
扩展(使用observables包装委派并为系统类提供被动扩展)
我将重点放在入门级,所以我只涉及第一个项目:UI组件,以及被动和非反应方式之间的差异,以通知一个大的销售。想跟随例子吗?下载  我将在这个讨论中使用的代码。
 
没反应
该非反应版本  引入了一些微妙但有可能造成很大的危害突变的。突变本身并不是一件坏事。但是大多数时候它是伴随着它的邪恶的兄弟,副作用。在我的销售例子中,我不得不创建一个实例变量来存储最后的价格和最后一个单位。这样做会在代码中引入突变和副作用的可能性。副作用和全局变量可能会产生一些软件开发中最难以跟踪的问题,以及许多令人头痛的问题。
 
反应
该反应的版本  允许你创建观察员在你的观测发出的事件作出反应; 你甚至可以结合两个不同的观测值,对发射的值做一些变换和滤波,只有当结果在预期的范围内时才会做出反应。最好的事情是,你可以做所有这些没有突变或副作用。被动方法限制了突变和副作用,使得系统更容易发展和维护。
 
但是,等一下。什么是可观察的?
可观察事物是随着时间的推移可以异步产生或发射一系列事件的事物。其他一些被称为观察者的类可以订阅(注册)这些事件并对它们做出反应。
 
但是你为什么要使用这个可观察的东西呢?要回答,我需要退后一步,并带来一些背景。
 
同步与异步
有两种类型的代码:同步和异步。首先是直观的; 用它进行编程就像你想象的那样,一步一个脚印,一个接一个地思考。
 
 
let file =readFile()
print(file)
 
第二种类型是异步的,并不是那么简单。使用它可以是非常具有挑战性的。回调,委托和关闭只是一些可以用来处理异步代码的技术,但是有时候这些技巧会有些冗长。反应式编程是另一种使用异步代码的方式。
 
 
readFile() { file in
      …
}
print(“This will be executed before the return of the file”)
 
反应式编程是一种与数据流和随时间变化传播有关的异步编程范例。在我的例子中,我创建了一个“浮动”的可观察值,每当价格滑动值发生变化时都会发出新的值。
 
 
priceSlider.rx.value
       .asObservable()
 
你可以通过订阅做出反应,这是另一种说法:“嘿,顺序,我对你的活动感兴趣!” 
 
 
priceSlider.rx.value
        .asObservable()
       .subscribe(onNext: { newValue in
                   print(newValue)
        })
 
要点URL显示了一个不同的实现。它的版本首先执行一个映射操作,该操作是稍后绑定到文本标签的数据转换。绑定是订阅的另一种方式,将发送的事件发送给观察者。在这种情况下:
 
 
priceLabel
.rx.text
 
观察者不会开始发送事件,直到有人订阅它们。它们是序列,订阅它们更像是在序列的第一个元素中调用next()。可观察对象在初次订阅之后继续发出事件,直到它们发出错误或完成的事件; 只有他们终止了。但是,您也可以通过调用dispose()来手动终止observable。手动“处置”每一个可见性将是可怕的,但有一个更简单的方法来使用DisposeBags,它负责持有一次性引用。之后,当“包”即将被释放时,它将在每个参考文献中调用dispose()。
 
现在你可以理解下面的代码:
 
 
.bind(to: priceLabel.rx.text)
       .addDisposableTo(disposeBag)
 
资源
一些关键的资源可以帮助您理解RxSwift中反应式编程及其实现背后的一些重要思想:
 
Ray Wanderlich的RxSwift。这本书是迄今为止我碰到的最好的RxSwift资源。任何想要了解和应用RxSwift的人都必须拥有。
该  反应式编程  的谈话。Objc.io的Swift Talks以惊人的内容着称。这个视频是第一个寻址RxSwift。
 RX框架的官方网站
RxSwift GitHub页面
大理石图表,一个理解随时间发生的序列和转换的美丽方式
你的路线图成为一个更好的被动程序员
对于可观察性以及如何创建它们,交互,转换等,还有很多东西需要学习。RxSwift有许多其他的概念,你需要先掌握,然后才能自信地导航。
 
下一个重要的概念是同时是观察者和观察者的主体。这意味着他们不仅会发出事件,而且可以订阅其他观察对象并作出反应。
 
观察对象,主题和转换一起提供了处理80%工作所需的基本RxSwift工具包。没有办法在一篇文章中传达所有这些信息,但是到目前为止,您已经掌握了基础知识,应该准备好踏上成为更好的被动式程序员的旅程。
 

 

你有自己的提示或建议,或只是有一个问题?在下面发表您的意见。
(来源:未知)

织梦二维码生成器
已推荐
0
  • 凡本网注明"来源:大渝新闻网的所有作品,版权均属于中大渝新闻网,转载请必须注明中大渝新闻网,http://www.aaduna.com/。违反者本网将追究相关法律责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。




  • 推荐专题上方


图说新闻

更多>>
Skyrmions打开了进入下一级数据存储的大门

Skyrmions打开了进入下一级数据存储的大门


返回首页