我学习RXSwift,和我对观测量有点迷惑。我理解的理论,它可以发出事件,“随着时间的推移”。但是,我必须用一个值,订阅和用户该值(这是毫无意义的)初始化它,但我不能在以后更改观察到的值,那么,什么说,它可以发出值“随着时间的推移”的地步? ??有人能澄清这对我?非常感谢!
这是真的,你不能改变直接在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
。
您所做的错误是假设你必须“初始化[可观察]与价值”;你不这样做。相反,你初始化可观察到的与产生(零个或多个)值的过程。
也许具体的例子可以帮助...
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
用程序,当订阅,将发出一个网络请求并发射的结果。