我刚注意到Xcode中的以下奇怪行为:
if (post.count > 2) {
NSString *reuseIdentifier = @"anIdentifier";
}
else {
NSString *reuseIdentifier = @"anotherIdentifier";
}
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:reuseIdentifier]; // error: use of undeclared identifier 'reuseIdentifier'
编译器是否有任何理由无法检测到reuseIdentifier
将始终被声明?这是在Xcode 5.1.1上。谢谢。
答案 0 :(得分:3)
我认为你误解了变量范围。在您要使用它的范围内声明变量非常重要。第一个reuseIdentifier是仅在if {}块中有效的局部变量,第二个是else {}块的局部变量。确保代码正确和可读的方法如下:
NSString *reuseIdentifier; //available in this entire function
if (post.count > 2) {
reuseIdentifier = @"anIdentifier";
}
else {
reuseIdentifier = @"anotherIdentifier";
}
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:reuseIdentifier];
答案 1 :(得分:1)
你需要这样做:
NSString *reuseIdentifier;
if (post.count > 2) {
reuseIdentifier = @"anIdentifier";
}
else {
reuseIdentifier = @"anotherIdentifier";
}
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:reuseIdentifier]; // error: use of undeclared identifier 'reuseIdentifier'
你这样做的问题是每个范围内的reuseIdentifier都是if / else范围的本地。
答案 2 :(得分:1)
因为变量NSString *reuseIdentifier
范围仅在条件内。您需要在条件之外声明相同的内容。因此,您可以使代码简短而精确,如下所示: -
NSString *reuseIdentifier = (post.count > 2) ? @"anIdentifier" : @"anotherIdentifier";
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:reuseIdentifier];