2016-09-20 2 views
0

最初の値に基づいて2つのストリームをグループ化して結合したいと考えています。具体例で最初のものに基づいて2つのストリームをグループ化して結合するにはどうすればよいですか?

Marbles

たびに第一の流れの変化を説明するために、私は(すなわち、1値3、及び図6)は、第2のストリームと値を結合したいが、即時次の値をスキップ。

私はReactiveCocoaをiOSで使用していますが、他のリアクティブなフレームワークを使用している例も歓迎します。 ReactiveCocoaで

答えて

1

私の現在の実装:

var cook = MutableProperty("") 
var ingredient = MutableProperty("") 

cook.signal.observeNext { cook in 
    print(">", cook) 
} 

let skipFirst = cook.signal 
    .flatMap(.latest) { cookValue in 
     return ingredient.signal 
      .map { ingredientValue in 
       "\(cookValue) \(ingredientValue)" 
      } 
      .skip(first: 1) 
    } 

skipFirst.observeNext { str in 
    print(">>", str) 
} 

// Send values 

cook.value = "grill" 
ingredient.value = "asparagus" 
ingredient.value = "beef" 

cook.value = "fry" 
ingredient.value = "ice cream" 
ingredient.value = "donut" 
ingredient.value = "shoe" 

cook.value = "steam" 
ingredient.value = "egg" 
ingredient.value = "lettuce" 

この版画:

> grill 
>> grill beef 
> fry 
>> fry donut 
>> fry shoe 
> steam 
>> steam lettuce 

しかしこれは、私はまた、各グループの最初の値を使用したい場合、私はflatMapを繰り返す必要があることを意味非常にドライではないようです。 JavaScriptで

cook.signal 
    .flatMap(.latest) { cookValue in 
     return ingredient.signal 
      .map { ingredientValue in 
       "\(cookValue) \(ingredientValue)" 
      } 
      .take(first: 1) 
    } 
    .observeNext { str in 
     print("**>", str) 
    } 
2

、それが(ただしテストされていない)のようになります。

const result$ = a$.flatMapLatest(a => b.skip(1).map(b => {a,b})) 

何これが行うことになっている:到来するごとに、

  • 、BSに耳を傾け、最初のbをスキップして、bとaを合わせます。

制約:

  • bがホットストリーム経由で

ニースの図である必要があります。

関連する問題