根据条件设置NSString

时间:2011-06-14 17:17:51

标签: objective-c

我正在努力使用alloc / init创建NSString对象的最佳方法,然后根据条件设置其内容。

我试试这个:

        if (amount==@"current") { 
            NSString * suffix=[[NSString alloc] initWithFormat:@"contents1"];
        } else {
             NSString * suffix=[[NSString alloc] initWithFormat:@"contents2"];
        }

但是如果我尝试在任何地方使用“后缀”,编译器就不喜欢它;声称它是未宣布的。

但是,由于我想要一个简单的不可变字符串,我不能在“if”之前设置它,然后在“if”期间分配它,所以我不知道如何处理它?<​​/ p>

2 个答案:

答案 0 :(得分:3)

在执行if / else语句之前尝试声明NSString *suffix;

NSString *suffix;
if ([amount isEqualToString:@"current"]) {
suffix = @"contents1";
} else {
suffix = @"contents2";
}

那应该有用。 (另外,您不能将==用于NSStrings)。

答案 1 :(得分:3)

您的原始代码失败,因为您在if/else的分支内声明了字符串变量。这个声明是大括号的本地声明,并不存在于它们之外。如果将声明移到if语句之外,则可以使用if的分支分配给此(共享)变量:

BOOL isCurrent = [amount isEqualToString:@"current"];
if (isCurrent) {
    suffix = @"contents1";
} else {
    suffix = @"contents2";
}

条件赋值是使用三元运算符?:的好地方。 P? X : Yif (P) X; else Y;类似。与if不同,?:是一个依赖于赋值和其他副作用来影响其环境的语句,?:是一个表达式,它返回所选分支的值。你可以使用BOOL isCurrent = [amount isEqualToString:@"current"]; NSString *suffix = isCurrent? @"contents1" : @"contents2"; 做你想做的事情:

{{1}}