gpt4 book ai didi

ios - ReactiveCocoa - 停止命令

转载 作者:行者123 更新时间:2023-11-29 01:35:17 25 4
gpt4 key购买 nike

我有一个搜索文本字段,当用户开始输入时,它会向用户提供自动完成建议的列表。用户也可以点击建议或按键盘的搜索按钮以使用输入文本执行搜索。

如果用户开始输入内容,然后在等待建议出现之前按下搜索,则可能会出现以下情况:建议表将在搜索完成后打开。由于建议结果是通过 RACCommand 触发的,因此我需要一种方法来在搜索开始时停止此类命令。

以下是搜索建议的方式:

@weakify(self);
[[[self.searchTextField.rac_textSignal.distinctUntilChanged ignore:@""] throttle:0.5] subscribeNext:^(id x) {
@strongify(self);
[self.suggestionsViewModel.rac_searchSuggestions execute:self.searchTextField.text];
}];

[self.suggestionsViewModel.rac_searchSuggestions.executionSignals.flatten
subscribeNext:^(id x) {
@strongify(self);
[self.suggestionsTableView reloadData];
[self viewDidLayoutSubviews]; // Update the suggestions table frame
}];

通过文本字段进行搜索是通过以下方式触发的:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[self.productsViewModel.rac_reloadCommand execute:textField.text];
[textField resignFirstResponder];
return YES;
}

如何停止建议查找并禁止重新加载其表?

基于Cancel RACCommand execution看来解决方案是使用 takeUntil 运算符。这是 rac_searchSuggestions,它应该是“搜索建议直到产品搜索开始”的翻译:

self.rac_searchSuggestions = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
@strongify(self);
return [[self rac_getProductsSuggestionsWithParameters:@{@"query":input}]
takeUntil:self.productsViewModel.rac_reloadCommand.executionSignal]];
}];

不幸的是,takeUntil 运算符没有效果。

非常感谢,丹

最佳答案

我认为问题是由throttle引起的。它延迟了 searchTextFieldnext

  • 如果在您点击搜索按钮之前下一个到达,则一切正常。
  • 如果它晚于到达,rac_getProductsSuggestionsWithParameters 无论如何都会执行。

所以需要检查后一种情况。例如:

if (self.searchTextField.isFirstResponder) {
[self.suggestionsViewModel.rac_searchSuggestions execute:self.searchTextField.text];
}

关于ios - ReactiveCocoa - 停止命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33033100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com