问题:我在方法中使用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;
}
}
答案 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'
}
我希望这可以帮助您了解导致问题的原因。