我正在努力使用alloc / init创建NSString对象的最佳方法,然后根据条件设置其内容。
我试试这个:
if (amount==@"current") {
NSString * suffix=[[NSString alloc] initWithFormat:@"contents1"];
} else {
NSString * suffix=[[NSString alloc] initWithFormat:@"contents2"];
}
但是如果我尝试在任何地方使用“后缀”,编译器就不喜欢它;声称它是未宣布的。
但是,由于我想要一个简单的不可变字符串,我不能在“if”之前设置它,然后在“if”期间分配它,所以我不知道如何处理它?</ p>
答案 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 : Y
与if (P) X; else Y;
类似。与if
不同,?:
是一个依赖于赋值和其他副作用来影响其环境的语句,?:
是一个表达式,它返回所选分支的值。你可以使用BOOL isCurrent = [amount isEqualToString:@"current"];
NSString *suffix = isCurrent? @"contents1" : @"contents2";
做你想做的事情:
{{1}}