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 中实现方法时如何为闭包命名(语法问题)

iOS 如何为每个用户获取数据解析 Swift

Swift - 你如何为你的 iOS 应用决定最佳的“部署目标”

如何为经典的帖子和评论模型构建 Parse 数据模型? (使用 iOS、Swift、Parse)

如何为登录屏幕ios swift编写测试用例?

iOS Swift如何为透明的UIView添加阴影