Transforming Operator

13258 ワード

1. toArray()

  • アレイ、同時に単一アレイ
  • 2. map


    機能は
  • swiftと同じmap
  • 3. flatMap

  • ネストされた観測対象における内部値の制御
    let disposeBag = DisposeBag()
    
    protocol 선수 {
        var 점수 : BehaviorSubject<Int> { get }
    }
    
    struct 양궁선수 : 선수 {
        var 점수 : BehaviorSubject<Int>
    }
    
    let 한국양궁선수 = 양궁선수(점수: BehaviorSubject<Int>(value: 10))
    let 미국양궁선수 = 양궁선수(점수: BehaviorSubject<Int>(value: 8))
    
    let 올림픽경기 = PublishSubject<선수>()
    
    올림픽경기
        .flatMap{선수 in
            선수.점수
        }
        .subscribe(onNext:{
            print($0)
        })
        .disposed(by: disposeBag)
    
    print("한국양궁선수 초기값")
    올림픽경기.onNext(한국양궁선수)
    print("한국양궁선수 다음 값")
    한국양궁선수.점수.onNext(9)
    
    //출력 
    //10
    //9

    4. flatMapLatest

  • (たとえば)の2つのシーケンスを有する観測可能なシーケンスでは、新しいシーケンスがonNextされると、前のシーケンスの変更値は無視されます.
  • 検索を自動的に完了するために使用できます.
  • 新しいストリームを作成してアクションを実行するとき、新しいアイテムが解放された場合、古いストリームを処理して新しいアイテムにストリームを作成することでアクションを実行できます.

  • 5. materialize

  • 値(next()、error()等)
  • を同時に受信ことができる.

    6. dematerialize

  • 出力イベントの値
  • を返します.

    例電話番号入力コード(総合練習)

    let disposeBag = DisposeBag()
    
    let input = PublishSubject<Int?>()
    
    let list: [Int] = [1]
    
    input
        .flatMap{
            $0 == nil ? Observable.empty() : Observable.just($0)
        }
        .map{ $0! }
        .skip(while: {$0 != 0})
        .take(11) //010-6676-2789
        .toArray()
        .asObservable()
        .map {
            $0.map {"\($0)"}
        }
        .map { numbers in
            var numberList = numbers
            numberList.insert("-", at: 3)
            numberList.insert("-", at: 8)
            let number = numberList.reduce(" ",+)
            return number
        }
        .subscribe(onNext:{
            print($0)
        })
        .disposed(by: disposeBag)
    
    input.onNext(0)
    input.onNext(1)
    input.onNext(0)
    input.onNext(6)
    input.onNext(6)
    input.onNext(7)
    input.onNext(6)
    input.onNext(2)
    input.onNext(7)
    input.onNext(8)
    input.onNext(9)
    
    //010-6676-2789