我有两个这样的信号发生器
func textSignal() -> SignalProducer(String?,NoError)和
func searchSignal(text:String) -> SignalProducer([User]?,NSError)如何调用没有嵌套函数的searchSignal?因为flatmap & attemptMap需要相同的错误结果,如本例所示的是NoError和NSError
发布于 2016-01-21 17:17:22
有两种类型的差异,一个必须修复,才能组成这两个功能。
原始信号可以携带nils,您尝试使用的flatMap函数不接受nils。类型系统告诉您,在这种情况下需要选择一个策略来处理。一些备选方案:
textSignal.filter { $0 != nil }.map { $0! }
不推荐这样做,因为您将忽略这些值,因此如果用户搜索"foo",然后文本字段生成一个零字符串,应用程序仍然会显示"foo“的搜索结果。
textSignal.map { $0 ?? "" }
这可能是最简单的,也是最自然的结果。
第二个区别是错误类型。原始信号不会产生错误,但是第二个信号会产生错误。使用promoteErrors函数,我们可以将第一个函数从NoError转换为NSError,如下所示:
textSignal.promoteErrors(NSError)
这对于NoError信号是安全的,因为我们在编译时知道它们实际上不会产生错误,因此不需要发生转换来将其更改为NSError。
https://stackoverflow.com/questions/34929818
复制相似问题