Objective c 根据条件设置NSString

Objective c 根据条件设置NSString,objective-c,Objective C,我正在努力寻找用alloc/init创建NSString对象,然后根据条件设置其内容的最佳方法 我试试这个: if (amount==@"current") { NSString * suffix=[[NSString alloc] initWithFormat:@"contents1"]; } else { NSString * suffix=[[NSString alloc] initWithFormat:@

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

我试试这个:

        if (amount==@"current") { 
            NSString * suffix=[[NSString alloc] initWithFormat:@"contents1"];
        } else {
             NSString * suffix=[[NSString alloc] initWithFormat:@"contents2"];
        }
然而,如果我尝试在任何地方使用“后缀”,编译器都不喜欢它;声称它没有申报


但是,由于我需要一个简单的不可变字符串,我无法将它设置在“if”之前,然后在“if”期间分配它,因此我不确定如何实现这一点?

尝试声明
NSString*后缀在执行if/else语句之前:

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

这应该行得通。(另外,您不能对NSStrings使用
==

原始代码失败,因为您正在
if/else
的分支中声明字符串变量。此声明是其花括号的局部声明,不存在于花括号之外。如果将声明移到
If
语句之外,则可以使用
If
的分支分配给此(共享)变量:

BOOL isCurrent = [amount isEqualToString:@"current"];
if (isCurrent) {
    suffix = @"contents1";
} else {
    suffix = @"contents2";
}
条件赋值是使用三元运算符的好地方。
?:
<代码>P?X:Y
类似于
if(P)X;否则,你会感到沮丧。与依赖赋值和其他副作用来影响其环境的
if
语句不同,
?:
是返回所选分支值的表达式。您可以使用
?:
做您想做的事情,例如:

BOOL isCurrent = [amount isEqualToString:@"current"];
NSString *suffix = isCurrent? @"contents1" : @"contents2";

为了避免将来出现问题,我建议从
NSString*后缀=nil开始。为了澄清,
==
将计算指针相等,而不是对象相等。确定。谢谢你。我应该改变我的答案吗?这个变量超出范围了,先生。这会产生一个自动删除的“后缀”吗?假设您想通过alloc/init而不是使用autorelease来管理它的内存?我尝试了这个方法,效果很好:
suffix=[[NSString alloc]initWithFormat:@“contents1”]
在每个“if”和“else”中,然后我有一个
[后缀释放]
稍后;这是否正常?像
@“foo”
这样的字符串不进行引用计数。它们是在应用程序的整个生命周期中持续存在的静态字符串。如果实际使用的不是格式,而是字符串,则可以使用
-initWithString:
获取所属引用,或者使用
-stringWithString:
获取自动删除的引用。