- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
给定一个返回对象数组的方法,您如何创建一个仅在使用该方法时填充其结果的序列? - (NSArray *) methodA { ... } - (RACSequence *) methodB { r
也许我完全忽略了这一点,但根据 ReactiveCocoa on their types 上的文档, RAC序列是信号。 但是。我看到你有这样的代码的例子: RACSignal *letters =
我是一名优秀的程序员,十分优秀!