控制到达无效功能的结束

时间:2016-08-26 16:00:55

标签: objective-c

请考虑以下代码:

-(NSString*)getNextOvulationString{

    if (self.daysToNextOvulation < 0){
       return [NSString stringWithFormat:@"Овуляция была %li дней назад", labs(self.daysToNextOvulation)];
    }   else if (self.daysToNextOvulation == 0){
        return [NSString stringWithFormat:@"Овуляция началась"];
    }   else if (self.daysToNextOvulation   > 0){
        return [NSString stringWithFormat:@"Овуляция началась"];
    }
 }

有3个案例,很明显,我们会得到一个保证。

仍然,编译器不允许我构建,因为错误:

  

控制无效功能的到达结束

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您需要最后添加else才能返回NSString,因此请更改if这样的条件。

-(NSString*)getNextOvulationString{

    if (self.daysToNextOvulation < 0){
        return [NSString stringWithFormat:@"Овуляция была %li дней назад", labs(self.daysToNextOvulation)];
    }
    else if (self.daysToNextOvulation == 0){
        return [NSString stringWithFormat:@"Овуляция началась"];
    }
    else  //No need to compare here
        return [NSString stringWithFormat:@"Овуляция началась"];
    }
}

答案 1 :(得分:2)

由于最终条件是详尽的情况,将最终else if更改为else并将其称为一天。如果您愿意,请将您的条件添加为相同 - 评论以保持清晰。

最终结果如下:

- (NSString *)getNextOvulationString
{
    if (self.daysToNextOvulation < 0)
    {
        return [NSString stringWithFormat:@"Овуляция была %li дней назад", labs(self.daysToNextOvulation)];
    }   
    else if (self.daysToNextOvulation == 0)
    {
        return [NSString stringWithFormat:@"Овуляция началась"];
    }   
    else // self.daysToNextOvulation > 0
    {
        return [NSString stringWithFormat:@"Овуляция началась"];
    }
 }

您也可以完全删除最终else

- (NSString *)getNextOvulationString
{
    if (self.daysToNextOvulation < 0)
    {
        return [NSString stringWithFormat:@"Овуляция была %li дней назад", labs(self.daysToNextOvulation)];
    }   
    else if (self.daysToNextOvulation == 0)
    {
        return [NSString stringWithFormat:@"Овуляция началась"];
    }   

    // self.daysToNextOvulation > 0
    return [NSString stringWithFormat:@"Овуляция началась"];
 }

既然最后两个条件return同样的话,你甚至可以这样写:

- (NSString *)getNextOvulationString
{
    if (self.daysToNextOvulation < 0)
    {
        return [NSString stringWithFormat:@"Овуляция была %li дней назад", labs(self.daysToNextOvulation)];
    }
    else // self.daysToNextOvulation >= 0
    {
        return [NSString stringWithFormat:@"Овуляция началась"];
    }
 }

或者这样,再次完全放弃else

- (NSString *)getNextOvulationString
{
    if (self.daysToNextOvulation < 0)
    {
        return [NSString stringWithFormat:@"Овуляция была %li дней назад", labs(self.daysToNextOvulation)];
    }

    // self.daysToNextOvulation >= 0
    return [NSString stringWithFormat:@"Овуляция началась"];
 }

注意:鉴于当前条件和返回值,以上所有代码在功能上都是等效的。