RX 可观察量 - 如果我无法更改值,"随着时间的推移"的意义何在?



我正在学习RXSwift,对Observables有点困惑。我已经理解了这个理论,它可以"随着时间的推移"发出事件。但是,我必须用一个值初始化它,订阅并使用这个值(这是毫无意义的),但我以后不能更改可观察到的值,那么,说它可以"随着时间的推移"发出值有什么意义呢???有人能向我澄清一下吗?非常感谢!

确实不能直接更改Observable的值,因为这不是拥有Observable的意义所在。在这种情况下,您只需返回一个值并在不使用observable的情况下内联更改它。

简单地把可观察视为一系列按时间顺序排列的事件。在序列数据结构上,你不是直接操纵/改变它们内部的内容,你通常要做的是将它们映射到其他内容中,根据特定条件过滤你想要排除的事件,或者将它们与另一个序列组合。

例如,您可以将这些事件map描述为e(t),水平线表示时间流。

--1--2--3--4--5--6--|

转换成倍数:

func duplicate(event: Int) -> Int {
return event * 2
}
--2--4--6--8--10--12--|

之后,filter他们

func clip(event: Int) -> Int {
return event < 10
}
--2--4--6--8--|

然后,将这些序列视为任何类型的序列,它可以是来自多个请求的多个HTTP响应的结果,这些请求被链接在一起。

它可以是通常由UIControl事件产生的Void。您可以在这里查看文档:

ControlProperty/ControlEvent

然而,如果你真的需要突变,看看BehaviorRelay

您所犯的错误是假设您必须"用值初始化[可观察的]";你不会那样做的。相反,您可以使用过程初始化可观察项,该过程会产生(零个或多个)值

也许具体的例子会有所帮助。。。

let search = searchTextField.rx.text.orEmpty.asObservable()

上面的search变量属于Observable<String>类型。当用户在文本字段中键入时,它"随着时间的推移发出事件"。现在,通过对可观察到的内容进行适当的链接,例如,代码将能够过滤一组用户对象,使其仅限于那些名称中包含搜索文本的用户。

您可以看到,searchTextField.rx.text不是用值初始化的,而是用一个过程初始化的,该过程监视用户对文本字段的输入。

或者另一个例子:

let result = URLSession.shared.rx.data(request: URLRequest(url: URL(string: "http://myURL.com")!))

在上面的文章中,我使用一个过程初始化result,当订阅该过程时,它将发出网络请求并发出结果。

相关内容

  • 没有找到相关文章

最新更新