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
private let _sharedInstance = MySingletonClass()
class MySingletonClass {
class var sharedInstance : MySingletonClass {
return _sharedInstance
}
}
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.
class MySingletonClass {
class var sharedInstance : MySingletonClass {
struct Static {
static let instance = MySingletonClass()
}
return Static.instance
}
}
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/
- Definizione tratta da Wikipedia http://it.wikipedia.org/wiki/Singleton ↩
2 comments On Singleton in Swift
Ciao Andrea! Io uso
e va benone!
Ciao!
Si, anche questo è un metodo assolutamente valido! L’utilizzo del dispatch_one andava molto “di moda” con ObjC, sicuramente rimane valido anche ora!