一旦循环完成,我需要获得最终的 activeTime 值。
下面的代码运行一个循环,循环多次调用一个 block (运行一个异步进程)。如果在此期间发生超过 10 步,则每个循环都会增加 activeTime。
最终我想调用这段代码并让它返回 activeTime 的最终值。
我正在考虑 completionhandler
但不确定。
有人可以建议我如何实现这一目标吗?
__block NSInteger activeTime = 0;
for (NSDate *date = [self startDateOfToday];
[date compare:[NSDate date]] == NSOrderedAscending;
date = [date dateByAddingTimeInterval:10])
{
NSDate *rangeStart = date;
NSDate *rangeEnd = [date dateByAddingTimeInterval:10];
[stepCounter queryStepCountStartingFrom:rangeStart
to:rangeEnd
toQueue:[NSOperationQueue mainQueue]
withHandler:^(NSInteger numberOfSteps, NSError *error) {
if (numberOfSteps > 10) {
activeTime=activeTime+10;
}
NSLog(@"Steps = %ld; Time = %ld",(long)numberOfSteps, (long)activeTime);
}];
}
最佳答案
你可以使用回调
- (void) myfunction {
__block NSInteger activeTime = 0;
for (NSDate *date = [self startDateOfToday];
[date compare:[NSDate date]] == NSOrderedAscending;
date = [date dateByAddingTimeInterval:10])
{
NSDate *rangeStart = date;
NSDate *rangeEnd = [date dateByAddingTimeInterval:10];
[stepCounter queryStepCountStartingFrom:rangeStart
to:rangeEnd
toQueue:[NSOperationQueue mainQueue]
withHandler:^(NSInteger numberOfSteps, NSError *error) {
if (numberOfSteps > 10) {
activeTime=activeTime+10;
}
if(rangeEnd == numberOfSteps)
{
[self callback:activeTime];
}
NSLog(@"Steps = %ld; Time = %ld",(long)numberOfSteps, (long)activeTime);
}];
}
}
- (void)callback:(NSInteger)activeTime {
NSLog(@"Active Time = %d", activeTime);
}
关于ios - 需要通过嵌套异步调用获得 "For Loop"的结果( Objective-C ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053421/