2014-10-12 1 views
0

Я сейчас нахожусь в учебнике по разработке iOS от Apple в данный момент и читаю главу о фреймворке и объектах ценности.Когда вы используете литерал NSNumber для создания инкапсулированных значений символов?

Только на классе NSNumber, он говорит:

Вы можете даже использовать NSNumber литералы для создания инкапсулированного Boolean и символьных значений.

NSNumber * myBoolValue = @YES; NSNumber * myCharValue = @ 'V';

Мне просто интересно, когда или почему или в каком сценарии вы можете использовать NSNumber для символьного значения, а не использовать NSString, скажем?

+0

Почему нет? Просто потому, что это возможно, это не значит, что вы должны использовать его, но могут быть некоторые нечетные сценарии, где это полезно. (И '@ YES' определенно полезна для установки логических значений в JSON.) –

+0

Мне интересно узнать, какими могут быть эти нечетные сценарии. Спасибо за вашу точку зрения на JSON. – cheznead

+0

Я не знаю, когда захотите NSNumber с буквальным значением для Unicode 'V', но если кто-то этого захочет, он будет там. Я мог бы придумать ситуацию, когда, например, NSArray использовался для хранения символов строки, но я не знаю, что может потребовать этого. –

ответ

2

NSNumber полезно для инкапсуляции примитивных значений для вставки в коллекции классов Objective-C, такие как NSArray, NSSet, NSDictionary и т.д.

Изображения сценария, в котором вы хотите перебрать каждый символ в ASCII string и извлечь уникальный набор используемых гласных. Вы можете оценить каждый символ и добавить его в NSMutableSet. Для этого вам необходимо инкапсулировать каждый символ в NSNumber, поскольку NSMutableSet ожидает объект Objective-C. Это всего лишь один пример, но эта концепция применима ко многим ситуациям, когда в коллекцию необходимо добавить примитивы.

+0

Да, сложная часть состоит в том, чтобы подумать о сценарии, в котором требуется значение символа * буквального * NSNumber. Это может быть ваш хэш-набор случаев гласных. –

-1

Вы можете использовать NSNumber с символами, чтобы вернуть его ASCII-код, так что V будет возвращать 86.

Я не думаю, что многие люди используют его, что много, но вы могли бы использовать его для проверки символов. Я думаю, что это только одна из тех вещей, куда Apple пошла, да, давайте вложим это в суть этого.

Это действительно не используется для других. @YES и @NO - это то же самое, что и YES и NO, поэтому в некоторых местах это своего рода неэлегантное.

+0

Прото, что вы подразумеваете под «валидацией символов»? Также вы имеете в виду, что вам не нужно использовать литерал или использовать знак @ при использовании логических значений? – cheznead

+0

Ни то, ни другое не являются истинными утверждениями. @ 'V', @ YES и @ NO предоставляют экземпляры NSNumber, которые не равны их примитивным аналогам. (Пространства, добавленные после того, как приложение StackExchange думает, что я пытаюсь назвать кого-то). Чтобы продемонстрировать это, попробуйте добавить NO к массиву. Это не сработает, потому что NO отображается аналогично nil, и вы не можете добавить объект nil в массив. Однако добавление @ NO будет работать отлично. Кроме того, чтобы получить значение ASCII буквы, было бы разумнее просто использовать его с использованием (int) charName, а не для вызова [@ 'V' intValue]; –

+0

Почему @NO работает там? Потому что он прямо объявляется объектом obj-c? – cheznead

2

Ну, один случай, когда вы используете KVC, чтобы установить значение ключа, а тип свойства является char:

[object setValue:@'a' forKey:someCharPropertyName];