返回值if if语句花括号并且未检测到它

时间:2013-12-02 18:38:58

标签: objective-c

问题:我在方法中使用if语句,并且此方法的返回位于if语句的括号内

我需要什么:我需要在我的方法中使用条件,所以我会在每种情况下执行不同的操作。有没有办法从花括号内部或任何其他可以使用的条件方法返回,并帮助我实现目标。

面对问题的代码如下所示。

任何帮助或提示将不胜感激。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    megasearchCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        cell = [[megasearchCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    if ([searchtype isEqualToString:@"a"])
    {
        //do stuff 

        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        return cell;
    }
    else
    {
        // do stuff

        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        return cell;
    } 
}

3 个答案:

答案 0 :(得分:1)

您当前的代码没有问题:除了可读性稍差之外,从代码中的多个分支返回没有任何问题,只要所有分支都返回一些内容(在您的情况下,它们会返回)。

通过将return提升一级,您可以稍微清理一下代码:

if ([searchtype isEqualToString:@"a"]) {
    //do stuff 
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
} else {
    // do stuff
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
}
return cell;

然而,它的逻辑将保持不变。

答案 1 :(得分:0)

  if ([searchtype isEqualToString:@"a"])
{
   //do stuff 
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
}
else
{
    // do stuff
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
} 
 return cell;

这样做是因为你已经使用了if和else所以它会在if或者其他时间进入,所以它会正确返回单元格。

如果你想在if或者else的范围内返回单元格,那么你可以简单地做它的但是返回单元格也在范围之外beacuse如果条件是真的那么它显然从顶部返回否则它将返回单元格

答案 2 :(得分:0)

正如其他人所指出的那样,在return块中进行if完全没问题(只要确保在任何情况下都return - 编译器会给你一个警告,如果你不是,如果你运行它可能会导致崩溃)。

你在对NikolaiRuhe的改述中提到的是正确的。如果将变量声明为// do stuff的一部分,则该变量将仅存在于声明的大括号内。所以...

if ([searchtype isEqualToString:@"a"])
{
    NSString *myString = @"Stuff";
    NSLog (@"%@", myString);  // This will work, 'myString' is declared inside the brackets of where it is referenced, so you're fine.
}
else
{
    NSLog (@"%@", myString); // This will **not** work, and throws an error, because there is nothing called 'myString' that is visible inside this bracket
}

但是,您可以提前声明事物,并且它们将始终在下游可见

NSString *myString;
if ([searchtype isEqualToString:@"a"])
{
    myString = @"Stuff";
    NSLog (@"'%@'", myString);  // outputs 'Stuff'
}
else
{
    NSLog (@"%@", myString); // Does not throw an error anymore, because 'myString' was declared above the bracket.  
    // But, since nothing is ever assigned to 'myString' in this block, the NSLog will just write out 'nil'
}

我希望这可以帮助您了解导致问题的原因。