Objective c 根据条件设置NSString
我正在努力寻找用alloc/init创建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:@
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:
获取自动删除的引用。