我想在if else块之外引用if块中定义的变量。我怎么能够?如果它不能,我是否必须在block和else块中写入相同的长代码(它们不能是函数或方法)?
if (aTrack.compilation)
{
NSString *artistName = NSLocalizedString(@"compilations", @"");
}
else
{
NSString *artistName = aTrack.artist
}
NSLog(@"%@",artistName);
答案 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
评论的空字符串。