관찰대상(Observable)의 생성
관찰하고자 하는 객체에 따라 Observable 생성 방법이 다른데, 여기에서는 Observable의 다양한 생성 방법에 대해서 살펴 봅니다.
스트림 소스의 생성
스트림 소스는 매우 다양한 방법으로 생성할 수 있습니다. 여기에서는 스트림 소스의 생성 방법에 대해서 살펴 봅니다.
FromEvent
먼저 event
로부터 관찰자를 생성하는 방법을 보도록 하죠. event
로부터 관찰자를 생성하는다는 이야기는 event
의 변경을 관찰한다는 의미입니다. 즉, 관찰하고자 하는 대상이 event
라는 이야기입니다.
아래 코드는 흔히 볼 수 있는 event의 형태입니다.
public event Action OnEvent;
event로부터 관찰자를 생성할 때에는 다음과 같이 Observable.FromEvet
를 사용하면 event로부터 관찰자를 생성할 수 있습니다.
Observable.FromEvent( a => OnEvent += a, h=>OnEvent -= a)
대리자(Delegate)
대리자(delegate)를
public OnDragFinished onDragFinished;
public delegate void OnDragFinished ();
Observable.FromEvent <UIProgressBar.OnDragFinished> (
h => () => h (), h => bar.onDragFinished + = h, h => bar.onDragFinished- = h
)
특정 값의 변화
ObserveEveryValueChanged(_=>value)
ReactiveProperty<T>
Update() 함수
using UniRx.Triggers;
public class Foo
{
...
void Start\(\)
{
var disposal = UpdateAsObservable\(\)
...
}
}
SendMessage
public class ObservableNGUITrigger : ObservableTriggerBase
{
Subject <Unit> onClick;
void OnClick ()
{
if (null! = onClick) onClick.OnNext (Unit.Default);
}
public IObservable <Unit> OnClickAsObservable ()
{
return onClick ?? (onClick = new Subject <Unit> ());
}
protected override void RaiseOnCompletedOnDestroy ()
{
if (null! = onClick) {
onClick.OnCompleted ();
}
}
}
특정한 기간동안 관찰
Observable.SkipUntil( '시작조건' ).TakeUntil( '종료조건' )
SkipUntil 연산자는 '시작 조건' 의 이벤트가 발생하기 전까지는 다른 이벤트는 무시하다가 시작이 되면 이벤트의 통지를 시작합니다.
이 이벤트의 통지는 TakeUntil 연산자의 '종료 조건' 이벤트가 통지전까지 관찰하게 됩니다.
만약 이 관찰을 반복해서 하고 싶은 경우에는 RepeatUntilDestroy
를 사용해서 처리할 수 있습니다.
RepeatUntilDestroy(this) // this가 소멸하기전까지 반복
위의 연산자를 사용해서 마우스 버튼이 누른 후 뗄 때가지 이벤트를 관찰하고 싶은 경우는 아래와 같습니다.
UpdateAsObservable()
.SkipUntil(mouseDown)
.TakeUntil(mouseUp)
.RepeatUntilDestroy(this)