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
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.
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
eNS_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 chiamatoUITableViewCellStyle
di digitareNSInteger
. Il tipo per le enumerazioni deve essereNSInteger
.
La differenza principale è che typedef NS_ENUM
si traduce in un enum Swift correttamente, mentre typedef enum
non lo fa.
Ottima spiegazione –
- 1. typedef NS_ENUM vs typedef enum
- 2. Enumerazione Objective-C, NS_ENUM e NS_OPTIONS
- 3. MySQL enum vs. set
- 4. c eguali # enum() vs ==
- 5. EnumMap vs. Enum valori
- 6. C++ - enum vs. const vs #define
- 7. Enum vs Tabella di ricerca vs Enum reflection vs State pattern
- 8. NS_ENUM - la definizione della funzione non è consentita qui
- 9. Casting per enum vs. Enum.ToObject
- 10. Enum serializzazione JSON vs XML
- 11. C++ che dichiara enum statico vs enum in una classe
- 12. Valore restituito best practice vs Exception vs Enum
- 13. .NET: bool vs enum come parametro metodo
- 14. valori Enum() Lunghezza vs campo privato
- 15. Enum vs non membro discriminato unione
- 16. #define vs enum per l'indirizzamento delle periferiche
- 17. perché utilizzare costanti stringa vs costanti enum?
- 18. Objective C enum in rapida
- 19. riferimento al enum è ambiguo Objective-C
- 20. enum vs android @Intdef - quale è meglio ottimizzato
- 21. Sovraccarico di un metodo nella sottoclasse (Enum vs int)
- 22. Istruzione switch C# .NET stringa confronto vs enum confronta
- 23. Enum VS Classe statica (normale e con valori di stringa)
- 24. #define vs enum in un ambiente incorporato (come vengono compilati?)
- 25. C: enum VS #define per le costanti matematiche?
- 26. Java Enum find enum
- 27. Enum in enum
- 28. Get enum da attributo enum
- 29. Enum of Enum è NULL
- 30. Enum all'interno di una enum
Le risposte di solo collegamento sono sconsigliate. Se ci sono informazioni utili disponibili, dovresti farne parte della tua risposta. –
@Sahuagin Se osservi attentamente la domanda, il link alla documentazione ufficiale ne fa parte. – AbbasAngouti