簡介
時隔1年,隨著項目的推移和時間的變遷匹颤,swift語言的不斷完善和進步印蓖,我們技術(shù)方向也隨之改變赦肃,由之前的oc逐漸在項目中全面的使用swift的,我們在oc版本已經(jīng)很成熟的使用響應(yīng)式編程框架船侧,所以在swift希望繼續(xù)沿用镜撩,而且之前在swift中3.0版本有使用的經(jīng)驗袁梗,所以本次我們直接采用最新版本rxswift4.0進行開發(fā)遮怜,在這里我們只對基本的方法進行分析和演練锯梁,足以滿足正常開發(fā)涝桅。
相信再好的描述抵不過自己編寫運行體會的深刻,所以我直接開門見山,直接上代碼蛤肌。
Observable(被觀察者)
RxSwift中的Observable 是觀察者模式中被觀察的對象裸准,相當于一個事件序列 (GeneratorType) 炒俱,會主動向訂閱者發(fā)送新產(chǎn)生的事件信息权悟。事件類型分為以下三種:
.onNext(element) 表示新的事件數(shù)據(jù)峦阁。
.onError(error) 表示事件序列因異常而完結(jié)榔昔。
.onCompleted() 表示事件序列完結(jié)瘪菌。
Subscribe(訂閱者)
如果只有一個Observable被創(chuàng)建诵肛,而沒有被任何的訂閱者所訂閱的話曾掂,那么什么事情都不會發(fā)生珠洗。所以我們需要創(chuàng)建一個訂閱者许蓖,來響應(yīng)事件的觸發(fā)膊爪。
1米酬、創(chuàng)建信號——>訂閱
//創(chuàng)建信號
var single1 = Observable<String>.create { (result) -> Disposable in
print("create")
result.onNext("1")
result.onCompleted()
return Disposables.create()
}
//訂閱信號
func singleFoucation() -> Void {
single1.subscribe(onNext: { (result) in
print(result)
}, onError: nil, onCompleted: {
print("onCompleted1")
}) {
print("onDisposed1")
}.disposed(by: self.disposeBag)
}
//這里可以代替跨頁面的傳值(block)
2加派、空信號只會返回onCompleted信號
var single2 = Observable<Any>.empty()
//空信號只會返回onCompleted信號
func singleFoucation2() -> Void {
single2.subscribe(onNext: { (reslute) in
print(reslute)
}, onError: nil, onCompleted: {
print("onCompleted2")
}, onDisposed: nil).disposed(by: self.disposeBag)
}
//這里可以代替點擊事件的跨頁面響應(yīng)(block)
3芍锦、just信號(快速創(chuàng)建信號,可完全代替block傳值)
var single3 = Observable<String>.just("just")
//just信號
func singleFoucation3() -> Void {
single3.subscribe(onNext: { (reslute) in
print(reslute)
}, onError: nil, onCompleted: {
print("onCompleted3")
}, onDisposed: nil).disposed(by: self.disposeBag)
}
4孽水、of序列(依次進行輸出匈棘,可結(jié)合map主卫,filter)
var single4 = Observable<Any>.of("1",["1":2],3,"4")
//of序列
func singleFoucation4() -> Void {
single4.subscribe(onNext: { (reslute) in
print(reslute)
}, onError: nil, onCompleted: {
print("onCompleted4")
}, onDisposed: nil).disposed(by: self.disposeBag)
}
5、from序列(從一個序列創(chuàng)建一個可被觀察的序列。這里使用$0表示默認的第一個參數(shù)姿现,個人感覺完全可以用of代替)
var single5 = Observable<Any>.from(["1",["1":2],3,"4"])
//from序列
func singleFoucation5() -> Void {
single5.subscribe(onNext: { (reslute) in
print(reslute)
}, onError: nil, onCompleted: {
print("onCompleted5")
}, onDisposed: nil).disposed(by: self.disposeBag)
}
6肖抱、range序列(創(chuàng)建一個發(fā)出一系列順序整數(shù)然后終止的序列)
var single6 = Observable.range(start: 0, count: 10)
//range序列
func singleFoucation6() -> Void {
single6.subscribe(onNext: { (reslute) in
print(reslute)
}, onError: nil, onCompleted: {
print("onCompleted6")
}, onDisposed: nil).disposed(by: self.disposeBag)
}
7提佣、generate序列 (創(chuàng)建一個滿足條件的序列拌屏,可以類比for循環(huán))
var single7 = Observable.generate(initialState: 0, condition: { (result) -> Bool in
return result < 10
}, iterate:{$0+1})
//generate序列
func singleFoucation7() -> Void {
single7.subscribe(onNext: { (reslute) in
print(reslute)
}, onError: nil, onCompleted: {
print("onCompleted7")
}, onDisposed: nil).disposed(by: self.disposeBag)
}
8每篷、of序列do(只讀,可類比for in循環(huán))
var single8 = Observable<Any>.of("1",["1":2],3,"4").do(onNext: { (result) in
print(result)
}, onError: nil, onCompleted: nil, onSubscribe: nil, onSubscribed: nil, onDispose: nil)
//do
func singleFoucation8() -> Void {
single8.subscribe(onNext: { (reslute) in
print(reslute)
}, onError: nil, onCompleted: {
print("onCompleted7")
}, onDisposed: nil).disposed(by: self.disposeBag)
}
//do
func singleFoucation8() -> Void {
single8.subscribe(onNext: { (reslute) in
print(reslute)
}, onError: nil, onCompleted: {
print("onCompleted8")
}, onDisposed: nil).disposed(by: self.disposeBag)
}
9刚照、subject(Subject就相當于一個橋梁或者代理啊楚,它既可以作為一個observer也可以作為一個Observable)功能可類比just信號
let subject = PublishSubject<String>()
//subject
func singleFoucation9() -> Void {
subject.asObserver().onNext("abcd")
}
func singleFoucation10() -> Void {
subject.subscribe(onNext: { (result) in
print(result)
}, onError: nil, onCompleted: nil, onDisposed: nil).disposed(by: self.disposeBag)
}
10、Variable(Variable是BehaviorSubject的封裝颜价,它和BehaviorSubject不同之處在于诉濒,不能向Variable發(fā)送.Complete和.Error专挪,它會在生命周期結(jié)束被釋放的時候自動發(fā)送.Complete)
BehaviorSubject(廣播所有事件給訂閱者,對于新的訂閱者迫卢,廣播最近的一個事件或者默認值)
[unowned self] 防止循環(huán)引用
var smsCodeMsg:Variable = Variable("123")
self.smsCodeMsg.asObservable().subscribe(onNext: { [unowned self] (message) in
self.textField.errorMessage = message
}, onError: nil).disposed(by: disposeBag)
未完待續(xù)(http://www.reibang.com/p/246f676efc44)