ReactiveX 最近刚刚把接手的OC项目搞定,经过深思熟虑后,本人决定下个项目起就使用Swift(学了这么久的Swift还没真正用到实际项目里。。。)...var parameterEncoding: ParameterEncoding { return URLEncoding.default } /// 这里用于单元测试...dataSource: dataSource)).addDisposableTo(rx_disposeBag) RxSwift中使用MJRefresh 一、定义一个枚举LXFRefreshStatus,用于标志当前刷新状态...LXFRefreshStatus项 三、外界订阅output的refreshStatus 外界订阅output的refreshStatus,并且根据接收到的值进行相应的操作 vmOutput.refreshStatus.asObservable...为tableView设置刷新控件,并且在创建刷新控件的回调中使用output的requestCommond发射信号 tableView.mj_header = MJRefreshNormalHeader
; @property (nonatomic, assign) NSInteger id; @property (nonatomic, strong) NSString *name; @end Swift...model = _dataArr[indexPath.row]; return cell } 那么Model数据通过Delegate传输到UITableViewCell当中去调用Setter来刷新数据..., animated: true) //告诉生产者去刷新这次点击cell的操作 } //persenter delegate func presentLevelOneModel...() //异步刷新 } } func presentAlert(title: String, message: String) { }...} 三·Controller层 & Presenter层 OC : - (void)setModel:(Model *)model{ _model = model; } Swift :
description } } } 改写Master页面 - 更改cell展示内容 - 点击cell的页面 - 更改新增日志按钮的方法 - 新增刷新tableview...pushViewController(controller, animated: true) } 更改新增日志按钮的方法 默认模式是点击新增直接tableview多一行数据,我们这里的需求则是进入新增的编辑页面...pushViewController(controller, animated: true) } 新增刷新tableview 由于返回机制是由navigationController来控制的,...我们需要在D页面返回时刷新一下tableview,重读数据库,让新数据能展现出来 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear...(animated) //返回时刷新数据 self.tableView.reloadData() } Demo地址 https://github.com/gongxiaokai
难道我们每次都要在controller中进行如此操作吗?...面向协议 关于协议的内容可以看下我之前的这两篇文章 iOS - Swift 面向协议编程(一) iOS - Swift 面向协议编程(二) 总结协议的两大作用:1、规范 2、定制能力 定义协议 Refreshable...) { [weak self] in // 下拉后需要执行的操作 self?....refreshStatus = Variable(.none) } } 二、controller 遵守协议 Refreshable,通过协议中的方法初始化刷新控件及对应的操作...image.png 案例 协议:Refreshable.swift ViewModel:LXFLiveViewModel Controller:LXFLiveViewController LXFBiliBili
---- 上拉刷新 现在多数APP做无缝的上拉刷新,就是当tableView滚动到最后一行cell的时候,自动刷新加载数据。...用一个属性来记录是否是上拉加载数据 /// 上拉刷新标记 var isPullup = false 滚动到最后一行 cell 的时候加载数据 func tableView(_ tableView: UITableView...如果你先仔细了解这方便的问题请阅读Swift 3必看:@noescape走了, @escaping来了 网络工具类HQNetWorkManager中的代码 enum HQHTTPMethod {...token 过期处理 因为token存在时效性,因此我们需要对其判断是否有效,如果token过期需要让用户重新登录,或者进行其它页面的跳转等操作。...DEMO传送门:HQSwiftMVVM 参考: Swift 3 :Closure use of non-escaping parameter may allow it to escape Swift 3
开始我们需要知道点击行的索引(记住,不是实际的indexPath.row)而是可见cell的行索引,所以我们将会开始在下面的tableView代理方法里给它分配一个局部变量: func tableView....所以,在我们重新加载tableView之前,我们需要app找到可见行的索引值: func tableView(tableView: UITableView, didSelectRowAtIndexPath...响应其他用户操作 在CustomCell.swift文件中,你可以发现CustomCellDelegate协议的所需的代理方法都已经被声明.通过在ViewController类里实现它们我们需要设法让app...在所有的其他缺少用户操作的活动得到响应....func dateWasSelected(selectedDateString: String) { let dateCellSection = 0 let dateCellRow = 3
再者Action操作视图逻辑代码是放在C层或V层 最终导致C层随着需求会慢慢变大变臃肿 再回过头来看项目工程目录导致VC过重的原因因素 ·繁重的UI 例如tableView CollectionView...层 通常解析数据会根据后台的数据结构返回来的JSON进行匹配 swift会有点麻烦 我们拿一个 数据里嵌套数组来作为例子 @objc public class Model: NSObject {...UITableViewCell @property (nonatomic, strong) Model *model; @end @implementation Cell 但是外界数据模型没有一起变化, 暴露一个接口给外界刷新...之间的消息通讯方式) 在上面我们把DataSource麻烦的代码交给了封装的DataSource类中,但是还剩下一个Delegate代理没解决 MVC (最快上手架构) MV-Protocal (适用于复杂的多层回调...) MV-Block (适用于简单的单层回调) 创建一个数据提供层Present 也可以成为称为代理,来减少Controller的负担 @protocal PresentDelegate <NSObject
if let removeBack = favorite.remove("意琦行"){ print(removeBack) }else{ print("没有找到值") } 5、集合操作...var dictM1 = [String:NSObject]() //AnyObject一般用于指定类型,NSObject一般用于创建对象 2、对可变字典做基本操作 添加、删除和获取元素 dictM1...3、尾随闭包 尾随闭包用于需要将一个很长的闭包表达式作为最后一个参数传递给函数。.../// 提示信息 用于提示 若在tableView系列的某个方法上面写上///提示,到其他地方调用该方法时,会出现前面写的注释信息。...4 编译报错 mainView.titleLabel.text = String(small) // 编译通过 多行字符串字面量 Swift 3 中写很长的字符串只能写在一行。
MJRefresh - 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。可以自定义上下拉刷新的文字说明。具体使用看“使用方法”。...BreakOutToRefresh - swift,上拉和下拉刷新。 GearRefreshControl - swift,上拉和下拉刷新。...Animations - 封装了一下,使用的时候只要两行代码。一些动画的飞机稿,都是一些单独分离出来的用于测试的子动画,现在统一归类一下。...SDAutoLayout - AutoLayout 一行代码搞定自动布局!支持Cell、Label和Tableview高度自适应,致力于做最简单易用的AutoLayout库。...Splitflap.swift - 可用于快速给 iOS 应用创建文字翻转的动画效果。 WordPress-Editor-iOS - 一个文本编辑器 简书和新浪博客都在用。
而我们现在公司所做的项目,也是用 Swift 开发的,虽然说之前有些 OC 基础,写起 Swift 功能也是能实现,但是代码不是很优雅,不够 'Swift Style'。...image 项目功能 原创微博功能 转发微博功能 Emoji表情功能 撰写微博界面 新特性功能 消息提醒功能 多图展示功能 富文本功能 多图展示功能 下滑自动加载功能 上/下拉刷新功能...OAuth 授权登录功能 已完成 发布微博功能(API已不提供) 图片上传功能(API已不提供) 消息功能 发现功能 我的功能 SVProgressHUD 提醒功能 用到的技术点 TableView...Weibo 的 App 包里的素材图片实在太多了,找到完全匹配的要花费超多时间,所以有的资源不是很匹配,或者不是当前最新的 该Demo使用了FMDB,其实微博这种时效性毕竟高,且有较高政治敏感度的,不适合用本地缓存...这个项目是本萌新的第一个发布swift项目,有些粗糙,但是如果新手作为 Swift 上手,入门的,其实应该还可以。
设置代码如下: 获取导航栏的背景图,用于滚动时修改颜色和透明图 设置barTintColor为蓝色 设置barTintColor为白色 barImg = (navigationController?....例如,图片有1,2,3三张图,但是实际上,模型是有3,1,2,3,1五张图片。...自动加载更多 我在tableView的willDisplay方法中,监听section的变化,刷新条件是:当滚动到最后一个section的第一个元素时,加载更多数据 func tableView(_...} }) .addDisposableTo(disposeBag) } 使用了Driver,之前也提过Driver是转为UI层设计的,所有的操作都会在主线程操作...如果使用subscribe监听的话,需要设置在哪个线程操作。是不是代码有点繁琐?
接上链接 Add Player控制器在工作 现在你会忽视Game行,仅仅让用户输入玩家的名字....添加了新的一行(在底部),因为tableView和它的数据源始终是同步的....你可能用tableView.reloadData()完成了书信界面,但是上面的方法伴有动画插入一行的时候看上去更漂亮....现在运行app测试一下吧.点击一个游戏的名称,那一行就会显示一个对号.点击另一个游戏的名称,标记就会随至移动到那一行. ?...幸运的是,你可以重写prepareForSegue(:sender:)方法并且在unwind发生之前完成操作.
下拉刷新 ZJRefreshControl ZJRefreshControl 下拉刷新 加载更多 Swift 调用方式 //只有下拉刷新 refreshControl = ZJRefreshControl...,image3!]...cell.rightSwipeSettings.transition = MGSwipeTransition.Border; cell.delegate = self; 数据库 SQLiteDB SQLiteDB 操作...String } 数据请求 Swift数据请求常用的三个库 Alamofire 网络请求库 Swift SwiftyJSON 转JSON Swift Alamofire-SwiftyJSON 方便以上两个组件的结合使用...Swift
虽然用着还不错,但是它主要是为了避免手动解析 JSON 数据时大量的解包操作,降低解包不当导致 crash 的风险,感觉主要是注重安全性,易用性方面还是差了点。...它支持下标操作,但毕竟是以字符串为键取值,IDE 不能自动补全,不仅麻烦还容易写错,而且用下标取到的值是JSON类型,一般还需要再进行类型转换,终究没有操作一个 Model 来得方便。...然而 Swift 的反射实在是太弱了,运行期只能查看属性却不能给属性赋值。...JSONModel.self } if let httpError = error { print(httpError) } } jsonModel一旦被赋值就会刷新...text = post.excerpt } return cell } override func tableView(tableView: UITableView, cellForRowAtIndexPath
当前要显示的TableView 3 4 - returns: TableView中Section的个数 5 */ 6 func numberOfSectionsInTableView...1 /** 2 返回每个Section中的Cell个数 3 4 - parameter tableView: 当前显示的TableView 5...1 /** 2 返回要显示的Cell 3 4 - parameter tableView: cell要显示的TableView 5 - parameter...下方是实例的操作步骤,如下所示: ? ...也就是点击TableView的每一行,然后跳转到编辑页面对其当前点击的cell进行编辑,编辑后返回通过代理进行值的修改。
一个用于展示todo list 的 tableView,然后关联一个 tableView 变量到 Main.swift文件 2、接下来设置 Mian 为rootViewController,在AppDelegate.swift...3、然后在Main.swift 中编写一下TableView 的数据源和代理的方法。这里我们用的是 自己定义的 Cell。...记得绑定(同步骤1),Add.xib UI例如以下: 为了在Main.swift 中接收到 Add.xib 中用户输入的信息,我们在 Add.swift 定义一个协议。...protocol AddProtocal { func didCompleted(addObject: Add) } Add.swift 代码例如以下: // // Add.swift //...= "position.x" animation.values = [0, 10, -10, 10, 0] animation.keyTimes = [0, 1/6.0, 3/
网络请求、JSON 解析、异步图片加载等等全都是自己封装的,UI 布局主要是用 Storyboard 跟 AutoLayout 做的,开发语言采用 Swift。...UserMenu 中来做,然后把跟 TableView 交互的操作委托给 Controller 来做: weak var delegate: UserMenuDelegate?...05年的时候微软为设计 WPF 而提出 MVVM 模式,主要思想是基于Model 和 View 的数据双向绑定,通过响应事件来处理用户的操作。...关于面向协议编程 Swift2之后可以用 extension 给协议方法或者属性加上一个默认实现了,这使得 Swift 可以用协议模拟 Ruby 中用 module 实现的 mixin 效果,也就是通过协议扩展某个类的功能...,然后1秒后完成刷新。
用户点击添加按钮,或者侧滑删除 cell 时,在 View Controller 中其实发生了这些事情: 1.维护 Model (也就是 **items**) 2.增删 table view 的 cell 3....3.Block 用户输入将让 app 变为没网无法使用,不进行 block 的话则需要考虑数据同步的问题。...关于 MVC,斯坦福的 CS193p Paul 老师有一张非常经典的图,相信很多 iOS 的开发者也都看过: [w4x3vkozqi.png] 我们的例子中,我们等于把 Model 放到了 Controller...由于 Swift 的数组是值类型,对于 **items** 的元素增加,删除,修改或者整体变量替换,都会触发 **didSet** 的调用。Swift 的值语义编程带来了很大的便利。...用户操作 UI 唯一的作用就是触发模型的更新,然后模型更新通过通知来刷新 UI: class ToDoListViewController: UITableViewController { /
在storyboard中有很多可堆叠的内容,但有时却很难点击你想确切操作的内容.如果你遇到麻烦,下面有几个选项可以帮你.第一个就是在左侧的Document Outline里,你可以选择这个item.第二个是一个方便的热键...选择Swift语言,然后点击下一步(Next)创建. ?...text = player.game return cell } 这个方法dequeueReusableCellWithIdentifier(_:forIndexPath:) 将会检查是否有可用于回收的...Player对象,并将其分配给player. 3.可以看到标签和图片的数据都来自player对象....顺便说一句,如果你通过拖拽改变了cell的高度,而没有改变它的值,那么table view的行高属性也会自动改变.所以在第一次可能是正确的.
2A43EA90-E3FB-400F-A286-11F990C01A24 我们可以看出来我们的列表分为三部分 标题 时间 操作,我们就设置 NSTableView有 3个 Column。 ?...我们新建一个 GetPostListApi类用于获取文章页列表。 我们新建一个类 PostDetail用于显示文章的信息详情。...this Swift property?...class BaseListView 我们新建一个属性存储 M数组,当用户重新设置就刷新表格。...我们在 Swift里面可以使用 deinit函数。
领取专属 10元无门槛券
手把手带您无忧上云