NSString在创建时连接

时间:2014-02-07 13:00:11

标签: ios objective-c nsstring

我正在尝试连接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让我有些编译问题我尚未解决

5 个答案:

答案 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";

谢谢大家。

现在的问题是 我必须接受正确答案吗?我的意思是,我的解决方案,但没有你的帮助,我永远不会到那里