Singleton in Swift

Uno dei pattern più utilizzati durante lo sviluppo è sicuramente il Singleton. Per chi non lo sapesse, la definizione di pattern Singleton è la seguente1:

Il singleton è un design pattern creazionale che ha lo scopo di garantire che di una determinata classe venga creata una e una sola istanza, e di fornire un punto di accesso globale a tale istanza.

Con un singleton, quindi, possiamo avere un’unica istanza di una determinata classe, che viene condivisa tra le varie classi che la utilizzano.

Come possiamo creare un singleton in Swift? Vediamo due possibili alternative.

Costante globale

In questa prima modalità andiamo a creare una costante globale, che sarà disponibile solo all’interno del file stesso (quindi non andrà a disturbare il namespace globale). All’interno della classe utilizzeremo poi una computed property, che ritornerà l’istanza stessa. L’ottimizzazione è garantita da Swift, che istanza in maniera lazy le costanti globali.

Nested struct

Il secondo metodo sfrutta maggiormente tutti i nuovi concetti di classi e struct introdotti con Swift.

A differenza delle classi, le struct supportano costanti globali, quindi possiamo definire instance direttamente all’interno della struct stessa. La proprietà sharedInstance servirà unicamente a ritornare l’instanza creata all’interno della struct.

Considerazioni

Al momento la mia scelta ricade sul secondo metodo, ovvero utilizzando le nested struct. A mio avviso il codice rimane più compatto e sicuramente più “Swift-oriented”.

Voi quale metodo utilizzate? Avete delle alternative? Fatemelo sapere :]

Fonti:
1. https://github.com/hpique/SwiftSingleton
2. http://thatthinginswift.com/singletons/


  1. Definizione tratta da Wikipedia http://it.wikipedia.org/wiki/Singleton 

Andrea Busi | @bubidevs

Laureato in Ingegneria Informatica, ho fondato nel 2008 questo piccolo blog, in cui racconto le mie esperienze e i miei pensieri sul mondo dell'informatica. Nella vita mi occupo di sviluppo software, e nel tempo libero continuo a coltivare la mia passione per il mondo iOS.

ommenti a “Singleton in Swift

  1. Matteo ha detto:

    Ciao Andrea! Io uso

    e va benone!

    1. Andrea Busi ha detto:

      Ciao!
      Si, anche questo è un metodo assolutamente valido! L’utilizzo del dispatch_one andava molto “di moda” con ObjC, sicuramente rimane valido anche ora!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*