Objective-C有raw strings like Python's吗?
澄清:原始字符串不解释\n
之类的转义序列:斜杠和“n”都是字符串中的单独字符。从链接的Python教程:
>>> print 'C:\some\name' # here \n means newline!
C:\some
ame
>>> print r'C:\some\name' # note the r before the quote
C:\some\name
答案 0 :(得分:5)
Objective-C是C的超集。所以答案是肯定的。你可以写
char* string="hello world";
的任何地方。然后,您可以稍后通过
将其转换为NSString
NSString* nsstring=[NSString stringWithUTF8String:string];
答案 1 :(得分:4)
通过链接解释“原始字符串”的含义,答案是:没有内置的方法可以满足您的要求。
但是,您可以将一个字符串的出现替换为另一个字符串,因此您可以将@"\n"
替换为@"\\n"
。这应该让你接近你正在寻找的东西。
答案 2 :(得分:3)
您可以使用 stringize 宏。
#define MAKE_STRING(x) @#x
NSString *expendedString = MAKE_STRING(
hello world
"even quotes will be escaped"
);
预处理结果为
NSString *expendedString = @"hello world \"even quotes will be escaped\"";
如您所见,双引号被转义,但新行被忽略。 这个特性非常适合在Objective-C文件中粘贴一些JS代码。如果您使用的是 C99,则使用此功能是安全的。
来源:
答案 3 :(得分:2)
Objective-C是C的严格超集,因此您可以随意使用char *
和char[]
(如果这就是您所谓的原始字符串)。
答案 4 :(得分:2)
就像大家都说的那样,原始ANSI字符串非常简单。如果你想编译Objective C ++,只需使用简单的C字符串或C ++ std :: string。
但是,Cocoa的本机字符串格式是UCS-2 - 固定宽度的2字节字符。 NSStrings在内部存储为UCS-2,i。即作为unsigned short的数组。 (顺便说一句,就像在Win32和Java中一样。)该数据类型的系统范围别名是unichar和UniChar。这就是事情变得棘手的地方。
GCC包含一个wchar_t数据类型,允许您像这样定义一个原始的宽字符串常量:
wchar_t * ws = L“这是一个宽字符串。”;
但是,默认情况下,此数据类型定义为4字节int,因此与Cocoa的unichar不同!您可以通过指定以下编译器选项来覆盖它:
-fshort-WCHAR
但是你失去了宽字符C RTL函数(wcslen(),wcscpy()等) - RTL是在没有该选项的情况下编译的,并假定为4字节的wchar_t。手动重新实现这些功能并不是特别困难。你的电话。
一旦你有一个真正的2字节wchar_t原始字符串,你可以简单地将它们转换为NSStrings并返回:
wchar_t *ws = L"Hello";
NSString *s = [NSString stringWithCharacters:(const unichar*)ws length:5];
与所有其他[stringWithXXX]方法不同,此方法不涉及任何代码页转换。
答案 5 :(得分:1)
如果你的意思是C风格的字符串,那么是的。