Ns_enum vs enum -- objective-c пол Связанный проблема

NS_ENUM vs enum


10
vote

проблема

русский
Цель

C предоставляет несколько способов объявить перечисление. Он может быть объявлен через <код> typedef enum или <код> NS_ENUM . <Код> 9988777667 MACRO принимает имя типа в качестве параметра, и я не полностью понимаю его значение. Я не нашел описания NS_ENUM Macro в официальной документации Apple. Какая разница между использованием <код> enum и <код> <tr><td colspan="8">&nbsp;</td></tr> <tr> <td align="right"><span class="label">Ship Group</span></td> <td align="left"> &nbsp;[00001] 2920 E. Chambers St.</td> <td align="right"><span class="label">Quantity</span></td> <td align="right"> <input type="text" name="iqm_00001:00001" size="6" value="5"/> <input type="checkbox" name="selectedItem" value="00001"> </td> <td> &nbsp; </td> <td colspan="2">&nbsp;</td> <td align="right"> <a id="cancel_00001" name="cancel_00001 "href="javascript:document.updateItemInfo.action='/ordermgr/control/cancelOrderItem';document.updateItemInfo.orderItemSeqId.value='00001';document.updateItemInfo.shipGroupSeqId.value='00001';document.updateItemInfo.submit()" class="buttontext">Cancel</a> </td> </tr> <tr> <td align="right"> <span class="label">Comments</span> </td> <td colspan="7" align="left"> <input type="text" name="icm_00001" value="" size="30" maxlength="60"/> </td> </tr> <tr> <td align="right"> <span class="label">Delivery Date</span> </td> <td colspan="7" align="left" colspan="7"> <input type="text" name="iddm_00001" value="2011-03-31 12:49:16.000" size="25" maxlength="30"/> <a href="javascript:call_cal(document.updateItemInfo.iddm_00001,'2011-03-11 00:00:00.0');"><img src="/images/cal.gif" width="16" height="16" border="0" alt="Click here For Calendar"/></a> </td> </tr> 0 ? И другой вопрос, если можно использовать любой другой тип <код> <tr><td colspan="8">&nbsp;</td></tr> <tr> <td align="right"><span class="label">Ship Group</span></td> <td align="left"> &nbsp;[00001] 2920 E. Chambers St.</td> <td align="right"><span class="label">Quantity</span></td> <td align="right"> <input type="text" name="iqm_00001:00001" size="6" value="5"/> <input type="checkbox" name="selectedItem" value="00001"> </td> <td> &nbsp; </td> <td colspan="2">&nbsp;</td> <td align="right"> <a id="cancel_00001" name="cancel_00001 "href="javascript:document.updateItemInfo.action='/ordermgr/control/cancelOrderItem';document.updateItemInfo.orderItemSeqId.value='00001';document.updateItemInfo.shipGroupSeqId.value='00001';document.updateItemInfo.submit()" class="buttontext">Cancel</a> </td> </tr> <tr> <td align="right"> <span class="label">Comments</span> </td> <td colspan="7" align="left"> <input type="text" name="icm_00001" value="" size="30" maxlength="60"/> </td> </tr> <tr> <td align="right"> <span class="label">Delivery Date</span> </td> <td colspan="7" align="left" colspan="7"> <input type="text" name="iddm_00001" value="2011-03-31 12:49:16.000" size="25" maxlength="30"/> <a href="javascript:call_cal(document.updateItemInfo.iddm_00001,'2011-03-11 00:00:00.0');"><img src="/images/cal.gif" width="16" height="16" border="0" alt="Click here For Calendar"/></a> </td> </tr> 1 вместо <код> <tr><td colspan="8">&nbsp;</td></tr> <tr> <td align="right"><span class="label">Ship Group</span></td> <td align="left"> &nbsp;[00001] 2920 E. Chambers St.</td> <td align="right"><span class="label">Quantity</span></td> <td align="right"> <input type="text" name="iqm_00001:00001" size="6" value="5"/> <input type="checkbox" name="selectedItem" value="00001"> </td> <td> &nbsp; </td> <td colspan="2">&nbsp;</td> <td align="right"> <a id="cancel_00001" name="cancel_00001 "href="javascript:document.updateItemInfo.action='/ordermgr/control/cancelOrderItem';document.updateItemInfo.orderItemSeqId.value='00001';document.updateItemInfo.shipGroupSeqId.value='00001';document.updateItemInfo.submit()" class="buttontext">Cancel</a> </td> </tr> <tr> <td align="right"> <span class="label">Comments</span> </td> <td colspan="7" align="left"> <input type="text" name="icm_00001" value="" size="30" maxlength="60"/> </td> </tr> <tr> <td align="right"> <span class="label">Delivery Date</span> </td> <td colspan="7" align="left" colspan="7"> <input type="text" name="iddm_00001" value="2011-03-31 12:49:16.000" size="25" maxlength="30"/> <a href="javascript:call_cal(document.updateItemInfo.iddm_00001,'2011-03-11 00:00:00.0');"><img src="/images/cal.gif" width="16" height="16" border="0" alt="Click here For Calendar"/></a> </td> </tr> 2 и его относительные целочисленные типы?

