RxSwift样例五 GitHubSignup
2017-08-18 15:38
232 查看
GitHubSignup 这个demo是相对比较大的demo,计划分俩次来讲。
可以看到有两个一样的storyboard。他们只有使用driver和使用Observer的区别。看一个就足够了,以driver为例。
可以看到主要的代码逻辑在GithubSignupViewModel2里面,在controller里面将controller的值与model绑定,这也是使用响应式开发最便捷的代码MVVM分级。
model里面 let API: GitHubAPI ,API是遵守 GitHubAPI协议的,这种面向协议编程是swift首推的,主旨是为了减少上帝类,一个类包含很多不必要属性和方法。而且因为swift不能像java那样多继承,A类中的方法B类要使用旧只能成为A的子类。使用面向协议编程可以多协议遵守,就可以规避这个问题。事实上,swift原生的API都是选择这样编程。
validatedUsername 是输入username经过validateUsername方法返回的事件元素。validateUsername这个方法实现是这样的
直接查询https://github.com/(username.URLEscaped)这个url,如果404,则表示此链接下无值,也就没有注册过这个用户名。这里其实可以做到更好。因为这样写是每次字符串有变化的时候就进行网络查询。应该做成隔几秒可以请求,并且字符串小于一定数量不请求,俩次输入一样不请求。
密码输入和确认密码就比较简单了。最后的注册也只是一个模拟,并没有真正注册github
可以看到有两个一样的storyboard。他们只有使用driver和使用Observer的区别。看一个就足够了,以driver为例。
可以看到主要的代码逻辑在GithubSignupViewModel2里面,在controller里面将controller的值与model绑定,这也是使用响应式开发最便捷的代码MVVM分级。
model里面 let API: GitHubAPI ,API是遵守 GitHubAPI协议的,这种面向协议编程是swift首推的,主旨是为了减少上帝类,一个类包含很多不必要属性和方法。而且因为swift不能像java那样多继承,A类中的方法B类要使用旧只能成为A的子类。使用面向协议编程可以多协议遵守,就可以规避这个问题。事实上,swift原生的API都是选择这样编程。
validatedUsername = input.username .flatMapLatest { username in return validationService.validateUsername(username) .asDriver(onErrorJustReturn: .failed(message: "Error contacting server")) }
validatedUsername 是输入username经过validateUsername方法返回的事件元素。validateUsername这个方法实现是这样的
func usernameAvailable(_ username: String) -> Observable<Bool> { // this is ofc just mock, but good enough let url = URL(string: "https://github.com/\(username.URLEscaped)")! let request = URLRequest(url: url) return self.URLSession.rx.response(request: request) .map { (response, _) in return response.statusCode == 404 } .catchErrorJustReturn(false) }
直接查询https://github.com/(username.URLEscaped)这个url,如果404,则表示此链接下无值,也就没有注册过这个用户名。这里其实可以做到更好。因为这样写是每次字符串有变化的时候就进行网络查询。应该做成隔几秒可以请求,并且字符串小于一定数量不请求,俩次输入一样不请求。
密码输入和确认密码就比较简单了。最后的注册也只是一个模拟,并没有真正注册github
相关文章推荐
- 【iOS】RxSwift官方Example4--Github注册(MVVM)
- RxSwift样例二 NumbersViewController
- RxSwift 样例六 Calculator
- RxSwift样例三 SimpleValidation
- http://numbbbbb.github.io/the-swift-programming-language-in-chinese/chapter1/02_a_swift_tour.html
- RxSwift(3.4.1) - Error Handling Operators
- Swift - 动画效果的实现方法总结(附样例)
- ReactiveX/RxSwift 初见
- RxSwift (4) 转换符号
- Swift - 自动布局库SnapKit的使用详解(配置、使用方法、样例)
- RxSwift:ReactiveX for Swift 翻译
- RxSwift使用技巧之过滤操作详解
- 如何将RxSwift引入项目中
- 第十一篇、RxSwift
- Swift - 加速传感器(CoreMotion)的用法,小球加速运动并反弹样例
- [绍棠_Swift] SwiftyJSON的使用详解(附样例,用于JSON数据处理)
- Swift - 本地消息的推送通知(附样例)
- RxSwift + MJRefresh 打造自动处理刷新控件状态
- the basic of RXSwift
- Swift - 本地消息的推送通知(附样例)