Objective-c引用块外的变量

时间:2014-01-25 09:20:08

标签: objective-c

我想在if else块之外引用if块中定义的变量。我怎么能够?如果它不能,我是否必须在block和else块中写入相同的长代码(它们不能是函数或方法)?

if (aTrack.compilation)
{
    NSString *artistName = NSLocalizedString(@"compilations", @"");
}
else
{
    NSString *artistName = aTrack.artist
}

NSLog(@"%@",artistName);

3 个答案:

答案 0 :(得分:1)

块中声明的普通(非静态)变量的生命周期就是该块,任何嵌套块等。这是(Objective-)C(++)的标准生命周期和可见性规则的一部分。 / p>

只需在 if / else之前声明变量,并在每个块中为其指定值。

答案 1 :(得分:1)

@nickfalk和@CRD发布的内容很好,但你也可以(对于这些简单的陈述)使用三元运算符,在这种情况下看起来像这样:

NSString *artistName = aTrack.compilation ? NSLocalizedString(@"compilations", @""): aTrack.artist;

NSLog(@"%@",artistName);

这是一个风格问题,但我会这样做这个简单的例子,因为我的代码在一行

答案 2 :(得分:0)

这将做你想要的:

NSString *artistName;

if (aTrack.compilation){
    artistName = NSLocalizedString(@"compilations", @"");
} else {
    artistName = aTrack.artist;
}

NSLog(@"%@",artistName);

还要看看CRD的回复,因为这是非常基本的知识,你真的需要理解这一点。 (另外,在我的例子中注意到viperking,原始代码中缺少一个终止分号...)

Viperking使用三元运算符有一个很好的例子。起初它可能有点陌生,但是当你绕过它时它相当不错。第三种解决方案是

NSString *artistName = aTrack.artist;

if (aTrack.compilation){
    artistName = NSLocalizedString(@"compilations", @"");
} 

NSLog(@"%@",artistName);

对于更复杂的场景,我会反对它,但对于一个有两个可能情况和一个单一字符串的例子,它将非常清晰。我还建议使用nil而不是localizedString评论的空字符串。