Английский оригинал

Objective C provides several ways to declare an enumeration. It could be declared via typedef enum or NS_ENUM. NS_ENUM macro takes type name as a parameter, and I do not completely understand its meaning. I didn't find description of NS_ENUM macro in official Apple documentation. What's a difference between using enum and NS_ENUM? And an other question if it's possible to use any other type in NS_ENUM instead NSInteger and its relative integer types?

</div
  

Список ответов

12
 
vote

Nshipster предоставил очень хороший пост, который объясняет это тщательно:

http://nyphertion.com/ns_enum-ns_options/

Чтобы процитировать нижнюю строку:

Этот подход сочетает в себе лучшее из всех вышеупомянутых подходов (enum, typedef enum) и даже обеспечивает подсказки к компилятору для проверки типа и ,

 

NSHipster provided a very nice post that explains this thoroughly:

http://nshipster.com/ns_enum-ns_options/

To quote the bottom line:

This approach combines the best of all of the aforementioned approaches (enum, typedef enum), and even provides hints to the compiler for type-checking and switch statement completeness.

</div
 
 
8
 
vote

Основное отличие заключается в том, что <код> typedef NS_ENUM переводится правильно Swift enum, тогда как <код> typedef enum не.

 

The main difference is that typedef NS_ENUM translates to a Swift enum properly, whereas typedef enum doesn't.

</div
 
 
2
 
vote

Вот ссылка на официальную документацию Apple:
https://developer.apple.com/library/content/Releasenotes/objectivec/modernizationObjc/adoptingModernobjective-c/adoptingModernobjective-ctml#//apple_ref/doc/uid/tp40014150-Ch1-sw6 < / a>

от подраздела под названием «Macros перечисления»:

<Код> NS_ENUM и <код> NS_OPTIONS macros предоставляет краткий, простой способ определения перечисления и параметров в языках на основе C. Эти макросы улучшают завершение кода в Xcode и явно укажите тип и размер ваших перечислений и опций. Кроме того, этот синтаксис объявляет Enums таким образом, чтобы правильно оцениваться пожилыми компиляторами, и более новыми, которые могут интерпретировать базовый тип информации.

Используйте <код> NS_ENUM макроса, чтобы определить перечисления , набор значений, которые являются взаимно исключительными:

 <код> typedef NS_ENUM(NSInteger, UITableViewCellStyle) {         UITableViewCellStyleDefault,         UITableViewCellStyleValue1,         UITableViewCellStyleValue2,         UITableViewCellStyleSubtitle };   

NS_ENUM Macro помогает определить как имя, так и тип перечисления, в данном случае с именем <код> UITableViewCellStyle типа <код> browser.link(:url, "javascript:document.updateItemInfo.action='/ordermgr/control/cancelOrderItem';document.updateItemInfo.orderItemSeqId.value='00002';document.updateItemInfo.shipGroupSeqId.value='00001';document.updateItemInfo.submit()").click 0 . Тип для перечислений должен быть <код> browser.link(:url, "javascript:document.updateItemInfo.action='/ordermgr/control/cancelOrderItem';document.updateItemInfo.orderItemSeqId.value='00002';document.updateItemInfo.shipGroupSeqId.value='00001';document.updateItemInfo.submit()").click 1 .

 

Here is the link to the official Apple's documentation:
https://developer.apple.com/library/content/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html#//apple_ref/doc/uid/TP40014150-CH1-SW6

From the subsection titled "Enumeration Macros":

The NS_ENUM and NS_OPTIONS macros provide a concise, simple way of defining enumerations and options in C-based languages. These macros improve code completion in Xcode and explicitly specify the type and size of your enumerations and options. Additionally, this syntax declares enums in a way that is evaluated correctly by older compilers, and by newer ones that can interpret the underlying type information.

Use the NS_ENUM macro to define enumerations, a set of values that are mutually exclusive:

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {         UITableViewCellStyleDefault,         UITableViewCellStyleValue1,         UITableViewCellStyleValue2,         UITableViewCellStyleSubtitle }; 

The NS_ENUM macro helps define both the name and type of the enumeration, in this case named UITableViewCellStyle of type NSInteger. The type for enumerations should be NSInteger.

</div
 
 
   
   

Связанный проблема

46  Как проверить push-уведомление работает в моем приложении  ( How to test push notification is working in my application ) 
В моем приложении я реализую службу Push-уведомления. У меня есть сервер поставщика контента, который содержит некоторые продукты в нем. Я создал сертификат...

