我正在尝试连接2个字符串,将结果分配给新字符串。
通常我会这样做:
NSString * s = [NSString stringWithFormat: @"%@%@", str1, str2];
现在我希望是静止的
static NSString * s = [NSString stringWithFormat: @"%@%@", str1, str2];
但是编译器给我带来了“初始化元素不是编译时......”
有没有办法做到这一点?我用谷歌搜索了一下没有结果,我也没有在StackOverflow上找到答案。
那么使用像(在PHP中)的简短形式
$s = $str1.$str2;
任何帮助将不胜感激。
编辑:我想要实现的是拥有这样的配置文件(在PHP代码中)
define ("BASE_URL", "mysite.com/");
define ("SERVICE_URL1", BASE_URL."myservice1.php?param1=value1");
define ("SERVICE_URL2", BASE_URL."myservice2.php?param2=value2");
我更喜欢在1个文件中包含所有配置字符串,并且我在目标c中找到了有用的静态字符串。只想把2个有用的东西放在一起:))
EDIT2:如果我用定义获得这个没有metter,但NSString方式是首选的,我使用静态只是因为const让我有些编译问题我尚未解决
答案 0 :(得分:3)
使用此代码创建静态s
:
static NSString * s = nil;
if (!s)
s = [NSString stringWithFormat: @"%@%@", str1, str2];
同样,对于连接两个字符串,你需要使用这样的代码:NSString *s = [str1 stringByAppendingString: str2];
<强>更新:强> 您可以通过逐个放置来连接静态字符串。 例如:
#define STR1 @"First part" @" Second part"
#define STR2 @"Third part " STR1
NSLog(@"%@", STR2);
此cole将打印Third part First part Second part
答案 1 :(得分:1)
我认为以下几行可能有所帮助:
NSString *str1 = @"String1";
NSString *str2 = @"String2";
NSString *combinedStr = [str1 stringByAppendingString:str2];
答案 2 :(得分:1)
如果你可以使用define,那很简单:
#define A @"a"
#define B @"b"
…
static NSString *ab = A B; // or: @"A" @"B"
您始终可以使用单个空格连接字符串文字。
但是使用定义时必须发生一些非常重要的事情。将它计算为非静态或计算一次有什么问题?
顺便说一句:你应该使用dispatch_once()
而不 if
。出于这个原因,你可以在SO上搜索“dispatch_once”。
答案 3 :(得分:0)
如果你不介意编译Objective-C ++代码,你可以简单地将扩展名从.m更改为.mm,默认情况下XCode根据文件类型编译,这在Objective-C ++中有效
答案 4 :(得分:0)
解决这个问题:
#define kBaseURL @"mysite.com/"
static NSString *kServiceUrl1 = kBaseURL @"myservice1.php?param1=value1";
static NSString *kServiceUrl2 = kBaseURL @"myservice2.php?param2=value2";
谢谢大家。
现在的问题是 我必须接受正确答案吗?我的意思是,我的解决方案,但没有你的帮助,我永远不会到那里