首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS - RxSwift 项目实战记录

使用 Moya是基于Alamofire网络请求库,这里我使用了Moya/Swift,它在Moya基础上添加了对RxSwift接口支持。...RxDataSources 如果你想用传统方式也行,不过这就失去了使用RxSwift意义。...好吧,我们接下来说说如何优雅来实现tableView数据源。其实RxDataSources官网上已经有很明确使用说明,不过我还是总结一下整个过程吧。...,也可以订阅信号 // 外界通过该属性告诉viewModel加载数据(传入值是为了标志是否重新加载) let requestCommond = PublishSubject() 在transform...: { vmOutput.requestCommond.onNext(false) }) 总结流程: ViewController已经拿到output,当下拉加载数据时候,使用output

2.8K41

【iOS】仿知乎日报,RxSwift-Part1-首页搭建

前言 之前几篇博客算是入门篇,那么这篇就是RxSwift实战篇。由于对RxSwift认识还不够深刻,所以项目中没有使用MVVM模型,以及编程思想也还没转变过来。...最后,还是非常感谢该作者源码贡献~ 框架介绍 框架 说明 Moya 对Alamofire封装 Moya/RxSwift 针对RxSwiftMoya扩展 Kingfisher 喵神网络图片加载库...我在tableViewwillDisplay方法中,监听section变化,刷新条件是:当滚动到最后一个section第一个元素时,加载更多数据 func tableView(_ tableView...,加载更多数据 if indexPath.section == modelArr.value.count - 1 && indexPath.row == 0 {...使用Moya,可以优雅封装Alamofire,而Moya/Rxswift可以将返回结果转为Observable属性,进行监听。

2.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

走进 RxSwift 之冷暖自知

实战小剧场 下面我随便举个例子,我们要完成功能是发送网络请求,将返回数据显示到一个 TableView 上。...你脑海中一直盘旋着tableView.dataSource = nil这句代码,为什么每次刷新都需要重新绑定 dataSource?这什么套路,怎么这么不按常理出牌?我白天时候在想什么?...response既是 Observer 也是 Observable,它作为 Observer 订阅了网络数据变化,每次一有新数据,就发送新事件,tableView 随之更新。...如何一眼区别 CO 和 HO 前面也说过了,不管是冷是热,它们都是 Observable,虽然我顺便提了几个 RxSwift 中典型 CO 和 HO,但如果是一个自定义 Observable 呢,要如何区分它是冷是热呢...: _observers.on(event) _observers类型并不是 Swift 原生某种集合类型,可能是出于性能考虑,RxSwift 定义了一个叫Bag数据结构,但原理上是一样

2.3K10

RxSwift介绍(一)——RxSwift初探

在swift环境下,RAC孪生兄弟RxSwift同样提供了相同框架使用,并且基于swift语言优点,RxSwift甚至能够更简洁地开发业务代码。关于RxSwift优点,大把大把的人在夸。...这里往往需要遵循TableView相关各种代理方法,下面是使用结构体生成一串简单数组并放入tableView中显示内容。...//使用结构体生成tableView数据源 struct DemoModel { var firstKey:String var secondKey:Int init(firstKey...tableView在swift环境下实现 遵循tableView代理方法还是一如既往繁多 接下来,在使用RxSwift框架下改造上面的tableView,来感受下RxSwift强大。...结构体中数据需要被RxSwift包装成了Observable信号。

2.9K40

RxSwift + MJRefresh 打造自动处理刷新控件状态

本文是基于 iOS - RxSwift 项目实战记录 所述,如果你还未阅读过,建议你最好还先阅读一遍,并下载Demo熟悉一下 : ) LXFBiliBili 前言 MVVM模式中,多出了ViewModel...在使用RxSwift开发时会大量使用到这种形式,其中就包括我们网络请求。...结合 iOS - RxSwift 项目实战记录 中所述“MJRefresh在RxSwift使用”,在output中定义了一个变量 let refreshStatus = Variable<LXFRefreshStatus...*/ // viewModel 中 output使用 protocol OutputRefreshProtocol { // 告诉外界tableView当前刷新状态 var refreshStatus...接下来才是本文重点。 重点 刷新状态无非也就那么几种,下拉重载数据,上拉加载更多,请求完成时结束下拉或上拉等等。。。那我们何必要在每个controller中再去管理这等琐事??

1.8K41

函数响应式编程框架RxSwift 学习——Subject

关于Subject定义,在RxSwift文档中它是这样说 A Subject is a sort of bridge or proxy that is available in some implementations...在RxSwift中,主要有三类Subject: PublishSubject 它仅仅会发送observer订阅之后事件,也就是说如果sequence上有.Next 到来,但是这个时候某个observer...在我上一篇文章中,说到了一个比较常见一个应用场景,就是tableview滑动加载更多数据。...在这里tableview滑动事件是一个Observable(RxCocoa提供相应支持), 我page是一个Variable类型属性,它可以订阅tableview上是否需要更改页码,然后...page又被负责API请求对象给订阅了,从而当page变化同时开始自动请求数据

67020

MVVM+RxSwift

前言 以前对MVVM理解和运用觉得很浅薄,在项目中用处只是对ViewController减负 没有做数据与View绑定,没有做到真正数据驱动视图 没有体现出MVVM易于测试好处 对于RxSwift...运用也仅限于网络请求库,RxCocoa一些优点没有运用到项目 所以是时候在项目中使用真正MVVM了(整理出套路代码),介于项目中已经引入了RxSwift,所以就用它来实现了,在学习本文前可能会要求读者对...RxSwift有一定了解和使用。...数据源这一过程,并且提供了通过序列更新TableView方法,这时候我们只要把ViewModel数据输出序列绑定到TableView数据源序列就可以了。...dataSource:TableView数据源序列,发生改变会去刷新TableView

1.4K20

UITableView增加和删除、移动

UITableViewDelegate协议; 2、tableView控件editing属性默认是NO, 并且UITableViewCell默认情况下没有删除和增加功能。    ...reloadData]; //删除后全部重新加载 [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight...枚举,要想实现单元格增加,就要实现此方法,并且返回UITableViewCellEditingStyleInsert枚举 然后还要设置tableView控件属性 editing 为YES, 完整代码如下...reloadData]; //全部重新加载 [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight...3、UITableViewCell移动:实现一个代理方法,就可以进行单元格移动: //实现此方法,就可以移动单元格, 方法里面是让数据和样式移动保持一致 - (void)tableView:(UITableView

