Swift Foundation

Foundation framework per Swift

Cos’è Foundation di swift

Foundation è un framework di base presente in tutte le applicazioni Swift, che fornisce una base di dati, una struttura e la funzionalità necessaria per sviluppare app iOS, macOS, watchOS e tvOS. È un insieme di oggetti che fornisce le basi fondamentali per costruire app su qualsiasi piattaforma Apple. Include classi e funzionalità per gestire la memoria, l’archiviazione, la rete e altro ancora.
Il progetto swift-corelibs-foundation ha contribuito a lanciare la versione Swift open source di Foundation nel 2016.

Il framework Foundation è uno strumento estremamente utile per sviluppatori iOS e MacOS che consente inoltre agli stessi di creare app più velocemente e con maggiore efficienza. Può essere utilizzato per sviluppare applicazioni che richiedono l’accesso a una vasta gamma di funzionalità, come le API di sistema, le API di rete, le API di database, le API di file e molto altro ancora.

Gli ultimi obiettivi tecnici, sono volti a creare un’implementazione unificata di Foundation, scritta in Swift, per tutte le piattaforme.

Dal blog ufficiale Swif.org, apprendiamo:

  1. Niente più codice C impachetttato.
    Con un’implementazione Swift nativa di Foundation, il framework non paga più i costi di conversione tra C e Swift, ottenendo prestazioni più veloci. Un’implementazione Swift, sviluppata come pacchetto, rende anche più facile per gli sviluppatori Swift ispezionare, comprendere e contribuire al codice.
  2. Fornire l’opzione di pacchetti più piccoli e più granulari.
    Rewriting Foundation offre l’opportunità di adattare la sua architettura ai casi d’uso in evoluzione. Gli sviluppatori vogliono mantenere le loro dimensioni binarie piccole e un nuovo pacchetto FoundationEssentials fornirà i tipi più importanti in Foundation senza dipendenze di sistema per aiutare a raggiungere questo obiettivo. Un pacchetto FoundationInternationalization separato sarà disponibile quando è necessario lavorare con contenuti localizzati come date e orari formattati. Altri pacchetti continueranno a fornire supporto XML e networking. Un nuovo pacchetto FoundationObjCCompatibility conterrà API legacy utili per determinate applicazioni.
  3. Unifica le implementazioni di Foundation.
    Molteplici implementazioni di qualsiasi API rischiano comportamenti divergenti e, in definitiva, bug durante lo spostamento del codice tra piattaforme. Questo nuovo pacchetto Foundation fungerà da fulcro di un’unica implementazione canonica di Foundation, indipendentemente dalla piattaforma.

Il futuro di Foundation

Ci sono delle news a riguardo proprio a Foundation. Stanno preparando un progetto atto a creare un implementazione unificata di Foundation, scritta in Swift, per tutte le varie piattaforme. Una parte importante di questa visione consiste nel fornire l’opzione di moduli più piccoli e più granulari per le app lato server. Creare una discussione sul progetto esaminando una ripartizione di quali tipi dovrebbero apparire in quali moduli.

Ripartizione dei moduli

Di seguito è riportata la proposta preliminare su quali siano le migliori linee di separazione. Questo non è un elenco definitivo.

Foundation Essentials

Questi tipi sono utili nella maggior parte delle applicazioni e non hanno dipendenze di sistema aggiuntive. Questo pacchetto può scegliere di affidarsi a pacchetti Swift chiave come Collections o Algorithms, ma ogni nuova dipendenza verrà aggiunta solo dopo un’attenta considerazione del compromesso rispetto alla dimensione complessiva di Essentials. Questo modulo contiene tipi che promuovono la missione generale di Foundation come libreria per fornire classi di utilità di base, stabilire precedenti per modelli di progettazione e fornire un livello di indipendenza dal sistema operativo per migliorare la portabilità.

  • URL
  • Data
  • UUID
  • Date,DateInterval
  • PropertyListSerialization,JSONSerialization
  • PropertyListDecodere JSONDecodercodificatori
  • NotificationCenter
  • AttributedString
  • SortDescriptor
  • Measurement, Dimension,Unit
  • ProcessInfo
  • UserDefaults(l’ambito può essere limitato, ad esempio a determinati tipi di domini)
  • FileManager, FileHandle, Process,Pipe
  • Bundle

Alcune di queste API meritano un nuovo look a causa dei progressi nel linguaggio da quando sono state introdotte. Ad esempio, pensiamo che l’API come Processo dovrebbe adottare async/await. Includendoli nel pacchetto Essentials, speriamo di poter collaborare con la community per far progredire insieme l’API. A breve termine, l’API esistente è ancora utile per molti progetti che dipendono da essa.

Foundation Internationalization

Questi tipi sono utili per lavorare con date e ore o formattare i dati per la presentazione dell’utente.

  • FormatStyleprotocollo e tutti i tipi di stile di formato concreto
  • Locale, Calendar, TimeZone,DateComponents
  • Locale-estensioni Stringspecifiche
  • CharacterSet(Questa API potrebbe essere riprogettata o migliorata in futuro per adattarsi meglio a Swift String)
  • URLResource
  • LocalizedError
  • Morphology

Foundation Networking

Il modulo Foundation Networking è già stato separato da Foundation. Continuerà a fornire la stessa API di rete. L’unificazione di questa implementazione in Swift è una direzione futura altamente desiderata dopo aver stabilizzato i tipi essenziali, in particolare URL.

  • URLSession, URLRequest, URLResponse, altri tipi associati
  • HTTPCookie, HTTPURLResponse, altri tipi associati

Foundation XML

Il modulo FoundationXML è già stato separato da Foundation . Continuerà a fornire la stessa API di analisi XML. L’unificazione di questa implementazione in Swift è una direzione futura dopo aver stabilizzato i tipi essenziali e FoundationNetworking .

  • XMLDocument
  • XMLDTD
  • XMLDTDNode
  • XMLElement
  • XMLNode
  • XMLParser

Foundation ObjC Compatibility

Questi tipi sono utili per la compilazione incrociata con Darwin Foundation o codice legacy.

  • NSObject
  • NSValue,NSNumber
  • NSError
  • NSNull
  • Geometry types, NS/CGRect, NS/CGPoint, NSEdgeInsets, ecc.

Micromoduli vs Monoliti

Una domanda frequente è: perché non vengono suddivisi ogni tipo in Foundation in un pacchetto separato, in modo che possano essere importati indipendentemente? La risposta giusta sia un equilibrio tra i singoli tipi in moduli indipendenti e un grande modulo con tutto. In un sistema con ciascun componente come modulo separato, il numero di relazioni tra i moduli può crescere rapidamente. Ogni interfaccia tra i moduli deve essere stabile e pubblica. Questo può inavvertitamente bloccare futuri miglioramenti alla superficie dell’API nel suo insieme, quando si scopre che un’interfaccia che si pensava fosse solo per un modulo “amico” è in realtà utilizzata altrove.

1 commento su “Swift Foundation”

  1. Pingback: Come diventare uno sviluppatore iOS in 5 mosse - Alizeti HR

I commenti sono chiusi.