RAC+RxSwift
文章平均质量分 75
RAC+Rxswift响应式编程,学习了解函数响应式编程的思想、使用及原理,它抽象了异步编程,统一了代码风格,并且完全通过单元测试,并通过不断对其底层探索,掌握其底层实现原理。
╰つ栺尖篴夢ゞ
本人毕业于计算机技术专业,从事iOS高级开发,专注于iOS/MacOS内核/汇编/源码/架构/算法等相关技术的开发学习,同时热爱人工智能、OpenGL/ES、云原生等技术,优快云博客专家与原力计划作者,华为云云享专家与特约博主,阿里云专家博主,荣获优快云 iOS领域优质创作者、2022年度博客之星移动领域TOP 3、2022年度博客之星TOP 16、AI创想秀邂逅“华为云ModelArts”征文大赛一等奖、优快云第一届猿创征文优质博文奖,以及多项优秀TOP博文、优快云开源挑战赛优秀奖等。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RxSwift之环境的搭建配置与基础控件的使用
Rx 简介一、什么是 Rx?Rx 是 Reactive X 的缩写,简单来说就是基于异步 Event(事件)序列的响应式编程。Rx 可以简化异步编程方法,并提供更优雅的数据绑定,让我们可以时刻响应新的数据同时顺序地处理它们。ReactiveX(Reactive Extensions)是通过可观察的流实现异步编程的一种API,它结合了观察者模式、迭代器模式和函数式编程的精华。RxSwift 是 ReactiveX 编程思想的一种实现,几乎每一种语言都会有那么一个 Rx[xxxx] 框架,比如Rxsw原创 2020-09-03 23:35:13 · 6534 阅读 · 3 评论 -
RxSwift之UI控件Label扩展的使用
一、将数据绑定到 text 属性上(普通文本)当程序启动时就开始计时,同时将已过去的时间格式化后显示在 label 标签上:// 创建文本标签let label = UILabel(frame:CGRect(x:20, y:40, width:300, height:100))self.view.addSubview(label) // 创建一个计时器(每0.1秒发送一个索引数)let timer = Observable<Int>.interval(0.1, schedule原创 2021-10-31 16:19:59 · 761 阅读 · 0 评论 -
RxSwift之UI控件UITextField与UITextView扩展的使用
一、监听单个 textField 内容的变化(textView 同理)将 textField 里输入的内容实时地显示到控制台中,示例代码:// 创建文本输入框let textField = UITextField(frame: CGRect(x:10, y:80, width:200, height:30))textField.borderStyle = UITextField.BorderStyle.roundedRectself.view.addSubview(textField) /原创 2021-10-31 20:16:03 · 3041 阅读 · 0 评论 -
RxSwift之UI控件UIButton与UIBarButtonItem扩展的使用
一、点击事件响应如果想实现点击按钮后,弹出一个消息提示框:示例代码:import UIKitimport RxSwiftimport RxCocoa class ViewController: UIViewController { let disposeBag = DisposeBag() @IBOutlet weak var button: UIButton! override func viewDidLoad() {原创 2021-11-01 21:28:03 · 1994 阅读 · 0 评论 -
RxSwift之UI控件UISwitch与UISegmentedControl扩展的使用
一、UISwitch(开关按钮)实现当 switch 开关状态改变时,输出当前值:示例代码:switch1.rx.isOn.asObservable() .subscribe(onNext: { print("当前开关状态:\($0)") }) .disposed(by: disposeBag)当切换 switch 开关时,button 会在可用和不可用的状态间切换:示例代码:switch1.rx.isOn .bind(t原创 2021-11-01 21:44:05 · 1006 阅读 · 0 评论 -
RxSwift之UI控件UIActivityIndicatorView与UIApplication扩展的使用
一、UIActivityIndicatorView(活动指示器)UIActivityIndicatorView 又叫状态指示器,它会通过一个旋转的“菊花”来表示当前的活动状态。如下所示,可以控制活动指示器是否显示旋转:示例代码:mySwitch.rx.value .bind(to: activityIndicator.rx.isAnimating) .disposed(by: disposeBag)二、UIApplicationRxSwift 对 UIApplica原创 2021-11-02 21:36:12 · 659 阅读 · 0 评论 -
RxSwift之UI控件UISlider与UIStepper扩展的使用
一、UISlider(滑块)如下所示,当拖动滑块时,在控制台中实时输出 slider 当前值:当前值为:0.308442当前值为:0.349990当前值为:0.400087当前值为:0.459987当前值为:0.550990当前值为:0.700990示例代码:import UIKitimport RxSwiftimport RxCocoa class ViewController: UIViewController { @IBOutlet weak原创 2021-11-02 21:42:16 · 916 阅读 · 0 评论 -
RxSwift之UI控件UITableView扩展的使用
一、单分区的表格如下所示,单个分区的表格展示:示例代码:import UIKitimport RxSwiftimport RxCocoa class ViewController: UIViewController { var tableView:UITableView! let disposeBag = DisposeBag() override func viewDidLoad() { super.viewDidLoad原创 2021-11-03 21:46:18 · 2256 阅读 · 0 评论 -
RxSwift之UI控件UICollectionView扩展的使用
一、基本用法① 单个分区的集合视图效果如下:示例代码:// 定义布局方式以及单元格大小let flowLayout = UICollectionViewFlowLayout()flowLayout.sectionInset = UIEdgeInsets.init(top: 0, left: 5, bottom: 0, right: 5)flowLayout.itemSize = CGSize(width: (SCREEN_WIDTH-50)/3.0, height: 70) //原创 2021-11-10 19:13:02 · 1970 阅读 · 0 评论 -
RxSwift之订阅UITableViewCell里的按钮点击事件
一、前言我们知道,通过订阅 tableView 的 itemSelected 或 modelSelected 这两个 Rx 扩展方法,可以对单元格的点击事件进行响应,并执行相关的业务代码。但有时候并不需要整个 cell 都能进行点击响应,可能是点击单元格内的按钮时才触发相关的操作。二、效果展示点击单元格右侧的按钮后,会弹出显示该单元格的内容以及索引值;而点击单元格其他位置,不触发任何操作。三、示例MyTableCell.swift(自定义单元格类)注意 prepareForR原创 2021-11-11 21:41:33 · 2199 阅读 · 2 评论 -
RxSwift之UI控件UIPickerView扩展的使用
一、基本用法① 单列的情况基本用法示例代码:var pickerView : UIPickerView! // 最简单的pickerView适配器(显示普通文本)private let stringPickerAdapter = RxPickerViewStringAdapter<[String]>( components: [], numberOfComponents: { _,_,_ in 1 }, numberOfRowsInCompon原创 2021-11-10 20:01:35 · 846 阅读 · 2 评论 -
RxSwift之UI控件UIGestureRecognizer扩展的使用
RxCocoa 同样对 UIGestureRecognizer 进行了扩展,并增加相关的响应方法。现在以滑动手势为例做具体说明,其它手势用法也是一样的。当手指在界面上向上滑动时,弹出提示框,并显示出滑动起点的坐标,效果如下:响应回调的示例一:// 添加一个上滑手势let swipe = UISwipeGestureRecognizer()swipe.direction = .upself.view.addGestureRecognizer(swipe)// 手势响应swipe.r.原创 2021-11-13 19:58:19 · 1329 阅读 · 0 评论 -
RxSwift之NotificationCenter的使用和自定义
一、系统通知的注册与响应① 监听应用进入后台的通知现有如下需求:程序编译运行后,当按下设备的 home 键,程序进入后台的同时会在控制台中输出相关信息。程序进入后台时除了会执行 AppDelegate.swift 里的 applicationDidEnterBackground 方法外,还会发送 UIApplicationDidEnterBackground 通知,这里可以使用 NotificationCenter 的 Rx 扩展方法来监听这个通知。关于 .takeUntil(self.rx.de原创 2021-11-13 20:30:24 · 2336 阅读 · 0 评论 -
RxSwift之深入解析URLSession的数据请求和数据处理
一、请求网络数据① 通过 rx.response 请求数据如下所示,通过豆瓣提供的音乐频道列表接口获取数据,并将返回结果输出到控制台中:"https://www.douban.com/j/app/radio/channels" -i -vSuccess (2134ms): Status 200返回的数据是: {"channels":[{"name_en":"Personal Radio","seq_id":0,"abbr_en":"My","name":"私人兆赫","channel_id":原创 2021-11-13 19:07:00 · 1295 阅读 · 0 评论 -
RxSwift之深入解析如何创建Observable序列
一、emty创建一个空的序列:本来序列事件是 Int 类型的,调用 emty 函数没有序列,只能complete: let emtyOb = Observable<Int>.empty() _ = emtyOb.subscribe(onNext: { (number) in print("订阅:",number) }, onError: { (error) in print("error:",error) }, onCompleted: { print原创 2021-08-08 21:47:07 · 4754 阅读 · 3 评论 -
RxSwift之深入解析如何创建观察者Observer
一、什么是观察者?“观察者”是用来监听事件,然后它需要这个事件做出响应。例如:弹出提示框就是观察者,它对点击按钮这个事件做出响应。那么,什么是观察者呢?其实,响应事件的都是观察者。当室温高于 33 度时,打开空调降温,打开空调降温就是观察者 Observer:当《海贼王》更新一集时,我们就立即观看这一集,观看这一集就是观察者 Observer:当取到 JSON 时,将它打印出来,将它打印出来就是观察者 Observer:当任务结束后,提示用户任务原创 2021-10-21 19:49:08 · 51232 阅读 · 10 评论 -
RxSwift之常用高阶函数(操作符Operator)的说明和使用
一、组合操作符① startWithstartWith 方法会在 Observable 序列开始之前插入一些事件元素,即发出事件消息之前,会先发出这些预先插入的事件消息。如下所示: Observable.of("2", "3", "4") .startWith("1") .subscribe(onNext: { print($0) }) .disposed(by: DisposeBag()) // 输出结果 1 2 3 4插入多个数据,如下所示: Observ原创 2021-08-09 20:47:58 · 8793 阅读 · 3 评论 -
RxSwift之深入解析场景特征序列的使用和底层实现
一、引序任何序列都可以用 Observable 描述,创建序列 -> 订阅序列 -> 信号发送 -> 信号接收: Observable<Any>.create { (observer) -> Disposable in observer.onNext("信号1") return Disposables.create() }.subscribe(onNext: { (val) in print("信号接收区:\(val)") }).原创 2021-08-11 20:07:16 · 7632 阅读 · 3 评论 -
RxSwift之深入解析核心逻辑Observable的底层原理
一、前言现有一段 RxSwift 使用序列并监听序列消息发送的示例代码,如下所示: // 创建序列 let ob = Observable<Any>.create { (observer) -> Disposable in // 发送信号 observer.onNext("发送信号") observer.onError(NSError.init(domain: "EpisodeError", code: 10086, userInfo: nil)) return原创 2021-08-08 19:29:08 · 7460 阅读 · 4 评论 -
RxSwift之深入解析dispose源码的实现原理
一、前言任何对象都有生命周期,有创建就要销毁。OC 中有 init 和 dealloc,swift 有 init 和 deinit,RxSwift 也不例外,有 create 和 dispose。RxSwift 有两种清除方式:订阅产生的可清除资源(Disposable)对象,调用 dispose 方法清除;通过清除包 DisposeBag 清除,在作用域结束后被释放,也可以在需要的时候置空释放。无论哪种方式,最终都是调用 dispose() 方法来释放。现有如下代码,序列的创原创 2021-08-14 21:47:46 · 5641 阅读 · 3 评论 -
RxSwift之深入解析特殊序列deallocating与deallocated的源码实现
一、引言在 RxSwfit 中,有两个特殊序列:deallocating 与 deallocated,deinit 等价于 dealloc。在 deallocating 与 deallocated 两个序列被订阅时,那么当 deinit 调用时会触发这两个序列发送信号。它们的执行顺序为:deallocating -> deinit -> deallocated。现有如下的测试代码: override func viewDidLoad() { _ = rx.dealloc原创 2021-08-16 18:33:32 · 6254 阅读 · 3 评论 -
RxSwift之深入解析map操作符的底层实现
一、map 操作符的使用map 操作符将源 Observable 的每个元素转换一遍,然后返回含有转换结果的 Observable:现有如下示例:Observable<Int>.of(1,2,3,4,5,6) .subscribe(onNext: { (val) in print(val) }).disposed(by: disposeBag)// 执行结果1,2,3,4,5,6在 map 操作:Observable<Int&g原创 2021-10-27 15:51:04 · 853 阅读 · 2 评论 -
RxSwift之深入解析Subject的使用和实现原理
一、SubjectRxSwift 的核心逻辑 Observable 不具备发送事件的能力,创建一个 Observable 的时候就要预先将要发出的数据都准备好,等到有人订阅它时再将数据通过 Event 发出去。但有时希望 Observable 在运行时能动态地获得或者说产生一个新的数据,再通过 Event 发送出去。比如,订阅一个输入框的输入内容,当用户每输入一个字符之后,输入框关联的 Observable 就会发出一个带有输入内容的 Event,通知给所有订阅者。为此,RxSwift 提供了一种可以发原创 2021-10-27 20:18:15 · 1133 阅读 · 2 评论 -
RxSwift之深入解析Using操作的应用和原理
一、前言ReactiveX 官方文档 对于 Using 的描述如下:create a disposable resource that has the same lifespan as the Observable即创建一个和 Observable 具有相同生命周期的 disposable 资源。可以看出:当一个 ObserverA 订阅 Using 返回的 Observable 时,Using 会使用调用者传入的 Resource 工厂方法 [resourceFactory] 创建对原创 2022-04-02 16:00:21 · 49294 阅读 · 0 评论
分享