2014-12-06 36 views
-4

我只注意到在Xcode以下異常行爲:變量聲明中的if-else塊無法識別的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上。謝謝。

回答

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]; 
+2

另外,我看到了一些關於這個問題的提示。我不同意。我認爲,如果問題形成不好,離題,或缺乏足夠的努力,那麼降低成績就會有意義。這個問題可能反映了一個重要的誤解(並且OP認爲它是一個XCode驗證問題,而不是一個真正的代碼問題),但是有示例代碼,問題本身很明顯...... – RobP 2014-12-06 08:13:37

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範圍。

1

因爲變量NSString *reuseIdentifier範圍只是條件內。您需要在條件之外聲明相同的內容。所以你可以使你的代碼簡短而精確,如下所示: -

NSString *reuseIdentifier = (post.count > 2) ? @"anIdentifier" : @"anotherIdentifier"; 
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:reuseIdentifier];