尝试每小时跟随每小时ReactiveCocoa的best practices更新我的UI。这就是我得到的:

NSDateComponents *components = [[[NSCalendar sharedCalendar] calendar] components:NSMinuteCalendarUnit fromDate:[NSDate date]];
// Generalization, I know (not every hour has 60 minutes, but bear with me).
NSInteger minutesToNextHour = 60 - components.minute;

RACSubject *updateEventSignal = [RACSubject subject];
[updateEventSignal subscribeNext:^(NSDate *now) {
    // Update some UI
}];

[[[RACSignal interval:(60 * minutesToNextHour)] take:1] subscribeNext:^(id x) {
    [updateEventSignal sendNext:x];
    [[RACSignal interval:3600] subscribeNext:^(id x) {
        [updateEventSignal sendNext:x];
    }];
}];

这有一些明显的缺陷:手动订阅和发送,只是“感觉错了”。关于如何使其更具“ react 性”的任何想法?

最佳答案

您可以使用完全原始的运算符执行此操作。只是将两个间隔链接在一起,同时仍通过它们的两个值,这就是-concat:所做的事情。

我将主题重写如下:

RACSignal *updateEventSignal = [[[RACSignal
    interval:(60 * minutesToNextHour)]
    take:1]
    concat:[RACSignal interval:3600]];

这可能无法为您提供超超精确的精度(因为两个信号之间可能会出现微小的打ic),但是对于任何UI工作而言,它都应该是Good Enough™。

关于ios - 使用ReactiveCocoa,每小时每小时执行一次操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16523571/

10-11 02:25