📂
RxSwift
  • RxSwift 中文文档
  • 1. 为什么要使用 RxSwift?
  • 2. 你好 RxSwift!
  • 3. 函数响应式编程
    • 3.1 函数式编程
    • 3.2 函数式编程 -> 函数响应式编程
    • 3.3 数据绑定
  • 4. RxSwift 核心
    • 4.1 Observable - 可监听序列
      • Single
      • Completable
      • Maybe
      • Driver
      • Signal
      • ControlEvent
    • 4.2 Observer - 观察者
      • AnyObserver
      • Binder
    • 4.3 Observable & Observer 既是可监听序列也是观察者
      • AsyncSubject
      • PublishSubject
      • ReplaySubject
      • BehaviorSubject
      • Variable(已弃用)
      • ControlProperty
    • 4.4 Operator - 操作符
    • 4.5 Disposable - 可被清除的资源
    • 4.6 Schedulers - 调度器
    • 4.7 Error Handling - 错误处理
  • 5. 如何选择操作符?
    • amb
    • buffer
    • catchError
    • combineLatest
    • concat
    • concatMap
    • connect
    • create
    • debounce
    • debug
    • deferred
    • delay
    • delaySubscription
    • dematerialize
    • distinctUntilChanged
    • do
    • elementAt
    • empty
    • error
    • filter
    • flatMap
    • flatMapLatest
    • from
    • groupBy
    • ignoreElements
    • interval
    • just
    • map
    • merge
    • materialize
    • never
    • observeOn
    • publish
    • reduce
    • refCount
    • repeatElement
    • replay
    • retry
    • sample
    • scan
    • shareReplay
    • single
    • skip
    • skipUntil
    • skipWhile
    • startWith
    • subscribeOn
    • take
    • takeLast
    • takeUntil
    • takeWhile
    • timeout
    • timer
    • using
    • window
    • withLatestFrom
    • zip
  • 6. 更多示例
    • ImagePicker - 图片选择器
    • TableViewSectionedViewController - 多层级的列表页
    • Calculator - 计算器
  • 7. RxSwift 常用架构
    • 7.1 MVVM
      • Github Signup(示例)
    • 7.2 RxFeedback
      • Github Search(示例)
    • 7.3 ReactorKit
      • Github Search(示例)
  • 8. RxSwift 生态系统
  • 9. 学习资源
  • 10. 关于本文档
    • 10.1 文档更新日志
  • 食谱
    • RxSwift 5 更新了什么?
    • RxRelay
    • 纯函数
    • 附加作用
    • 共享附加作用
Powered by GitBook
On this page
  • 什么是函数的 附加作用?
  • 哪些是函数的 附加作用 ?
  • 网络请求
  • 获取位置信息
  • 获取 UI 状态
  • 其他类型的附加作用
  • App 的 附加作用
  • 饿了么
  • 抖音
  • 滴滴
  • Observable 中的 附加作用
  • 示例:
  • 为什么我喜欢称它为 附加作用,而不是 “副作用”?

Was this helpful?

  1. 食谱

附加作用

Previous纯函数Next共享附加作用

Last updated 4 years ago

Was this helpful?

什么是函数的 ?

如果一个函数除了计算返回值以外,还有其他可观测作用,我们就称这个函数拥有。

哪些是函数的 ?

网络请求

如果一个函数发起了网络请求,那他就是有的。这个是获取或写入了函数本体以外的全局状态(数据库存储的状态可看作是全局状态)。

获取位置信息

如果一个函数获取了位置信息,那他就是有的。这个是获取了函数本体以外的位置信息(也可以看作是全局状态)。

获取 UI 状态

如果一个函数获取了 UI 状态,那他就是有的。这个是读取函数本体以外的 UI 状态(也可以看作是全局状态)。

其他类型的附加作用

以上,网络请求,定位和UI是比较常见的。以下也是:

  • 读写全局变量

  • 读写本地数据库

  • 读写文件

  • 使用蓝牙模块

  • 打印输出

  • ...

饿了么

抖音

滴滴

// 去除了不相关的范型约束,便于理解
func subscribe(_ observer: Observer) -> Disposable

...

...

...

...

...

... 经过 60 秒后

示例:

typealias JSON = Any

let json: Observable<JSON> = Observable.create { (observer) -> Disposable in

    let task = URLSession.shared.dataTask(with: ...) { data, _, error in

        guard error == nil else {
            observer.onError(error!)
            return
        }

        guard let data = data,
            let jsonObject = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves)
            else {
            observer.onError(DataError.cantParseJSON)
            return
        }

        observer.onNext(jsonObject)
        observer.onCompleted()
    }

    task.resume()

    return Disposables.create { task.cancel() }
}
...
但是我还是想不透
后来的我害怕什么
难道爱也有副作用
藏在血液里头
让我的心偶尔有点痛
...

App 的

有并不是什么坏事情。事实上,正是因为有了他,App 才更有价值。我们以几个常见 App 为例:

饿了么是一个订餐 App,他最主要的 是更新程序本体以外的状态。即:饿 -> 饱 (将我们从很饿变为很饱)。

抖音是一个影音娱乐 App,他最主要的 是更新程序本体以外的状态。即:😐 -> 😁 (将我们变得更开心)。

滴滴是一个叫车 App,他最主要的 是更新程序本体以外的状态。即:🏠 -> 🏢(从起点到终点)。

中的

在解释 中的 之前,我们先要理解一个概念,即: 其实是一个函数:

你没有看错!以上 subscribe 函数就是 。

换句话说 的 , 指的就是 subscribe 函数里面的 。

之前在介绍 时,举了这样一个例子:

这里的闭包 { (observer) -> Disposable in ... } 可以看作是 subscribe 函数,这个函数的就是发起网络请求去获取一个 JSON。所以 let json: Observable<JSON> 的 也是发起网络请求去获取一个 JSON。

现在我们应该能够理解,什么是 的 了。

为什么我喜欢称它为 ,而不是 “”?

首先澄清一下,我们这里所介绍的 , 就是大家平时说的 “”。

最近听音乐时,不经意间切到了这一首歌:(这首歌可能你也听过)。

于是我就很好奇,这个 “” 到底指的是 不好的作用,还是 🤔。从标题上看不出来,后来我看了下歌词:

我知道了,这里的 “” 应该是 不好的作用。虽然解释成 也说得通。但是 不好的作用 更符合语境。

那么这里就有个问题,“” 是一个。他既可以代表 不好的作用,也可以代表 。而且,在有些语境下这两种意义都说得通。我们便无法读出作者的本意。

在计算机领域也是一样的,虽然很多时候我们都知道 “” 指的是 ,但是用 不好的作用 也解释得通。这样就会产生歧义。

所以,我觉得如果有一个词,专门表示计算机领域的 “” 会更好。如:。如此一来,读者不需要做多余的判断,就能解读作者的意图。

附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
附加作用
Observable
附加作用
Observable
附加作用
Observable
Observable
Observable
附加作用
附加作用
Observable
附加作用
附加作用
Observable
附加作用
附加作用
副作用
附加作用
副作用
《爱的副作用》
副作用
附加作用
副作用
附加作用
副作用
多义词
附加作用
副作用
附加作用
副作用
附加作用
1