Jasper Blues
Jasper Blues

Reputation: 28746

ReactiveCocoa: Subscribe only to new values

I've created an event subscriber in viewDidLoad, as follows:

[RACObserve(_authenticationView.passwordInput.textField, text) subscribeNext:^(NSString* text)
{
     //handle this
}];

This fires whenever the textField.text property changes (expected), however it also fires once when created, or for the intitial value, which is not what I want.

Of course I could filter this out, but I only want to filter the first event out. How do I do this?

Requirements:

. . so what's the cleanest way to do this?

Upvotes: 12

Views: 3774

Answers (2)

Vasiliy Anisimov
Vasiliy Anisimov

Reputation: 498

You can use different approaches:

  1. -skip:1 to skip first value.
[[RACObserve(_authenticationView.passwordInput.textField, text) skip:1] subscribeNext:^(NSString* text) {
    //handle this
}];

  1. -ignore:nil to skip initial nil value.
[[RACObserve(_authenticationView.passwordInput.textField, text) ignore:nil] subscribeNext:^(NSString* text) {
    //handle this
}];

  1. -distinctUntilChanged to skip new values, that equal previous.
[[RACObserve(_authenticationView.passwordInput.textField, text) distinctUntilChanged] subscribeNext:^(NSString* text) {
    //handle this
}];

Upvotes: 1

joshaber
joshaber

Reputation: 2465

If you just want to skip the first value, just stick a -skip:1 in there:

[[RACObserve(_authenticationView.passwordInput.textField, text) skip:1] subscribeNext:^(NSString* text)
{
     //handle this
}];

Upvotes: 21

Related Questions