1.7K30

DTCoreText集成与使用目录一、相关资源二、DTCoreText集成三、DTCoreText使用四、可能遇到错误五、参考链接

DTCoreText是可以将HTML字符串转化为富文本使用工具,既保证原生实现又能适应灵活样式修改,而且相比于使用WebView显示内容在性能上也有很大优势。本篇就这一技术使用进行总结。...通过这个单元格类,我们可以方便设置富文本以及获取单元格高度。以下是使用DTAttributedTextCell显示富文本核心代码: 3.1....,并更新单元格数据 //ZSDTCoreTextCell是自定义继承于DTCoreTextCell单元格 - (ZSDTCoreTextCell *)tableView:(UITableView...//2.1为富文本单元格设置Html数据 [cell setHTMLString:self.dataSource[indexPath.section][indexPath.row]];...:%d",i]]; } //这里提供Html图片链接,没有宽高属性,代码中已经演示了如何处理 int k = i % 6;

4.7K90

RxSwift 与 BLE 实战——VisualBlue

今天就介绍一下前段时间写一个 demo,主要功能是扫描附近蓝牙设备,显示相关信息,点击后可以连接设备,并获取更多信息。对 RxSwift 及 BLE 感兴趣同学可以看看,或有所得。...做过蓝牙相关开发 iOS 同学们肯定都用过 CoreBluetooth 这个系统框架,使用它的话,几乎所有操作都是通过 delegate 完成。...我曾一度想着用 RxSwift 去包装一下 CoreBluetooth,后来发现已经有人做了这件事了,于是就想先写个 demo 看看靠不靠谱。Demo 在这里。...,并与tableView绑定 将资源添加到disposeBag中,以待统一回收处理 这个过程用 Rx 风格来写大概是这样: func bindDataSource() { manager.rx_state...discoverCharacteristics(nil) } .toObservable() .switchLatest() } 有空的话我可能还会为这个 demo 再加些内容,譬如加上监听蓝牙通道、向设备发送数据等功能

1.1K20

iOS表视图单元格高度自适应

iOS表视图高度自适应可以节省很多麻烦,尤其是涉及到复杂业务逻辑时,今天尝试了使用Masonry和FDTemplatelayoutCell来布局表视图单元格,从而达到单元格高度自适应效果,这里就总结了这其中使用要点和注意问题...我们需要做就是使用Masonry对视图单元格位于最底部视图设置bottom约束,使其能够确定距离单元格最低端距离。...使用时候关键步骤包括: 1、注册表视图单元格 这里分为NIb文件和普通类文件单元格注册,我使用是xib文件创建单元格,代码如下: - (UITableView *)tableView{...; } return _tableView; } 2、返回单元格高度 返回单元格高度我们就不必计算了,使用如下方法来返回 //单元格高度 - (CGFloat)tableView:(...因为我使用了xib文件来加载视图,所以开始时候写了如下方法获取单元格 //获取单元格 + (OrderTableViewCell *)getOrderTableViewCell{ NSArray

1.7K70

Android 自定义LayoutManager实现花式表格

前言 表格是自打我进公司以后就使用控件,起初使用是ScrollablePanel,从一开始被花式吊打,到后期熟练使用。 ?...经常看到有同学问类似的首页如何实现,现在不用自定义View也可以轻松实现了哈~ 课程表 ? 表格 ?...在展示代码之前,了解一下TableView主要函数: ?...为了确保表格每一个单元格长度和宽度都一样(子视图可以在横纵方向上占有多个单元格),宽和高都使用两种方式: 设置具体值,那么单元格宽或者高值就是具体 设置一行或者一列可以容纳单元格数量 所以宽高各有两种...如果TableView使用模式是Mode_A、Mode_C和Mode_D,需要再重新测量: mTable.post(() - mTable.reMeasure()); 总结 总的来说,TableView

