我有以下代码:
- (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子句。但是,当我尝试这段代码时,我收到一条错误消息:“控件可能会到达非void函数的结尾”。我该怎么做?
最佳答案
使用带有标志的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
循环,您正在使用递归,如果您继续“丢失”目标,这可能会导致程序崩溃(这确实有可能)。