RxSwift 基础专辑
文章平均质量分 91
酒茶白开水
这个作者很懒,什么都没留下…
展开
-
RxSwift官方实例十一(github搜索)
代码下载搭建UI新建一个控制器,搭建如下UI:模型层处理定义如下数据模型用于操作github搜索的数据:enum GitHubServiceError: Error { case offline case githubLimitReached case networkError}struct Repository: CustomDebugStringConvertible { var name: String var url: URL ini原创 2021-01-05 15:52:16 · 537 阅读 · 0 评论 -
RxSwift官方实例十(刷新)
代码下载搭建UI新建控制器,搭建两个UITableView和一个UICollectionView作为控制器属性: @IBOutlet weak var partialTableView: UITableView! @IBOutlet weak var tableView: UITableView! @IBOutlet weak var partialCollectionView: UICollectionView!在控制器的viewDidLoad函数中为导航栏的右侧设置一个i原创 2020-12-17 09:54:51 · 447 阅读 · 0 评论 -
RxSwift官方实例九(UITableVIew复杂绑定)
代码下载复杂UITableview绑定Rx实现RxCocoa没有实现复杂UITableview数据绑定(如多组数据、cell编辑等),需要自行实现,不过通过对RxCocoa中UITableview单组数据绑定的分析,其实实现思路是一样的。定义一个SectionModelType协议来规范整个组的数据:protocol SectionModelType { associatedtype Section associatedtype Item var model: Se原创 2020-12-10 10:25:11 · 1466 阅读 · 0 评论 -
RxSwift官方实例八(UITableVIew)
代码下载UITableView的Rx实现分析RxTableViewDelegateProxy分析RxTableViewDelegateProxy继承自RxScrollViewDelegateProxy并遵守UITableViewDelegate协议:open class RxTableViewDelegateProxy : RxScrollViewDelegateProxy , UITableViewDelegate { /// Typed parent object.原创 2020-12-02 10:38:43 · 535 阅读 · 0 评论 -
RxSwift官方实例七(UIPickerView)
代码下载UIPickerView的Rx实现分析RxPickerViewDelegateProxy分析RxCocoa已经实现了RxPickerViewDelegateProxy,该类继承DelegateProxy基类,遵守DelegateProxyType、UIPickerViewDelegate协议: extension UIPickerView: HasDelegate { public typealias Delegate = UIPickerViewDelegate原创 2020-11-30 15:57:24 · 593 阅读 · 0 评论 -
RxSwift官方实例六(UIImagePickerController)
代码下载ImagePicker搭建UI构建如下UI:设置按钮的是否可用: cameraButton.isEnabled = UIImagePickerController.isSourceTypeAvailable(.camera)UIImagePickerControllerDelegate的Rx实现UIImagePickerController的代理对象需要遵守UIImagePickerControllerDelegate和UINavigationControllerDe原创 2020-11-05 18:34:06 · 424 阅读 · 0 评论 -
RxSwift官方实例五(定位)
代码下载定位搭建UI构建如下UI: self.view.addSubview(noGeolocationView) noGeolocationView.snp.makeConstraints { (maker) in maker.left.top.right.bottom.equalTo(view) }CLLocationManagerDelegate的Rx实现由于RxCocoa没有对CLLocationManagerDe原创 2020-09-23 10:48:42 · 311 阅读 · 0 评论 -
RxSwift文档补充二(Delegate)
DelegateProxyTypeView只能注册一个delegate/datasource,而DelegateProxyType协议允许使用正常的delegates和Rx观察序列。Proxies为特定的视图存储有关observers、subscriptions和delegates的信息。DelegateProxyType的实现不能直接初始化,应该使用获取实现DelegateProxyType、proxy初始化实例的方法。这或多或少就是DelegateProxyType的工作原理: +-原创 2020-09-17 11:39:49 · 448 阅读 · 0 评论 -
RxSwift文档补充一(Subject)
SubjectSubject是ReactiveX某些实现中的一种可用的桥或代理,既充当observer又充当Observable。因为它是observer,所以可以订阅一个或多个Observable,并且因为它是Observable,所以可以通过发送观察到的元素来传递它们,还可以发出新的元素。因为某个Subject订阅了一个Observable,它将触发Observable开始发出元素(如果Observable是“cold”的,也就是说,如果它在开始发出元素之前等待订阅)。这样可以使最终的Subject原创 2020-08-13 11:53:57 · 167 阅读 · 0 评论 -
RxSwift官方实例四(计算器)
代码下载UI搭建如下图UI:实现计算器逻辑定义Operator枚举表示基本运算符,如下所示:/// 基本运算符enum Operator { case addition // 加 case subtruction // 减 case multiplication // 乘 case division // 除}extension Operator { /// 符号字符串 var sign: String { switch原创 2020-08-10 11:41:31 · 180 阅读 · 0 评论 -
RxSwift官方实例三(API包装)
代码下载UI搭建下图UI:UI控件处理简单控件处理首先定义一个用于显示信息的函数: func debug(_ param: String) { print(param) label.text = param }UITapGestureRecognizer处理: pan.rx.event.subscribe(onNext: { if self.textField.isFirstResponder || se原创 2020-08-09 13:08:01 · 329 阅读 · 0 评论 -
RxSwift官方实例二(MVVM)
代码下载构建UI如下图所示,搭建好UI并连线:弹框由于弹框属于View层,但是又得在ViewModel中使用,这违背了MVVM模式中ViewModel不能引用View的限制。所以通过协议来解决这个问题,在ViewModel层中定义如下协议:protocol WireFrame { /// 弹框 /// - Parameters: /// - title: 标题 /// - message: 信息 /// - cancelAction: 取消按钮原创 2020-08-07 14:48:22 · 751 阅读 · 1 评论 -
RxSwift官方实例一(绑定)
代码下载数字相加略……,详情看代码。有效验证搭建UI构建如下UI:初始化定义如下两个常量用来限制用户名和密码的输入长度:/// 用户名最小长度private let minUsernameLength = 6/// 密码最小长度private let minPasswordLength = 6初始化如下控件的显示: // 初始化控件显示 usernameValid.text = "用户名至少\(minUsernameLength)个字符……"原创 2020-08-03 11:33:10 · 714 阅读 · 0 评论 -
RxSwift文档十一(示例)
代码下载示例响应值首先,从一些命令式代码开始。此示例的目的是如果满足某些条件将从a,b中计算的的值绑定到标识符c。以下是计算c值的命令性代码:// 这是标准的命令式代码var c: Stringvar a = 1 // 这只会将值“ 1” 值赋给“a”一次var b = 2 // 这只会将值“2”值赋给“b”一次if a + b >= 0 { c = "\(a + b) is positive" // 这只会将值赋给“ c ”一次}c的值现在是原创 2020-07-28 15:56:20 · 157 阅读 · 0 评论 -
RxSwift文档十(其他)
Subjects所有行为都与此处描述的完全相同RelaysRxRelay提供两种Relays:PublishRelay和BehaviorRelay。它们的行为与并行Subjects相似,有两处变化:Relays永远不会完成。Relays永远不会发出错误。本质上,Relays只发出.next事件,永不终止。冷热Observables建议更多地将其视为序列的属性而不是序列的类型,因为它们完全由适合它们的相同抽象表示,Observable序列。这是ReactiveX.io的定义Observ原创 2020-07-27 17:44:43 · 268 阅读 · 0 评论 -
RxSwift文档九(设计原理)
设计原理为什么错误类型不是泛型enum Event<Element> { case next(Element) // 序列的下一个元素 case error(Error) // 序列因错误而失败 case completed // 序列成功终止}讨论泛型Error优缺点。如果具有泛型Error类型,则会在两个可观察对象之间不匹配。假设有:Observable<String, E1> 和 Observab原创 2020-07-27 16:52:26 · 130 阅读 · 0 评论 -
RxSwift文档八(警告)
警告未使用disposable以下是有效的subscribe*,bind*和drive*系列函数返回的Disposable。将收到有关执行某些操作的警告:let xs: Observable<E> ....xs .filter { ... } .map { ... } .switchLatest() .subscribe(onNext: { ... }, onError: { ... })subscribe函数返回Disposable可用于原创 2020-07-24 15:07:53 · 166 阅读 · 0 评论 -
RxSwift文档六(单元测试)
单元测试测试自定义操作符RxSwift用RxTest为所有操作符测试,位于Rx.xcworkspace项目内的AllTests-*目标中。这是典型的RxSwift操作符单元测试的示例:func testMap_Range() { // 初始化测试调度程序。. // 测试调度程序实现虚拟时间与本地机器时钟分离。 // 这样可以尽快运行模拟并证明所有事件都已处理完毕。 let scheduler = TestScheduler(initialClock: 0)原创 2020-07-24 15:00:15 · 161 阅读 · 0 评论 -
RxSwift文档五(Schedulers)
代码下载Schedulers串行与并发调度程序自定义调度程序内置调度程序Schedulers抽象出执行工作的机制。执行工作的机制包括当前线程,调度队列(dispatch queues),操作队列(operation queues),新线程,线程池和运行循环。有两个主要的操作符使用Schedulers,observeOn和subscribeOn。如果要在不同的Schedulers上执行工作,只需使用observeOn(scheduler)操作符。通常使用observeOn多于subscr原创 2020-07-24 14:57:30 · 166 阅读 · 0 评论 -
RxSwift文档四(Traits)
代码下载本文档将尝试描述什么是Traits,为什么它们是有用的概念,以及如何使用和创建它们。一般为什么Swift具有强大的类型系统,可用于提高应用程序的正确性和稳定性,并使Rx的使用具有更直接简单的体验。与可用于任何上下文的原始Observable相比,Traits有助于沟通并确保可观察序列属性跨接口边界,并提供上下文含义,语法糖和目标更明确。因此,Traits完全是可选的。可以在程序中随处使用原始Observable序列,因为所有核心RxSwift/RxCocoa API都支持它们。注意:本文原创 2020-07-23 17:05:37 · 222 阅读 · 0 评论 -
RxSwift文档三(基础)
代码下载开始该项目试图与ReactiveX.io保持一致。一般的跨平台文档和教程应该对RxSwift也是有效的。Observables又叫做序列Disposing隐含的Observable保证创建第一个Observable创建一个Observable执行工作共享订阅和share操作符操作符Playgrounds自定义操作符错误处理调试编译错误调试启用调试模式调试内存泄漏KVOUI层提示发送HTTP请求RxDataSourcesObservables又名序列基础原创 2020-07-23 14:36:08 · 474 阅读 · 0 评论 -
RxSwift文档二(为何使用Rx)
代码下载为何使用RxRx支持以声明方式构建应用程序。绑定// 原文这里应该有纰漏,应为firstName.rx.text.orEmpty与lastName.rx.text.orEmpty否则会造成可选字符串未解包Observable.combineLatest(firstName.rx.text, lastName.rx.text) { $0 + " " + $1 } .map { "Greetings, \($0)" } .bind(to: greetingLabel.rx.te原创 2020-07-16 10:56:12 · 318 阅读 · 0 评论 -
RxSwift文档一(简介)
简介Rx是通过接口(Observable)表示的通用抽象的计算。RxSwift是Rx的Swift版本。它试图尽可能多地从原始版本移植概念,但是为了更好地与iOS/macOS环境集成,对一些概念进行了调整。可以在ReactiveX.io上找到跨平台的文档。与原始Rx一样,它的目的是使异步操作、事件和数据流易于组合。KVO观察、异步操作和流都在序列(sequence)的抽象下统一。这就是Rx如此简单、优雅和强大的原因。结构RxSwift包含五个独立的组件,具体如下:┌─────────────原创 2020-07-13 10:49:11 · 420 阅读 · 0 评论