ブログを見て場所がわからない

2092 ワード

1 flatMap関数
mapは変換を行う際に『昇次元』が起こりやすい.すなわち、変換後、1つのシーケンスから1つのシーケンスのシーケンスに変化する.『昇維』って何?集合の中で私たちはこのような例を挙げることができて、私は1つの友达のリスト[p 1,p 2,p 3]を持っていて、それではもし私の友达のリストを取得するならば、このようにすることができます:
**Swift **
myFriends.map { $0.getFriends() }

結果として[[p 1−1,p 1−2,p 1−3],[p 2−1],[p 3−1,p 3−2]]となり,これが友人の友人リストのリストとなった.これが『昇維』の例です.
Swiftでは、map後のnil結果をflatMapでフィルタできます.Rxでは、flatMapは1つのシーケンスを1つのシーケンスに変換し、その後、このシーケンスを「フラット」に1つのシーケンスに変換することができる.
** RxSwift **
example("flatMap") { 
    let sequenceInt = sequenceOf(1, 2, 3) 
    let sequenceString = sequenceOf("A", "B", "--") 

    sequenceInt 
        .flatMap { int in 
            sequenceString 
        } 
        .subscribe { 
            print($0) 
        } 
} 
--- flatMap example --- 
Next(A) 
Next(B) 
Next(--) 
Next(A) 
Next(B) 
Next(--) 
Next(A) 
Next(B) 
Next(--) 
Completed


2 combineLatest
2つのイベントキューが存在し、同時に傍受する必要がある場合、combineLatestは新しいイベントが発生するたびに、各キューの最新の要素をマージします.RxSwift
example("combineLatest 1") { 
    let intOb1 = PublishSubject() 
    let intOb2 = PublishSubject() 

    combineLatest(intOb1, intOb2) { 
        "\($0) \($1)" 
        } 
        .subscribe { 
            print($0) 
        } 

    intOb1.on(.Next("A")) 
    intOb2.on(.Next(1)) 
    intOb1.on(.Next("B")) 
    intOb2.on(.Next(2)) 
} 

--- combineLatest 1 example --- 
Next(A 1) 
Next(B 1) 
Next(B 2)


3 zip
zip人はその名の通り、2つのキューを圧縮するために使用されますが、2つのキューの要素が1つずつ対応して揃うまで待ってからマージされます.
Swift 
example("zip 1") { 
    let intOb1 = PublishSubject() 
    let intOb2 = PublishSubject() 
    zip(intOb1, intOb2) { 
        "\($0) \($1)" 
        } 
        .subscribe { 
            print($0) 
        } 
    intOb1.on(.Next("A")) 
    intOb2.on(.Next(1)) 
    intOb1.on(.Next("B")) 
    intOb1.on(.Next("C")) 
    intOb2.on(.Next(2)) 
} 

--- zip 1 example --- 
Next(A 1) 
Next(B 2)