2014-05-01 15 views
7

L'obiettivo C prevede diversi modi per dichiarare un'enumerazione. Potrebbe essere dichiarato tramite typedef enum o NS_ENUM. La macro NS_ENUM accetta il tipo nome come parametro e non ne capisco completamente il significato. Non ho trovato la descrizione della macro NS_ENUM nella documentazione ufficiale di Apple. Qual è la differenza tra l'utilizzo di enum e NS_ENUM? E un'altra domanda se è possibile utilizzare qualsiasi altro tipo in NS_ENUM invece NSInteger e i relativi tipi interi relativi?NS_ENUM vs enum

risposta

9

NSHipster fornito un bel post che spiega questo fondo:

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

Per citare la linea di fondo:

Questo approccio combina il meglio di tutti gli approcci di cui sopra (enum, typedef enum), e fornisce anche suggerimenti per il compilatore per type-checking e switch statement complete ss.

1

ecco il link alla documentazione ufficiale di Apple:
https://developer.apple.com/library/content/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html#//apple_ref/doc/uid/TP40014150-CH1-SW6

Dalla sottosezione dal titolo "Enumeration Macro":

I NS_ENUM e NS_OPTIONS macro forniscono una concisa, semplice modo di definire enumerazioni e opzioni nei linguaggi basati su C. Queste macro migliorano il completamento del codice in Xcode e specificano esplicitamente il tipo e la dimensione delle tue enumerazioni e opzioni. Inoltre, questa sintassi dichiara l'enumerazione in un modo che viene valutato correttamente dai compilatori precedenti e da quelli più recenti che possono interpretare le informazioni del tipo sottostante.

Utilizzare la NS_ENUM macro per definire enumerazioni, un insieme di valori che si escludono a vicenda:

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

Il NS_ENUM macro aiuta a definire sia il nome e il tipo di enumerazione, in questo caso chiamato UITableViewCellStyle di digitare NSInteger. Il tipo per le enumerazioni deve essere NSInteger.

+1

Le risposte di solo collegamento sono sconsigliate. Se ci sono informazioni utili disponibili, dovresti farne parte della tua risposta. –

+3

@Sahuagin Se osservi attentamente la domanda, il link alla documentazione ufficiale ne fa parte. – AbbasAngouti

2

La differenza principale è che typedef NS_ENUM si traduce in un enum Swift correttamente, mentre typedef enum non lo fa.

+0

Ottima spiegazione –