日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RxSwift笔记七其他操作符

發布時間:2023/12/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RxSwift笔记七其他操作符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

git地址: https://github.com/ReactiveX/RxSwift參考資料:http://t.swift.gg/d/2-rxswiftReactiveX是通過可觀察的流實現異步編程的一種API,它結合了觀察者模式、迭代器模式和函數式編程的精華,RxSwift 是 ReactiveX 編程思想的一種實現。 復制代碼

subscribe

訂閱,是連接觀察者和被觀察者的操作符.

public func subscribe(on: (event: RxSwift.Event<Self.E>) -> Void) -> Disposable 就是說我們接收到的是事件,在這里一般通過 switch case 獲取對應結果。

let sequenceOfInts = PublishSubject<Int>()_ = sequenceOfInts.subscribe {print($0) }sequenceOfInts.on(.Next(1)) sequenceOfInts.on(.Completed) 復制代碼

subscribeNext

指訂閱next事件.

public func subscribeNext(onNext: (Self.E) -> Void) -> Disposable 因為只有一種事件,這里的 API 傳入的就是事件中包含的具體的值了。

let sequenceOfInts = PublishSubject<Int>()_ = sequenceOfInts.subscribeNext {print($0) }sequenceOfInts.on(.Next(1)) sequenceOfInts.on(.Completed) 復制代碼

subscribeCompleted / subscribeError

只訂閱完成/錯誤事件.

subscribeOnnextOnErrorOnCompleted

public func subscribe(onNext onNext: (Self.E -> Void)? = default, onError: (ErrorType -> Void)? = default, onCompleted: (() -> Void)? = default, onDisposed: (() -> Void)? = default) -> Disposable

takeUntil

當另一個序列開始發射值時,忽略原序列發射的值。

let originalSequence = PublishSubject<Int>() let whenThisSendsNextWorldStops = PublishSubject<Int>()_ = originalSequence.takeUntil(whenThisSendsNextWorldStops).subscribe {print($0) }originalSequence.on(.Next(1)) originalSequence.on(.Next(2)) originalSequence.on(.Next(3))whenThisSendsNextWorldStops.on(.Next(1))originalSequence.on(.Next(4)) 復制代碼

takeWhile

跟filter類似,filter 和 takeWhile 什么時候更能清晰表達你的意思,就用哪個。

let sequence = PublishSubject<Int>()_ = sequence.takeWhile { $0 < 4 }.subscribe {print($0) }sequence.on(.Next(1)) sequence.on(.Next(2)) sequence.on(.Next(3)) sequence.on(.Next(4)) sequence.on(.Next(5)) 復制代碼

amb

處理多個序列,只會關心多個序列中最先發送數據的序列,其他序列會被忽略.

let intSequence1 = PublishSubject<Int>() let intSequence2 = PublishSubject<Int>() let intSequence3 = PublishSubject<Int>()let _ = [intSequence1, intSequence2, intSequence3].amb().subscribe {print($0) }intSequence2.onNext(10) // intSequence2 最先發射 intSequence1.onNext(1) intSequence3.onNext(100) intSequence1.onNext(2) intSequence3.onNext(200) intSequence2.onNext(20)let intSequence1 = PublishSubject<Int>() let intSequence2 = PublishSubject<Int>()let _ = intSequence1.amb(intSequence2).subscribe { // 只用于比較兩個序列print($0) }intSequence2.onNext(10) // intSequence2 最先發射 intSequence1.onNext(1) intSequence1.onNext(2) intSequence2.onNext(20)復制代碼

concat

將兩個序列合并成一個序列,當一個序列中的所有元素成功發射完成之后,才會發射另一個序列中的元素。 在第一個序列發射完成之前,第二個序列發射的事件都會被忽略,但會接收第一個序列發射完成前第二個序列發射的最后一個事件。

如有侵權,請告知刪除.

轉載于:https://juejin.im/post/5ab1ee7a518825555c1d887a

總結

以上是生活随笔為你收集整理的RxSwift笔记七其他操作符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。