iOS Swift:如何为 Swift 3 进行异步/反应式/事件编程
Posted
技术标签:
【中文标题】iOS Swift:如何为 Swift 3 进行异步/反应式/事件编程【英文标题】:iOS Swift: How to do asynchronous/reactive/event programming for Swift 3 【发布时间】:2017-02-21 22:23:43 【问题描述】:我们正在尝试使用 Swift 3 将我们的 android 应用程序移植到 ios。在我们的 Android 应用程序中,我们使用 RxJava2 来提高应用程序的响应时间。我们从 GPS、iBeacons 和 CMMotionActivity 获得更新。
我们注意到 iOS/Swift 3 应用程序出现明显延迟,因为 iBeacon 委托的更新优先于其他委托(事实上,其他委托的调用速度比正常情况慢 3 倍,因为 iBeacon 委托接管了优先权)。
a) 我怎样才能确保所有代表都以相同的概率被调用(好像它们是孤立存在的)
b) Swift3 中是否有流行的库或推荐的基于异步/事件的编程方法(类似于 Android 世界中的 RxJava2)
c) 如何避免回调/委托之间的干扰?我的意思是:假设 iBeacon 的委托被解雇,而 GPS 的委托仍在进行中。我应该同步我的代码来处理这种情况,还是有一种更简单/有保证的方式让操作系统确保按顺序调用所有委托
【问题讨论】:
【参考方案1】:当来自 RxJava
时,考虑其 Swift 对应 RxSwift 将是一个合乎逻辑的结论。 ReactiveCocoa 是另一个函数式反应库,但是当您来自 ReactiveX 世界时,您可能会遇到一些令人困惑的术语。两个框架都提供 UI 绑定、流处理和调度。
这些框架将极大地帮助您编排来自不同来源的输入。您可能会寻找流的组合,例如 combineLatest:
来自 ReactiveCocoa
(rxmarbles, image source):
关于手动确定委托调用的优先级,您可能会遇到困难。据我所知,没有办法减少信标发现的回调频率。在正常情况下,我认为这不应该是您应该关注的问题,因为不同的来源不应该相互阻塞/延迟。
【讨论】:
以上是关于iOS Swift:如何为 Swift 3 进行异步/反应式/事件编程的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS Swift 中实现方法时如何为闭包命名(语法问题)
Swift - 你如何为你的 iOS 应用决定最佳的“部署目标”