Подтвердить что ты не робот

Unichar и NSString - насколько они взаимозаменяемы?

Существует метод NSString -characterAtIndex:, который возвращает unichar.

  • (unichar) characterAtIndex: (NSUInteger) Индекс

Интересно, может ли этот unichar, который явно не является NSString, преобразован в NSString или отправлен в NSString для сравнения целей?

И: Является ли NSString внутренне состоящим только из массива элементов unichar?

4b9b3361

Ответ 1

У вас есть два варианта: первая - это категория, добавляющая метод stringWithUnichar к NSString:

@interface NSString (MNNSStringWithUnichar)
+ (NSString *) stringWithUnichar: (unichar) value;
@end


@implementation NSString (MNNSStringWithUnichar)

+ (NSString *) stringWithUnichar:(unichar) value {
     NSString *str = [NSString stringWithFormat: @"%C", value];
     return str;
}

@end

Затем назовите его

NSString *otherString = @"TestString";

NSString *str = [NSString stringWithUnichar:[otherString characterAtIndex:1]];

или вы можете просто так:

NSString *str = [NSString stringWithFormat:@"%C",[otherString characterAtIndex:1]];

Выберите категорию, если вы хотите использовать ее повторно, или если вам нужно сделать это один раз, используйте пример stringWithFormat!!

Не уверен о внутренних компонентах NSString, но я предполагаю, что это, вероятно, завершение

unichar *

или массив unichars (например, C char *)

Уничар - это просто 16-битное значение, которое используется для хранения символа. В отличие от unsigned char, который имеет всего 8 бит, он может содержать более 0-255, поэтому он может содержать символы юникода, а также 16 бит. NSString является классом (кластером) класса [es], который содержит массив unichars

ИЗМЕНИТЬ

Вот несколько статей о том, что люди считают NSString:

http://cocoawithlove.com/2008/08/string-philosophies-char-arrays.html

http://www.reddit.com/r/programming/comments/6v1yw/string_philosophies_char_arrays_stdstring_and/

Надеюсь, что это поможет!

Ответ 2

Другой вариант - использовать метод класса:

+ (id)stringWithCharacters:(const unichar *)characters length:(NSUInteger)length;

Итак, просто используя:

yourString = [NSString stringWithCharacters: &yourChar length: 1];

Параметр yourChar должен быть указателем.

Ответ 3

NSString - действительно кластер классов. Это означает, что по разным причинам, включая производительность, основанную на содержании и размере, и на поддержку бесплатного подключения к CFString при создании NSString, вы можете получить один из многих частных классов, которые возвращают YES в isKindOf: когда вы спрашиваете, является ли это NSString и он будет отвечать на все методы класса NSString. Это похоже на протокол, но все объекты будут говорить и делать и быть NSString в публичном API.

Как указано в документации для NSString и CFString, это концептуально массив унитарных UTF16 Он может и будет использовать другое внутреннее представление, где он представляет преимущество реализации. Обычно производительность иногда зависит от размера памяти. Но вы можете положиться на это, давая вам массив C unichar по запросу или что-то еще API promises.

У него было много времени для того, чтобы созреть, и он исправлен внутренне почти в каждом выпуске.

Короче говоря, вы можете думать об этом как о поддержке массива унитарных UTF16, в основном соответствующих описанию логической строки в стандарте Unicode. Но нужно иметь в виду, что вам действительно не нужно беспокоиться о том, что внутри, только то, что он говорит вам, находится внутри.

Это одна из лучших реализаций Unicode. Если вы хотите получить более полную картину того, как это работает, вы можете посмотреть (большинство) источника CFString на opensource.apple.com Это C и Core Foundation (объектно-ориентированный C) и довольно стилизованный, поэтому не ожидайте, что все сразу это поймут.

NSString и CFString имеют методы возврата и создания из unichar. Большинство людей не должны нуждаться в этом большую часть времени. Если да, будьте осторожны, будьте готовы много читать и совершать наивные ошибки. Unicode - большая тема. Правильно его обрабатывать - это наука и искусство на этом уровне. Это одна из причин NSString. Он обрабатывает много жестких вещей, поэтому вам не нужно так часто, если вы этого не хотите или не хотите.