-1  Переместите анимированный символ только в то время как кнопка удерживается  ( Move an animated character only while a button is held down ) 
Я пытался сделать накрасочный персонаж двигаться с четырьмя стрелками: вверх, прямо, левый и вниз, как игровая мальчик. Я сделал это: <код> - (IBActio...

0  Уволить контроллер просмотра, когда он был назван «PerforgeGege»?  ( Dismiss view controller when it was called by performsegue ) 
У меня есть три контроллера просмотра: <код> Main , <код> VC1 , а <код> VC2 . Всякий раз, когда приложение запускает метод делегата определяет, какой VC будет...

1  UIREFRESHCONTROL в UiscrollView не срабатывает, когда используется большой заголовок  ( Uirefreshcontrol in a uiscrollview is not triggered when large title is used ) 
Когда я использую большие заголовки для панели навигации, добавленные элементы управления UIREFRESH для UIScrollView не срабатывают при вытянутом состоянии ...

15  Получение новейших уведомлений только тогда, когда приложение работает  ( Receiving newsstand notifications only when app is running ) 
Я не получаю уведомления в газете, когда приложение не работает, вот что я сделал. Приложение имеет правильные клавиши Plist 'uinewsstancstApp = yes and' ui...

1  Нужно, чтобы получить доступ к URL в моем одном представлении ИОС приложения с помощью веб-просмотра  ( Need to access the url in my single view ios application using web view ) 
<Р> У меня есть один вопрос относительно WebView. У меня есть URL-адрес, и нужно, чтобы запустить этот URL в WebView. и мой код здесь идет .. <код> NSLog(@"R...

47  Получение ошибки от push-уведомления  ( Getting an error from push notification ) 
В моем приложении мне нужны push-уведомления. Я реализую все инструкции от Docs push-уведомления. Но я получил ошибку от push-уведомления: <код> Fail To Reg...

0  Получение неправильной аннотации от метода делегата MapView  ( Getting wrong annotation from mapview delegate method ) 
Я объявил следующее в своем файле .h: <Код> Annotation *annoForMoreDetails . Однако, когда я пытаюсь установить его в текущую аннотацию в методе <Код> -...

7  Что такое uiviewcontrollerrwapprview?  ( What is uiviewcontrollerwrapperview ) 
Я запрограммировал, когда один момент я назвал методом руководящего обзора с моего представления от ViewController и с NSLog («% @», [MyView Superiew]); Я вид...

7  Никогда не получайте загрузку данных в Google API для iOS  ( Never getting uploading data progress in google api for ios ) 
Я использую Googledrive API в своем приложении, чтобы загрузить файлы из моего приложения. До сих пор мне удалось найти хорошие результаты для загрузки всех т...

0  Симулятор iPad показывает черный экран слева?  ( Ipad simulator showing black screen on the left ) 
Привет, я делаю приложение iPhone / iPad. Однако в симуляторе iPad экран показывает черный экран слева без видимых причин. Я запустил приложение с симулято...

0  Создание и выпуск объектов в том же методе, используя себя в качестве делегата  ( Creating and releasing objects in the same method while using self as delegate ) 
В Objective-C Вы несете ответственность за выделение выделения выделения выделения, но что происходит, когда вы распределите объект в способе, назначаете Sel...

69  Объективная категория, вызывающая непризнанный селектор  ( Objective c category causing unrecognized selector ) 
Мой проект имеет <код> UIImage Функция категории, которую я хочу позвонить из другого класса. Я правильно импортирую файл заголовка для категории изображений...

32  В чем разница между ns_enum и ns_options?  ( What is the difference between ns enum and ns options ) 
i предварительно назначил следующий код с помощью clang в xcode5. <код> typedef NS_ENUM(NSInteger, MyStyle) { MyStyleDefault, MyStyleCustom }; type...

6  Как изменить размер изображения, чтобы соответствовать ячейке UiableView?  ( How to resize image to fit uitableview cell ) 
Как соответствовать <код> UIImage в ячейку <код> UITableView , uableviewcell (?). Вы <Код> addSubview на <Код> cell или есть ли способ изменить размер <к...

Связанный проблема

46  Как проверить push-уведомление работает в моем приложении 
-1  Переместите анимированный символ только в то время как кнопка удерживается 
0  Уволить контроллер просмотра, когда он был назван «PerforgeGege»? 
1  UIREFRESHCONTROL в UiscrollView не срабатывает, когда используется большой заголовок 
15  Получение новейших уведомлений только тогда, когда приложение работает 
1  Нужно, чтобы получить доступ к URL в моем одном представлении ИОС приложения с помощью веб-просмотра 
47  Получение ошибки от push-уведомления 
0  Получение неправильной аннотации от метода делегата MapView 
7  Что такое uiviewcontrollerrwapprview? 
7  Никогда не получайте загрузку данных в Google API для iOS 
0  Симулятор iPad показывает черный экран слева? 
0  Создание и выпуск объектов в том же методе, используя себя в качестве делегата 
69  Объективная категория, вызывающая непризнанный селектор 
32  В чем разница между ns_enum и ns_options? 
6  Как изменить размер изображения, чтобы соответствовать ячейке UiableView?