관찰대상(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)

results matching ""

    No results matching ""