Необработанные строки, такие как Python в Objective-C - PullRequest
4 голосов
/ 28 января 2010

Имеет ли Objective-C необработанные строки, такие как ?

в Python * Разъяснение: необработанная строка не интерпретирует escape-последовательности, такие как \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

Ответы [ 5 ]

5 голосов
/ 28 января 2010

Objective-C является надмножеством C. Итак, ответ да Вы можете написать

char* string="hello world";

в любом месте. Затем вы можете превратить его в NSString позже

NSString* nsstring=[NSString stringWithUTF8String:string];
4 голосов
/ 28 января 2010

По вашей ссылке, объясняющей, что вы подразумеваете под "необработанной строкой", ответ таков: встроенного метода для того, что вы просите, не существует.

Однако вы можете заменить вхождения одной строки другой строкой, например, вы можете заменить @"\n" на @"\\n". Это должно приблизить вас к тому, что вы ищете.

2 голосов
/ 28 января 2010

Как все говорили, необработанные строки ANSI очень просты. Просто используйте простые строки C или C ++ std :: string, если вам хочется компилировать Objective C ++.

Однако собственный формат строки Какао - UCS-2 - 2-байтовые символы фиксированной ширины. Строки NSS хранятся внутри, как UCS-2, т.е. е. как массивы неподписанных коротких. (Кстати, как в Win32 и в Java.) Общесистемными псевдонимами для этого типа данных являются unichar и UniChar. Здесь все становится сложнее.

GCC включает в себя тип данных wchar_t и позволяет вам определить необработанную строковую константу с широким символом, например:

wchar_t * ws = L "Эта строка с широким символом.";

Однако по умолчанию этот тип данных определен как 4-байтовый тип int и поэтому не совпадает с unichar Cocoa! Вы можете переопределить это, указав следующую опцию компилятора:

-fshort-WCHAR

но тогда вы потеряете функции RTL с широким символом C (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], этот не требует преобразования кодовой страницы.

2 голосов
/ 28 января 2010

Objective-C является строгим надмножеством C, поэтому вы можете использовать char * и char[] где угодно (если это то, что вы называете необработанными строками).

1 голос
/ 28 января 2010

Если вы имеете в виду строки в стиле C, то да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...