gpt4 book ai didi

objective-c - 观察RACSequence中的每一项

转载 作者:行者123 更新时间:2023-12-03 10:13:32 24 4
gpt4 key购买 nike

我在 ParentViewModel 上有一个方法,它返回 ViewModel 对象的 RACSequence,如下所示:

- (RACSequence *) viewModels
{
return [self.models.rac_sequence map:^id(Model *model) {
return [[ViewModel alloc] initWithModel: model];
}];
}

每个 ViewModel 都有一个状态属性,该属性是一个枚举,并且有 3 个状态:NotStarted、InProgress 和 Completed。当我的序列中的所有 ViewModel 的状态均为 Completed 时,我知道 ParentViewModel 是有效的。我在 ParentViewModel 上有一个 validSignal,我想从 viewModels 序列中得出有效的事实。目前我有这个代码:

BOOL valid = [[self viewModels] all:^BOOL(ViewModel *vm) {
return vm.state == Completed;
}];

这给了我一个指示,如果序列中的所有 ViewModel 都有效。然后,我如何将其转换为 RACSignal,每次其中一个 ViewModel 上的状态属性发生更改时都会更新它?

最佳答案

您首先需要将state转换为RACSignal,然后从那时起一切就很容易了。

最终的代码如下所示:

RACSignal *valid = [[RACSignal combineLatest:
[[self viewModels] map:^id(ViewModel *viewModel) {
return RACAbleWithStart(viewModel, state);
}]
]
map:^(RACTuple *states) {
return @([states.rac_sequence all:^BOOL(NSNumber *state) {
return state.unsignedIntegerValue == Completed;
}]);
}
];

第一个 block 将每个 View 模型映射到一个观察 state 属性的信号(起始值作为信号的第一个值)。

combineLatest: 将获取 RACSignals 的集合,并创建一个新信号,每次底层信号发生变化时都会触发该信号,并发送 RACTuple code> 与每个信号的值。

然后将 RACTuple 转换为 RACSequence,我们可以生成 @YES@NO 值code> 取决于所有值是否Completed

我认为结果就是您正在寻找的信号。

(免责声明:我是 ReactiveCocoa 的新手,所以可能有更简单的方法)。

关于objective-c - 观察RACSequence中的每一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17125748/

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