In questo tutorial vedremo come dichiarare una stringa come costante in Objective C.

A volte abbiamo bisogno di fare in modo che una variabile stringa abbia un valore costante durante l'esecuzione del nostro programma.

Possiamo pertanto dichiarla come costante.

Prima di dichiarare una stringa come costante dobbiamo inoltre pensare allo scope (il campo di visibilità) della costante, e valutare se essa ci occorrerà solo nella nostra classe, oppure debba essere visibile da classi esterne, oppure debba essere addirittura globale.

Poichè il modo di dichiarare la costante cambia a seconda dello scope che vogliamo dare alla costante, vediamo i diversi modi dichiarare una stringa come costante in Objective C.

vari modi di dichiarare una stringa costante a seconda dello scope

Per poter dichiarare una costante NSString in Objective C useremo diverse keywords:

static const ed extern


A seconda del campo di visibilità che la nostra costante stringa dovrà avere il modo di dichiararla sarà diverso,

i tre casi comunque sono questi:

- costante locale privata, visibile solo dalla classe dove è dichiarata

- costante locale pubblica, visibile da altre classi

- costante globale, visibile a tutte le classi che importeranno il file

COSTANTE LOCALE PRIVATA

Nel caso in cui volessimo rendere disponibile la costante solo alla nostra classe (e non visibile dall'esterno ad altre classi)

bisogna dichiarare la costante all'inizio del file .m (implementation file)

// NEL FILE .m

static NSString *const kErrorUnreachable = @"ERRORE - Webservices al momento irraggiungibili.";

COSTANTE LOCALE PUBBLICA

Nel caso in cui volessimo rendere disponibile la costante anche ad altre classi esterne, dobbiamo:

- dichiararla nel file .h (header file) usanto la keyword extern

prima di @interface

// NEL FILE .h

extern NSString *const kErrorUnreachable;


@interface nomeClasse : classePadre 

- definirla nel file .m (implementation file) nel modo seguente, prima di @implementation

// NEL FILE.m

NSString *const kErrorUnreachable = @"ERRORE - Webservices al momento irraggiungibili.";


@implementation nomeClasse

COSTANTE GLOBALE

Nel caso in cui volessimo renderla globale possiamo dichiararla in un file header .h e poi importare il file header in tutte le classi che hanno bisogno di utilizzarla.

Per comodità un file del genere chiamato ad esempio costanti.h potrebbe essere importato anche nel file PrefixHeader.pch per poter essere importato poi da tutte le classi.


Per maggiori informazioni puoi leggere i tutorial correlati:
- che cosa è il file Prefix Header in una app iOS
- come importare classi comuni nel file Prefix Header su iOS

Perchè non usare #define ?

In tante occasioni è più pratico utilizzare le macro con #define al posto delle costanti dichiarate nel modo che vi ho descritto.

Però le macro per il pre-processore hanno qualche difetto:

- quando c'erano compilatori che non riuscivano a identificare il tipo delle macro, questo poteva essere un buon motivo per evitarle

- ora che i compilatori sono in grado di fare il check del tipo per le macro, uno svantaggio potrebbe essere quello di non avere il pieno utilizzo del debugger

Qui sotto trovi alcuni tutorial correlati sull'argomento Macro per il pre-processore, la primissima fase di compilazione del codice su Xcode.


Per maggiori informazioni puoi leggere i tutorial correlati:
- come usare DEFINE in Objective C
- macro per il pre-processore in Objective C
- macro pre-definite per il preprocessore in Objective C
- operatori per il preprocessore in Objective C
- macro per il pre-processore che accettano parametri in Objective C
- a cosa serve il file prefix header in XCode

Se vuoi avere un quadro completo delle direttive per il pre-processore puoi leggere il seguente tutorial correlato:


Per maggiori informazioni puoi leggere i tutorial correlati:
- direttive per il pre-processore in Objective C