##集成步骤
swift2.3 OSX 10.11.6 Xcode8.0
创建一个ReactNative工程很简单
react-native init ProjectName
那么如何在一个现有的Swift工程内集成ReactNative呢?
##集成步骤
swift2.3 OSX 10.11.6 Xcode8.0
创建一个ReactNative工程很简单
react-native init ProjectName
那么如何在一个现有的Swift工程内集成ReactNative呢?
##层级结构,自底向上
持久层(File,Realm,SQLite)<==>网络层(相信每个公司都有自己的网络层吧)==>业务层(ViewModel)==>展示层(View,VC)
##Request
采用链式调用配置Request
Request(url: "https://api.github.com/users/FengDeng").method(.GET).parameters(["":""]).headers(["":""])……
请求前参数验证
Request(url: "https://api.github.com/users/FengDeng")
.beforeValidate({print("验证前先配置一些东西哈")})
.validate({throw NSError(domain: "validate error", code: -1, userInfo: nil)})
.beforeRequest({print("我要请求啦")})
.responseJSON(User)
.subscribeNext { (user) -> Void in
print(user.avatar_url)
}
所有的闭包都可以直接抛出异常,一直走到Response的error里处理
这是一个基于RxSwift的GitHub API库。希望给那些想写GitHub APP的同学一些方便。
#RxGitHubAPI的整体设计
所有的返回都设计成对象。
例如用户,YYUser
仓库,YYRepository
tag,YYTag
等等……
请大家移步去clone项目看吧 https://github.com/FengDeng/RxGitHubAPI
###一个用RxSwift实现的GitHubAPI库
仓库地址 https://github.com/FengDeng/RxGitHubAPI
这个库还未完善,由于最近工作比较忙,刚刚实现小部分的功能。
也希望大家pull request 来完善它
目前实现的功能:
只要一行代码
writeTextField.rx_text.bindTo(displayLabel.rx_text)
看下效果
那么这到底是如何实现的呢
上一节说了Observable这个超类的设计,本节内容来浅析下它的众多子类中的两个的实现
##Empty
先看下一个sample
example("empty") {
let emptySequence = Observable<Int>.empty()
let subscription = emptySequence
.subscribe { event in
print(event)
}
}
//输出
--- empty example ---
Completed
Observable
public static func empty() -> Observable<E> {
return Empty<E>()
}
流,信号,阀门,水管,水珠,漏斗,等等。这些名词都被大家用到RxSwift上,应该都了解,这里就不详细说了。
下面简单的梳理下RxSwift中的半壁江山,Observable
Observable
是一个泛型类
public class Observable<Element> : ObservableType
其实现了ObservableType
协议
public protocol ObservableType : ObservableConvertibleType{
typealias E
....
}
ObservableType
是一个泛型协议
###先看看文件结构:
├── CocoaAsyncSocket.h
├── GCD
│ ├── GCDAsyncSocket.h
│ ├── GCDAsyncSocket.m
│ ├── GCDAsyncUdpSocket.h
│ └── GCDAsyncUdpSocket.m
└── RunLoop
├── AsyncSocket.h
├── AsyncSocket.m
├── AsyncUdpSocket.h
└── AsyncUdpSocket.m
一共9个文件
CocoaAsyncSocket.h没什么说的,只是import了所有的头文件。
根据作者的目录很容易可以看出来,作者提供了两套异步socket接口,一套基于GCD
,一套基于RunLoop
。