RxSwift exit from observable chain if text is empty
up vote
0
down vote
favorite
I'm having trouble understanding the way to early exit from an observable sequence if I don't have the necessary info. Here's a simplified example...
@IBOutlet weak var myTextField: UITextField!
...
myButton.rx.tap. // stop here if textField is nil or empty
.flatMap { API.fetchMyList() }
.subscribe...
swift rx-swift
add a comment |
up vote
0
down vote
favorite
I'm having trouble understanding the way to early exit from an observable sequence if I don't have the necessary info. Here's a simplified example...
@IBOutlet weak var myTextField: UITextField!
...
myButton.rx.tap. // stop here if textField is nil or empty
.flatMap { API.fetchMyList() }
.subscribe...
swift rx-swift
Can you instead keep the button disabled unless there's at least one (presumably non-whitespace) character in the text field?
– NRitH
Nov 20 at 3:36
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I'm having trouble understanding the way to early exit from an observable sequence if I don't have the necessary info. Here's a simplified example...
@IBOutlet weak var myTextField: UITextField!
...
myButton.rx.tap. // stop here if textField is nil or empty
.flatMap { API.fetchMyList() }
.subscribe...
swift rx-swift
I'm having trouble understanding the way to early exit from an observable sequence if I don't have the necessary info. Here's a simplified example...
@IBOutlet weak var myTextField: UITextField!
...
myButton.rx.tap. // stop here if textField is nil or empty
.flatMap { API.fetchMyList() }
.subscribe...
swift rx-swift
swift rx-swift
edited Nov 20 at 3:22
asked Nov 20 at 3:06
natecraft1
1,09242543
1,09242543
Can you instead keep the button disabled unless there's at least one (presumably non-whitespace) character in the text field?
– NRitH
Nov 20 at 3:36
add a comment |
Can you instead keep the button disabled unless there's at least one (presumably non-whitespace) character in the text field?
– NRitH
Nov 20 at 3:36
Can you instead keep the button disabled unless there's at least one (presumably non-whitespace) character in the text field?
– NRitH
Nov 20 at 3:36
Can you instead keep the button disabled unless there's at least one (presumably non-whitespace) character in the text field?
– NRitH
Nov 20 at 3:36
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
You’ll want to transform your observable chain to include the content of the text field, and then filter out the values you are not interested in. The operator withLatestFrom
will pull values from another observable into the current chain.
@IBOutlet weak var myTextField: UITextField!
myButton.rx.tap
.withLatestFrom(myTextField.rx.text)
.filter { $0 != nil && $0?.isEmpty == false }
.flatMapLatest { // here $0 is the value of the text field
API.fetchMyList($0)
}
.subscribe...
As a side note, you’ll probably want to use flatMapLatest in lieu of flatMap, so that old requests get canceled if another tap of button occurs.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53385630%2frxswift-exit-from-observable-chain-if-text-is-empty%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
You’ll want to transform your observable chain to include the content of the text field, and then filter out the values you are not interested in. The operator withLatestFrom
will pull values from another observable into the current chain.
@IBOutlet weak var myTextField: UITextField!
myButton.rx.tap
.withLatestFrom(myTextField.rx.text)
.filter { $0 != nil && $0?.isEmpty == false }
.flatMapLatest { // here $0 is the value of the text field
API.fetchMyList($0)
}
.subscribe...
As a side note, you’ll probably want to use flatMapLatest in lieu of flatMap, so that old requests get canceled if another tap of button occurs.
add a comment |
up vote
1
down vote
accepted
You’ll want to transform your observable chain to include the content of the text field, and then filter out the values you are not interested in. The operator withLatestFrom
will pull values from another observable into the current chain.
@IBOutlet weak var myTextField: UITextField!
myButton.rx.tap
.withLatestFrom(myTextField.rx.text)
.filter { $0 != nil && $0?.isEmpty == false }
.flatMapLatest { // here $0 is the value of the text field
API.fetchMyList($0)
}
.subscribe...
As a side note, you’ll probably want to use flatMapLatest in lieu of flatMap, so that old requests get canceled if another tap of button occurs.
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
You’ll want to transform your observable chain to include the content of the text field, and then filter out the values you are not interested in. The operator withLatestFrom
will pull values from another observable into the current chain.
@IBOutlet weak var myTextField: UITextField!
myButton.rx.tap
.withLatestFrom(myTextField.rx.text)
.filter { $0 != nil && $0?.isEmpty == false }
.flatMapLatest { // here $0 is the value of the text field
API.fetchMyList($0)
}
.subscribe...
As a side note, you’ll probably want to use flatMapLatest in lieu of flatMap, so that old requests get canceled if another tap of button occurs.
You’ll want to transform your observable chain to include the content of the text field, and then filter out the values you are not interested in. The operator withLatestFrom
will pull values from another observable into the current chain.
@IBOutlet weak var myTextField: UITextField!
myButton.rx.tap
.withLatestFrom(myTextField.rx.text)
.filter { $0 != nil && $0?.isEmpty == false }
.flatMapLatest { // here $0 is the value of the text field
API.fetchMyList($0)
}
.subscribe...
As a side note, you’ll probably want to use flatMapLatest in lieu of flatMap, so that old requests get canceled if another tap of button occurs.
edited Nov 20 at 20:25
natecraft1
1,09242543
1,09242543
answered Nov 20 at 8:32
tomahh
9,48522858
9,48522858
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53385630%2frxswift-exit-from-observable-chain-if-text-is-empty%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Can you instead keep the button disabled unless there's at least one (presumably non-whitespace) character in the text field?
– NRitH
Nov 20 at 3:36