Reputation: 28746
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
Reputation: 498
You can use different approaches:
-skip:1
to skip first value.[[RACObserve(_authenticationView.passwordInput.textField, text) skip:1] subscribeNext:^(NSString* text) {
//handle this
}];
-ignore:nil
to skip initial nil value.[[RACObserve(_authenticationView.passwordInput.textField, text) ignore:nil] subscribeNext:^(NSString* text) {
//handle this
}];
-distinctUntilChanged
to skip new values, that equal previous.[[RACObserve(_authenticationView.passwordInput.textField, text) distinctUntilChanged] subscribeNext:^(NSString* text) {
//handle this
}];
Upvotes: 1
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