重新启动非void函数

时间:2013-09-15 19:21:26

标签: iphone ios objective-c

我有以下代码:

- (NSString*)returnIncorrectDef {
NSInteger defIndex = [self randomIndex];

NSString *incorrectDef = [NSString stringWithFormat:@"%@", [definitions objectAtIndex:defIndex]];

if (([incorrectDef isEqualToString:self.definitionString]) || ([incorrectDef isEqualToString:def1.titleLabel.text])) {
    // I want to restart the method here
    [self returnIncorrectDef];
} else {
    return incorrectDef;
}}

我希望能够重新启动此方法,直到不满足if子句。但是,当我尝试此代码时,我收到一条错误消息:“控制可能会达到非空函数的结束”。我该怎么做?

3 个答案:

答案 0 :(得分:2)

使用带有标志的while循环:

- (NSString*)returnIncorrectDef {
    BOOL done = NO;
    NSString *incorrectDef = nil;
    while (!done) {
        NSInteger defIndex = [self randomIndex];
        incorrectDef = [definitions objectAtIndex:defIndex];
        done = !([incorrectDef isEqualToString:self.definitionString] ||
                 [incorrectDef isEqualToString:def1.titleLabel.text]);
    }
    return incorrectDef;
}

您也可以使用do ... while声明。

请注意,[NSString stringWithFormat:@"%@",...]是一个无意义的陈述,并且已经简化。(请参阅@ medvedNick的评论 - 如果该类不是NSString类,则没有意义)。

重要:如果没有while循环,您正在使用递归,如果您一直“遗漏”目标,这可能会导致程序崩溃(这当然是可能的)。

答案 1 :(得分:2)

trojanfoe的解决方案更好,但您遇到的问题是您永远不会返回重新输入时获得的值。那条线到了

return [self returnIncorrectDef];

应解决问题

答案 2 :(得分:0)

而不是[self returnIncorrectDef];只需: return [self returnIncorrectDef];

通过递归调用函数返回值。确保评估参数发生变化,以防止无限循环

编辑,但在这种特殊情况下可能不是您想要的(一遍又一遍地调用方法)