1.7K21

如何简便快捷使用python抓爬网页动态加载数据

代码负责获取这些数据,然后通过类似逆向工程方式研究它如何构造http请求,然后自己模拟去发送这些请求来获取数据。...如何才能简单方便获取动态加载数据呢。...只要商品信息显示在页面上,那么通过DOM就一定能获取,因此如果我们有办法获取浏览器内部DOM模型那么就可以读取到动态加载数据,由于多余数据是页面下拉后触发给定js代码才通过ajax动态获取,因此如果我们能通过代码方式控制浏览器加载网页...,然后让浏览器对页面进行下拉,然后读取浏览器页面对应DOM那么就可以获得动态加载数据。...经过一番调查,我们发现一个叫selenium控件能通过代码动态控制浏览器,例如让浏览器加载特定页面,让浏览器下拉页面,然后获取浏览器中加载页面的html代码,于是我们可以使用它来方便抓取动态页面数据

2K10

函数响应式编程框架RxSwift 学习——Observable

最近开始研究RxSwift,网上能查到资料太有限,边学边记录,有不对地方欢迎大家指正。 按照官方自己说法,它是swift版本Rx,是一个提供响应函数式编程框架。...获得Observable 要得到一个Observable有两种方式,一种是RxSwift已经提供了(这里你可能需要引入RxCocoa),一种是自己创建。...信号操作 常用操作符有map,flatMap,subscribe,doOn,retry等等,具体用法在它文档中有具体说明。比如在我demo里,需要根据页码加载列表数据。...,然后刷新tableview。...throttle保证了事件序列发送频率不会过快,doOn在每次.Next到来之前让我们有机会做些额外处理,页码变化通过flatMap触发API调用,然后把得到数据绑定到每个cell上面。

70010

Klee:用 C++ 实现数据驱动开发

音乐馆设计稿 先别急着看答案,来分析一下这个典型列表界面: 控件方面:需要使用 TableView 方式布局,每行均有头像、名字、状态圆点、作品列表和下载按钮。...因此没有必要一次就收集到完整依赖,只需要确保收集当前代码路径依赖即可。 如何收集依赖 很简单,当一个函数尝试读取一个响应式数据时,便记录该函数对此数据有依赖。...在计算数据函数体内使用到响应式数据,会自动建立依赖关系,若某个依赖项发生变化,计算属性将被标记为 dirty,并在下次被使用或者下一个消息循环触发重新计算。... << *namelength; // 重新计算得到新值:7 使用响应式变量和计算数据,就可以组合搭建出各种业务逻辑了。...---- 与 RxSwift 对比 同为 Native 数据驱动开发框架,Klee 从设计思路上与主流 RxSwift 等框架有所不同。

2.2K30

iOS小经验:UITableView&UICollectionView设置单元格默认选中状态

场景需求 一个表格视图(或者宫格视图)中,当一个单元格被选中时设置彩色样式,选中其它单元格时设置灰色样式。 2. 一个思路 通过实现选中和非选择代理,以在适当时机进行UI更新操作。 3....:(NSIndexPath *)indexPath; 3.2 代码设置默认选中状态 (要等数据加载完成之后再调用) 执行方法主体:tableview对象 //选中 - (void)selectRowAtIndexPath...: 上述代码强制设置某单元格选中或者不选中那一刻,都不会回调tableview选中代理方法,也不会发出通知UITableViewSelectionDidChangeNotification。...UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath; 4.2 代码设置默认选中状态 (要等数据加载完成之后再调用...: 类似的,上述代码强制设置某单元格选中或者不选中那一刻,都不会回调选中代理方法,也不会发出通知。

3.4K50

C++ Qt开发:StandardItemModel数据模型组件

数据模型组件通常会配合TableView等相关组件一起使用,首先绘制UI界面,界面中包含顶部ToolBar组件,底部是一个TableView视图表格,最下方是一个PlainTextEdit文本框,如下图所示...首先笔者先来演示一下如何tableView组件与QStandardItemModel组件进行绑定操作,其实绑定很简单只需要调用ui->tableView->setModel即可将tableView组件与...model数据集进行绑定,当绑定后,模型中数据发生变化则会自动刷新到View组件中,我们就无需关心界面中组件如何显示了,这个现实过程交给Model映射吧。...如下所示代码片段是一个使用 QStandardItemModel 例子,演示了如何创建一个带有表头和初始数据 QTableView。...; 1.3 插入与删除 首先来解释一下如何添加一行新行,其实添加与插入原理一致,唯一区别在于,添加一行新数据是在行尾加入,这个可以使用model->columnCount()来得到行尾,而插入则是在选中当前

18510
领券