【问题标题】:iOS Swift: How to do asynchronous/reactive/event programming for Swift 3iOS Swift:如何为 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 的委托仍在进行中。我应该同步我的代码来处理这种情况,还是有一种更简单/有保证的方式让操作系统确保按顺序调用所有委托

【问题讨论】:

    标签: ios objective-c swift3


    【解决方案1】:

    当来自 RxJava 时,考虑其 Swift 对应 RxSwift 将是一个合乎逻辑的结论。 ReactiveCocoa 是另一个函数式反应库,但是当您来自 ReactiveX 世界时,您可能会遇到一些令人困惑的术语。两个框架都提供 UI 绑定、流处理和调度。

    这些框架将极大地帮助您编排来自不同来源的输入。您可能会寻找流的组合,例如 combineLatest: 来自 ReactiveCocoa (rxmarbles, image source):

    关于手动确定委托调用的优先级,您可能会遇到困难。据我所知,没有办法减少信标发现的回调频率。在正常情况下,我认为这不应该是您应该关注的问题,因为不同的来源不应该相互阻塞/延迟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-20
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 2017-10-11
      • 1970-01-01
      相关资源
      最近更新 更多