# 4.3 Observable & Observer 既是可监听序列也是观察者

## Observable & Observer 既是可监听序列也是观察者

![](/files/-MWlwP_zXp5RPVs1Z47f)

在我们所遇到的事物中，有一部分非常特别。它们既是**可监听序列**也是**观察者**。

例如：`textField`的当前文本。它可以看成是由用户输入，而产生的一个**文本序列**。也可以是由外部文本序列，来控制当前显示内容的**观察者**：

```swift
// 作为可监听序列
let observable = textField.rx.text
observable.subscribe(onNext: { text in show(text: text) })
```

```swift
// 作为观察者
let observer = textField.rx.text
let text: Observable<String?> = ...
text.bind(to: observer)
```

有许多 UI 控件都存在这种特性，例如：`switch`的开关状态，`segmentedControl`的选中索引号，`datePicker`的选中日期等等。

## 参考

另外，框架里面定义了一些辅助类型，它们既是**可监听序列**也是**观察者**。如果你能合适的应用这些辅助类型，它们就可以帮助你更准确的描述事物的特征：

* [AsyncSubject](/rxswift/rxswift_core/observable_and_observer/async_subject.md)
* [PublishSubject](/rxswift/rxswift_core/observable_and_observer/publish_subject.md)
* [ReplaySubject](/rxswift/rxswift_core/observable_and_observer/replay_subject.md)
* [BehaviorSubject](/rxswift/rxswift_core/observable_and_observer/behavior_subject.md)
* [ControlProperty](/rxswift/rxswift_core/observable_and_observer/control_property.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://3440217568.gitbook.io/rxswift/rxswift_core/observable_and_observer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
