Pattern Singleton con il linguaggio Swift

ENTRA NEL NOSTRO GRUPPO FACEBOOK

×

Corso creare applicazioni per iOS con il linguaggio Swift

C'è una bellissima ed altissima donna Single (o ragazzo o persona attraente dato che ci sono anche donne che seguono il corso, non voglio creare discriminazione ne, tantomeno, rischiare l'esecuzione sommaria da parte della mia compagna). Comunque, questa ragazza è corteggiata da tantissimi uomini. Questi non vogliono altre donne ma esclusivamente quella ragazza Single. Non potendo duplicarsi e [...]

Torna a: Corso creare applicazioni per iOS con il linguaggio Swift > Applicazioni Multi Interfacce
  • Alessandro

    Ciao Beppe, nel caso del login di un utente dove supponiamo io voglia far apparire in alto a destra della navigation bar la foto e il nome utente, si usa il singleton in modo da condividere con tutte le view lo stesso oggetto? In un caso reale dove c’è un db che mi restituisce “is_loggedIn = true” è necessario avere un singleton?

    • Ciao Alessandro,

      Nel caso in cui l’oggetto ti serve in molti controller, allora usa il singleton. Quindi se la tua barra la usi in più controller, allora si.
      Mentre nel caso reale in cui utilizzi un DB, l’oggetto che ti restituisce il server dovrebbe anch’esso essere gestito da un singleton per evitare collegamenti ricorsivi. Cioè una volta che il DB te l’ha restituito lo conservi in un oggetto e poi ti limiti ad utilizzare quello, senza dover ogni volta chiedere al server di ritornarti l’utente.
      Con questa logica puoi modificare l’utente in locale e poi inviarlo al server solo quando realmente modificato. In termini di risparmio e di prestazioni ottieni un doppio beneficio dall’usare il singleton.
      Che tipo di DB stai utilizzando?

      • Alessandro

        Guarda non ci crederai ma uno dei motivi che mi ha spinto a passare alla programmazione nativa, rispetto a quella ibrida con JS, è che con iOS posso facilmente storare i dati in locale con Core Data cosa che con il localstorage o indexedDb dei browser ho trovato poco stabile e un po’ ballerina. Inoltre arrivo dai database noSQL in particolare MongoDB, perciò dati destrutturati. Motivo per il quale se un utente è loggato mi ritorna true e questo dato lo parcheggio un una variabile globale che richiamo quando voglio e stop. Ma la programmazione funzionale ti permette più “libertà”, non ti devi preoccupare di singleton, static, private, ecc..perciò sto andando un po’ in confusione :-(

        • Non ci posso credere! tutti non fanno altro che dirmi: “perché perdi tempo con swift?” “dovresti passare a JS” ecc ecc.
          Fortunatamente la programmazione nativa da privilegi che le ibride non potranno mai ottenere.
          Per il resto, vedi al singleton come un qualcosa che hai necessità di usare sempre e sempre allo stesso modo. Un pattern ti dice come programmare meglio qualcosa non è una qualcosa in più che viene aggiunto al tuo background. Infatti il singleton è una normale classe con una proprietà static. Ciò vuol dire che puoi creare un fittizio Singleton in diverse maniere.
          Ad esempio, mettendo una proprietà booleana, in un VC, che passi a true quando crei il primo oggetto. O cose di questo genere. Ovviamente queste soluzione poi danno problemi in futuro dato che devi ricordarti di modificare queste proprietà o di non creare nuovi oggetti.
          Quindi se ti viene meglio a risolvere un problema in un determinato modo, a te più familiare, fallo in quella maniera. Prima o poi arriverai ad utilizzare il singleton :P
          Comunque se non vado errando, l’implementazione del singleton in JS, è quasi simile a quello di swift.

          • Alessandro

            JS è un branch da tenere sotto occhio, si stanno muovendo cose interessanti che per ora danno un immediato effetto WOW quando si tratta di cose semplici e a basso budget. Ma si è schiavi di plugin e incompatibilità tra browser/webview che a volta fa rasentare la disperazione :-) io penso che ogni tecnologia ha il suo scopo e JS è fatto per il web, non per software.
            Ad ogni modo si può fare una cosa simile al singleton sì, ma non è così pulita come Swift. Non voglio accrocchiare, preferisco usare il metodo da te consigliato ma devo abituare il cervello a switchare :-D

            • La penso esattamente come te. Ogni linguaggio ha un suo preciso scopo. Il linguaggio C è multipiattaforma però nessuno si mette a creare app :P

              Per il resto, se ci sono altri problemi chiedi pure!

  • nickbonny

    Ciao Peppe, mi dispiace ma io non riesco proprio a capire che utilità abbia in questo esercizio usare i singleton sia all’interno della classe utente che nella class prenotazione..cioè usando delle classi normali cosa sarebbe cambiato?

  • Ciao Beppe.
    Stavo ripassando il pattern Singleton con xcode8. quando alla fine della lezione imposto l’init con il private anche se sono su playground quando vado a creare un utenteNormale mi dice che non è accessibile anche se sono nello stesso file… anche qui è cambiato qualcosa tra la versione 7 e la versione 8 presumo. Corretto?

Start typing and press Enter to search