首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在reactivecocoa4中调用依赖于不同信号产生器的信号发生器

如何在reactivecocoa4中调用依赖于不同信号产生器的信号发生器
EN

Stack Overflow用户
提问于 2016-01-21 17:00:48
回答 1查看 499关注 0票数 0

我有两个这样的信号发生器

代码语言:javascript
复制
func textSignal() -> SignalProducer(String?,NoError)

代码语言:javascript
复制
func searchSignal(text:String) -> SignalProducer([User]?,NSError)

如何调用没有嵌套函数的searchSignal?因为flatmap & attemptMap需要相同的错误结果,如本例所示的是NoErrorNSError

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-21 17:17:22

有两种类型的差异,一个必须修复,才能组成这两个功能。

原始信号可以携带nils,您尝试使用的flatMap函数不接受nils。类型系统告诉您,在这种情况下需要选择一个策略来处理。一些备选方案:

  • 滤网:

textSignal.filter { $0 != nil }.map { $0! }

不推荐这样做,因为您将忽略这些值,因此如果用户搜索"foo",然后文本字段生成一个零字符串,应用程序仍然会显示"foo“的搜索结果。

  • 让搜索函数允许nils:这样做很容易,但是您实际上只是将问题转移到另一个函数上,它必须处理零值。
  • 将零字符串视为空字符串

textSignal.map { $0 ?? "" }

这可能是最简单的,也是最自然的结果。

第二个区别是错误类型。原始信号不会产生错误,但是第二个信号会产生错误。使用promoteErrors函数,我们可以将第一个函数从NoError转换为NSError,如下所示:

textSignal.promoteErrors(NSError)

这对于NoError信号是安全的,因为我们在编译时知道它们实际上不会产生错误,因此不需要发生转换来将其更改为NSError。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34929818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档