我可以在 MonoTouch 项目中使用响应式扩展吗?

Posted

技术标签:

【中文标题】我可以在 MonoTouch 项目中使用响应式扩展吗?【英文标题】:Can I use Reactive Extensions in a MonoTouch project? 【发布时间】:2012-11-07 20:49:33 【问题描述】:

有一个名为 mono-reactive 的 Rx 端口包含一个 MonoTouch 项目,但作者 announced ten days ago 他正在放弃该项目,转而支持微软开源实现:

我很高兴地宣布我不会再处理这个代码库了 现在微软已经在 Apache 许可证中开源了 Reactive Extensions。 http://rx.codeplex.com/

MonoDevelop 在尝试打开 Rx master 中的 Rx.sln 时挂起,而且那里没有 MonoTouch 目标。 PCL support is not there yet for MonoTouch too.

我想知道是否有人已经为 Rx 建立了一个与 MonoTouch 兼容的项目,以及它是否真的可以在生产中使用。

【问题讨论】:

您可以尝试下载源代码并创建一个包含所有 Rx 文件链接的 MonoTouch 库项目。(这可能是目前唯一的方法) 你可能想阅读这个answers.unity3d.com/questions/288785/… 【参考方案1】:

微软接收

我自己提出了一个项目,结合了Rx's codeplex的CoreInterfacesLinqPlatformServices . 给你:

https://github.com/stampsy/rx-monotouch

它适用于引用类型,更不用说适用于值类型(见下文)。不幸的是,由于错误 8329 和 9087,它无法编译. 现在编译就好了。

单反应

我也使用了mono-reactive,它对我来说效果很好。虽然 Microsoft 的实现看起来更简洁可靠,但 monoreactive 更小,并且在真正需要时更容易修复。

您可以同时尝试这两种方法,看看哪种方法最适合您。 观察愉快!

缓解崩溃

在使用这两个框架时,我经常遇到由 AOT 引起的崩溃 设备上的限制。 Xamarin 的 Rolf 告诉我,你可以 通常通过不使用值类型来解决大多数 AOT 限制 Rx 泛型类型参数。

例如,IObservable<bool> 扩展可能会在设备上崩溃,IObservable<long> 也会崩溃,但引用类型应该适用于大多数方法。

在my version of Rx 中,我添加了IntervalSafe 方法,该方法返回Unit(我将其更改为引用类型,而不是结构)而不是long,因此不会导致数十次崩溃代码库。

一些 Rx 方法仍然崩溃,但修复这些崩溃相当容易

请参阅 Costo 的 Throttle fix 或 my Buffer fix 以供参考。 我很乐意合并处理其他 Rx 方法及其重载的拉取请求。

【讨论】:

它仍然是实际的 w.r.t.微软发布的响应式扩展(2.2.5)? @SargeBorsch 可能不是,但值得检查。 MonoTouch 已经在 AOT 通用支持方面看到了一些改进,但最好你自己看看,因为我已经有几年没玩过它了。 好的,谢谢。我们可能很快就会尝试……顺便说一句,我什至可以将 Rx-Main 包添加到 PCL 项目中。

以上是关于我可以在 MonoTouch 项目中使用响应式扩展吗?的主要内容,如果未能解决你的问题,请参考以下文章

Unity开源项目精选UniRx:Unity中的响应式编程

Monotouch - 在 monotouch 项目中附加 Sqlite 数据库并部署到 iPad

如何在响应式布局中垂直扩展 2 个 div?

为啥在 .NET 响应式扩展中不推荐主题?

TPL 数据流(TDF)和响应式扩展有啥区别?

如何使用响应式扩展来限制客户端请求