Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 等待在ReactiveCocoa中通知订户,直到代码完成?_Ios_Objective C_Key Value Observing_Reactive Programming_Reactive Cocoa - Fatal编程技术网

Ios 等待在ReactiveCocoa中通知订户,直到代码完成?

Ios 等待在ReactiveCocoa中通知订户,直到代码完成?,ios,objective-c,key-value-observing,reactive-programming,reactive-cocoa,Ios,Objective C,Key Value Observing,Reactive Programming,Reactive Cocoa,使用ReactiveCocoa和KVO,如果您订阅了某个内容,当您更改绑定到的值时,它会立即通知订阅者。假设我的状态取决于user.firstName和user.lastName: RAC(self.fullName) = [RACSignal combineLatest:@[RACAble(self.firstName), RACAble(self.lastName)] reduce:^(NSString* firstName, NSString* lastName) {

使用ReactiveCocoa和KVO,如果您订阅了某个内容,当您更改绑定到的值时,它会立即通知订阅者。假设我的状态取决于user.firstName和user.lastName:

RAC(self.fullName) = [RACSignal 
    combineLatest:@[RACAble(self.firstName), RACAble(self.lastName)]
    reduce:^(NSString* firstName, NSString* lastName) {
        return [NSString stringWithFormat:@"%@ %@", firstName, lastName];
    }];

self.firstName = @"Bob";
self.lastName  = @"Wilson";
self.firstName = @"Amy";
self.lastName  = @"Johnson";

// ... 

- (void)setFullName:(NSString*)fullName
{
    NSLog(@"FULL NAME %@", fullName);
    // Bob Wilson
    // Amy Wilson
    // Amy Johnson
}
只要设置了这两个变量,每次我更改
firstName
lastName
时,它都会调用setFullName

我希望它等到更改“解决”后再调用全名,因此,如果我在同一个函数中这样设置值,它将使用最终值调用一次
setFullName


我该怎么做?

您可以使用
zip:
而不是
combinelatetest:
。等待所有输入信号发送一个值。这样,只有在发生
firstName
lastName
设置时,才会通知订户

如果这是不可接受的,并且可能只有
firstName
lastName
会更改,则可以将
节流阀:
置于
组合测试:
的输出。这样,如果在限制时间内发生了几次更改,则只将最后一个值发送给订阅服务器


旁注:如果可以基于当前值构造
fullName
,那么为什么要将其存储在属性中?你可以用它作为一个信号。

这个例子只是为了说明问题,通常我想根据几个属性更新一些视图状态。我想最大的问题可能是我不知道在哪里可以找到这样的东西?我正在查看ReactiveCocoa github页面,但在任何地方都找不到
throttle:
文档。它在哪里?如果有疑问,请使用查找功能<代码>油门:属于RACSignal+操作类别。文档位于头文件中。关于文档:是的,一开始是有点难以想象的,通常只有在你花了相当多的时间之后才变得有意义。当您在源代码或wiki中找不到您要搜索的内容时,可以这样做,提出问题或将问题提交给project repo。这些家伙在你问的任何时候都会给你提供极好的信息。真是太棒了,太棒了,谢谢。我想我被甩了,因为太多的功能都在分类中。我通常在读取文档的头文件时没有问题,但在RACSignal中单击命令并没有显示所有选项。