RX观测量 - 最新的“随着时间的推移,”如果我不能改变的是值的点?

问题描述 投票:0回答:2

我学习RXSwift,和我对观测量有点迷惑。我理解的理论,它可以发出事件,“随着时间的推移”。但是,我必须用一个值,订阅和用户该值(这是毫无意义的)初始化它,但我不能在以后更改观察到的值,那么,什么说,它可以发出值“随着时间的推移”的地步? ??有人能澄清这对我?非常感谢!

observable system.reactive rx-swift
2个回答
2
投票

这是真的,你不能改变直接在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响应的结果。

它可以是一个Void通常从UIControl比赛结果。你可以看看这里的文档:

ControlProperty / ControlEvent

但是,如果你真的需要突变,看看BehaviorRelay


1
投票

您所做的错误是假设你必须“初始化[可观察]与价值”;你不这样做。相反,你初始化可观察到的与产生(零个或多个)值的过程。

也许具体的例子可以帮助...

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用程序,当订阅,将发出一个网络请求并发射的结果。

© www.soinside.com 2019 - 2024. All rights reserved.