[RIPRODUZIONE DI BRANI MUSICALI] DAN AMRMENDARIZ: Tutti, benvenuti al seminario CS50, iOS App per lo sviluppo di Swift. Sono Dan Armendariz, e io sono un maestro di informatica qui a Harvard. E la prossima ora sarà un tour di più oggetti su questo argomento, come possiamo andare bene. Io posto tutto il codice sorgente di che vedrete oggi on-line. Potremmo non essere in grado di effettivamente andare su tutto che sono che sono mostrando in questo momento. Ma almeno si spera attraverso i commenti del codice sorgente, sarete in grado di cercare di capire che cosa sta succedendo esattamente per queste cose che non abbiamo abbastanza raggiungere. In generale, la struttura di il discorso di oggi sarà il seguente. Inizieremo fuori facendo un po 'di base sintassi con la lingua Swift, entrare in alcune delle più avanzate sintassi del linguaggio Swift. Perché la lingua è davvero moderno e ha un sacco di alto livello caratteristiche, cose che non abbiamo visto in C tutto CS50, o anche alcune altre lingue che abbiamo iniziato utilizzando in CS50 come PHP, così ho intenzione di avere a cercare di introdurre anche alcuni argomenti che sono legati a linguaggi di livello superiore che non si può vedere in modo approfondito nel CS50, ma si vedrà più tardi corsi di informatica. Quindi sarà un fitto ora. E non esitate a lasciarmi sapere se avete domande. Quindi, se siete interessati a fare lo sviluppo con Swift, o realmente qualsiasi sviluppo iOS app, ci sono un paio di requisiti. Prima di tutto, si deve essere con un Mac, in esecuzione negli esempi che ci accingiamo a utilizzare oggi, una relativamente nuova versione di OS X. In questo caso, sto correndo X 10.5. È possibile eseguire 10.11 se si vuole. Ma tutto ciò che si sta andando a vedere sta coinvolgendo Xcode 7 e versioni successive, che ha l'ultima versione di Swift, che è Swift 2.0. Questo è in realtà una bella distinzione importante. Un sacco di sintassi ha cambiata abbastanza significativamente in alcuni casi da Swift 1.0, che è stato rilasciato lo scorso anno, a Swift 2.0, che appena uscito questo autunno. Così stiamo andando a mostrare Swift 2.0. Un sacco di cose che si cerca on-line quando si sta cercando di ottenere ulteriori informazioni su una varietà di cose, si potrebbe voler esplicitamente cercare Swift 2 piuttosto che semplicemente vecchio Swift fare assicurarsi che si ottiene la sintassi corretta. In realtà, questo è generalmente vero. C'è un rapido quantità di sviluppo accade nella lingua Swift da quando Apple ha rilasciato, credo che cosa, è stato un po 'più di un anno adesso. E le cose sono cambiate drammaticamente in quel momento. E quindi non essere frustrato se, quando si sta guardando in giro per argomenti su Swift o di come realizzare qualcosa usando qualche esempio di codice o qualcosa che non fa effettivamente lavorare su Swift 2.0. Assicurarsi che si sta cercando in particolare per quella versione per cercare di ridurre al minimo gli effetti di diverso le versioni e questo genere di cose. Cercherò di indicare solo alcune cose che sono diverse per le versioni precedenti. Ma è qualcosa a cui prestare attenzione. Questo è probabilmente sarà uno dei più grandi mal di testa che si avrà con Swift è la ricerca esempio di codice che è più vecchio, anche solo da alcuni mesi, cercando di utilizzare nel vostro progetto più moderno. E semplicemente non funziona. Stai diventando errori di compilazione, la sintassi errori, ogni sorta di cose folli. Quindi, solo essere paziente con che, e si spera avere una bella bella esperienza con generale Swift. Ora si può effettivamente join-- e spero in realtà abbiamo ancora questo anno di successo questo Di CS 50 Apple App team di sviluppo, che vi permetterà di installare qualsiasi applicazione che si creano sui vostri dispositivi iOS. Quindi dare un'occhiata a questo URL se siete interessati a farlo. Quindi, solo un paio di cose su Swift stesso. È un linguaggio compilato. Ma vedrete che alcuni delle caratteristiche che usiamo consentono di essere utilizzato anche in un po ' interpretato come un modo pure. Un sacco di sintassi è preso in prestito da C. Si basa e scritto in C. E così vedremo che ci sono un sacco di take away dalla vostra conoscenza esistente da C che possiamo porto di Swift. Ma ci sono cose che lo rendono molto diverso da C. E 'molto fortemente tipizzato. C'è gestione automatica della memoria. Tu non stai andando ad avere per utilizzare malloc o dovunque gratuito. È progettato per la generalità. Quindi, in altre parole, è possibile utilizzarlo in tutti i tipi di contesti, da Apple Osservare per iPhone tutta la strada fino a OS X, e persino alcuni server, anche alcuni script. Ma vedremo che il supporto per lo scripting non c'era ancora come è in altre lingue. Quindi molto probabilmente sarete utilizzando questo esclusivamente per lo sviluppo sul vostro Mac o il vostro iPhone. E ha un sacco di funzioni moderne. E molte di queste cose sono cose che stiamo andando a cercare di affrontare oggi, ma anche i nostri argomenti che francamente, siamo in grado di dedicare interi corsi. Infatti, CS 51, che è offerto semestre successivo, si concentra molto su questi argomenti che sono descritte di seguito. Così si può trascorrere un intero semestre capire queste cose. Ma stiamo andando a provare per ottenere attraverso di loro almeno abbastanza che può capire che cosa è succede quando si guarda in un programma di Swift ed essere in grado di incidere il vostro modo attraverso di essa per il progetto finale. Ora, uno dei modi migliori che si può ottenere ulteriori informazioni su questo è francamente solo attraverso Apple fornito una documentazione per Swift. C'è un sacco di API che sono disponibili. E questa è una buona base di partenza per voi cercare, cose specifiche che si vogliono fare con un API che coinvolge iOS. Se si desidera utilizzare la fotocamera per esempio, è possibile iniziare a cercare qui, e anche l'uso di Google e Pila Overflow come si farebbe normalmente. Tutte le domande su questo prima di saltare in pieno? Tutto ok. Andiamo avanti. Quindi, prima, ho un numero di file di esempio. E ho intenzione di provare a fare un passo attraverso di loro in tempi relativamente brevi. Questo è il file Ciao Mondiale per Swift. E 'molto semplice. Non c'è modo più commenti che ci sono codice vero e proprio. Si noti il ​​codice attuale è a il fondo sulla linea 14. Dice di stampa. E poi è una chiamata di funzione. Stiamo passando in un stringa chiamato Ciao CS50. Si noti che non ci sono punti e virgola. Si noti che non c'è principale int. C'è nessuno dei cruff che abbiamo avuto con C. Quando stiamo usando Swift in questo modo, che è appena scritto in un file di testo e memorizzati sul mio computer, quindi Posso compilarlo ed eseguirlo. Si noti che qui io sono non usare l'IDE CS50. Ciò presuppone che io sono in esecuzione e che sono su OS X, e che ho già installato Xcode su questa macchina in modo che questo in realtà la funzione. Ma questo è solo un normale file di testo che possiamo quindi compilare e modificare. Quindi cerchiamo di vedere come funziona realmente. Che cosa devo fare per compilarlo? 1.Swift swiftc. Dopo un momento o due, vedrà che abbiamo ora compilato questo in un file chiamato 1. E ora abbiamo stampato il nostro CS50, la nostra applicazione Ciao mondo piuttosto. Notate un'altra cosa come bene è che di default, Non abbiamo dovuto all'ingresso a / n per stampare una nuova riga. Per impostazione predefinita, la funzione di stampa in Swift stamperà una nuova linea per voi. È possibile passare un ulteriore optional parametro per dire che non farlo. Ma Google per ulteriori informazioni su questo. Per impostazione predefinita, lo farà la linea di stampa. Va bene, quindi cerchiamo di andare avanti poi ad alcune altre cose. Quindi, come possiamo davvero definire variabili? Possiamo farlo sta usando uno dei due metodi. E quello che voglio dirti su prima è questa definizione let. E questo è importante perché effettivamente quello che stiamo facendo è la definizione di una costante. Stiamo per creare una variabile, o meglio una chiamata nome costante, fornire ad essa alcuni data-- in questo caso, la stringa Dan. Ma usando questo let parola chiave, stiamo dicendo che questo variable-- o ancora constant-- chiamato nome non è mai sta per essere cambiato. Sta andando essere immutabile per tutto la durata del programma o per tutta la durata del contesto che tale variabile è disponibile. Questo è molto importante che quando avete alcuni dati che non è cambierà nel vostro programma, e vedrete una varietà di esempi su quando vogliamo usare lasciare rispetto all'altro sintassi, è importante che si utilizza lascia ove possibile, perché questa Notifica la lingua che è non andare a modificare, e può effettivamente svolgere un sacco di ottimizzazioni per migliorare la velocità e la sicurezza del vostro programma. E per la sicurezza, io non intendo lascio è scontro con errori pazzeschi che potremmo essere abituato a vedere in C. Poi possiamo usare l'interpolazione corda per incapsulare questo all'interno di una stringa. Così possiamo vedere in questo linea di stampa, stampare ciao, e quindi utilizzando backslash parentesi aperte, e poi il nome della mia variabile, in questo caso costante, chiudere le parentesi. Sono essenzialmente poi mettere il contenuti di questo nome variabile chiamata all'interno della stringa e poi stampa del risultato lì. C'è un altro cambiamento a questo file che è che ho, al top, mettere in una shebang, che fondamentalmente specifica solo che voglio usare il Interprete Swift, che vuol dire che non ho più a compilare questo particolare programma. Posso solo correre come una propria scrittura. Ma questa è, in questo caso, dietro le scene fase di compilazione e quindi in esecuzione. E 'solo a noi invisibile. Va bene, quindi cerchiamo di andare avanti. Quindi c'è un po 'di inganno che appena successo prima. Vi ho mostrato che io potrebbe definire una costante. E potrei fornire alcuni dati per farlo. Ma in questo caso, accorgo che non ho in realtà specificare il tipo di dati è così. E questo perché la compilatore, Swift può dedurre il tipo di dati solo in base sui dati che ho messo in esso. Perché sa che, valutando questo variabile proprio qui, questo diritto di dati qui, si sa che è una stringa. E così questo nome costante è quindi sarà una stringa come pure. Ma possiamo anche essere espliciti circa il tipo che è ci accingiamo a utilizzare per la costanti o variabili utilizzando questa sintassi instead-- lasciate nome colon String uguale Dan, che in questo caso significa che siamo andando a definire un nome chiamato costante. Sta andando essere di tipo stringa. E il valore sarà Dan. Ora l'altro modo che possiamo creare variables-- e questi sono variabili mutabili, che significa che siamo, infatti, andando a cambiare il loro contenuto a volte nella durata del contesto che tale variabile è defined-- noi utilizzare la parola chiave var invece di lasciare. Ma ancora una volta, per impostazione predefinita, se non si sa che è necessario manipolare i dati, provare a utilizzare per lasciare miglioramenti delle prestazioni. In questo caso, posso poi specificare il tipo di dati che ci aspettiamo di essere all'interno di questa nuova variabile chiamata etichetta. Sta andando essere una stringa. E stiamo per poi concatenare due stringhe, la stringa ciao, e la stringa rappresentata dal variabile, o meglio il nome della costante. Quindi questo è bello perché questo è un po 'come in PHP che abbiamo hanno molto semplice concatenazione di stringhe. Non abbiamo automaticamente utilizzare qualsiasi tipo di gestione della memoria per aumentare la dimensione e fare ogni sorta di cose divertenti lì. Questo funziona come ci si aspetterebbe in realtà. D'accordo, tutte le domande su questo? Ora l'altro motivo che abbiamo bisogno di avere la possibilità per poter definire tipo di variabili di dati sono è perché a volte non lo facciamo vuole inizializzare le variabili con alcuni dati al punto di definizione. Quindi, in questo caso, diciamo che voglio iniziare inserendo alcuni gradi in un libro di grado. So bene che uno dei variabili che voglio essere sta per essere un grado mutevole. E sappiamo anche che ci vuole che sia un numero intero. Ma forse non siamo ancora avere quella qualità disponibile. In Swift, si deve definire il tipo di dati che è associato con un variabile o una delusione costante prima di poter effettivamente utilizzare tale variabile. Perché è fortemente tipizzato, si deve associare un tipo di con queste variabili. Quindi, in questo caso, se non ho correttamente inizializzato il primo con un certo valore, poi ho bisogno di raccontare quello che Swift Mi aspetto che il tipo di dati di essere. E sta andando a rimanere lo stesso tipo di dati tutta la storia di questo programma. Ora si potrebbe essere tentati più presto Ho creato questa variabile grado ea condizione che un intero di 100, se ora vuole provare per concatenare una stringa che con intero, potrebbe essere tentati di usare ancora tale operatore concatenazione di stringhe come abbiamo fatto poche righe prima. Ma sfortunatamente, questo in realtà non lo farà lavorare, perché tu sei essenzialmente l'esecuzione un'operazione su due tipi diversi. Ora questo è molto diverso da altri linguaggi come PHP che sono davvero goosey loosey con il loro tipo di tipi. Sono proprio come, sì, qualsiasi altra cosa, non mi interessa. Dammi solo un tipo, e forse farò la cosa giusta. In questo caso, Swift è estremamente rigorosi sui tipi che si sta trattando. Questo operatore sommatoria o operatore di concatenazione ha essenzialmente una coppia di diverse opzioni possibili. Si può fare sommatoria con numeri interi, oppure si può fare concatenazione di stringhe, e forse alcune altre cose. Ma se tale operatore non riconosce ciò è su entrambi i lati di esso, ovvero la combinazione di questi due tipi, non è quello che si aspetta, poi sta andando a causare un guasto. Quindi, in questo caso, che cosa vuol dire avere una stringa più un intero? Ebbene nel contesto questo, probabilmente vogliamo di eseguire un'operazione di concatenazione di stringhe. Ma naturalmente computer non ha quel tipo di contesto. E così abbiamo bisogno di fornire che ulteriori informazioni per fargli sapere che cosa è che noi vogliamo fare. In altre parole, il fatto che Swift è fortemente tipizzato significa che devi fare un po 'di lavoro in più per farlo funzionare la modo che si vorrebbe. Ma come risultato, è più sicuro. E una volta che hai prendere in considerazione quei tipi, le cose cominciano francamente funzionare abbastanza bene. Quindi, in questo caso, abbiamo poi sarebbe eseguire concatenazione di stringhe lanciando esplicitamente il numero intero in una stringa avvolgendolo in questo capitale funzione S String, e quindi utilizzando la concatenazione di stringhe all'operatore di modificare la nostra variabile etichetta, e poi stamparlo. Fin qui tutto bene? Va bene, andiamo avanti. Ora ci sono una varietà di dati tipi che possiamo usare a Swift. Come avete abituati, siamo in grado di creare un array mutevole. E tale matrice solo è possibile contenere un solo tipo. Quindi, in questo caso, stiamo andando a creare un mutevoli array di interi, che noi chiamiamo gradi, e saremo in grado per memorizzare che in questa fascia di piazza formato sei cresciuto abituati a in una varietà di altre lingue. Ma notiamo che qui siamo la definizione di un paio di cose. gradi è un variable-- mutabile Non usiamo la parola chiave let. In modo che significa che possiamo quindi modificare il contenuto di questa matrice. E 'di tipo Array Int, e possiamo dire che sulla base di queste parentesi quadre qui. Ora, una delle cose belle su questo è che ci avere accesso ad un sacco di Informazioni aggiuntive circa l'array usando solo qualche semplice notazione del punto. Così, per esempio, grades.count fornisce a noi il numero di elementi che esistono in quel array, che possiamo poi accedere abbastanza facilmente semplicemente utilizzando tale notazione punto. Se si desidera aggiungere ulteriori elementi a questa matrice, non si può fare lo stile di PHP dove basta definire in modo esplicito, in un determinato indice, qualche valore che si desidera inserire. Utilizzare invece il append metodo nel tipo array per aggiungere tale voce, 95, a questa lista. Così ora questo array ha il seguente contents-- 100, 0, 90, 85. E ora abbiamo allegati 95 a quello. Ci sono altri modi siamo in grado di aggiungere le cose. Si può effettivamente utilizzare un operatore di sommatoria, che sarà interpretata come un'operazione di matrice accodamento. E si può quindi aggiungere un altro matrice, i cui contenuti sono 70 e 80, di tale matrice. Così ora abbiamo la contenuti in questa variabile grades-- 100, 0, 90, 85, 95, 70, e 80. Questo è solo un bel po 'sintattica zucchero che Swift offre a noi. Quindi, se vogliamo sommare il gradi, siamo forse andando a voler iterare su ogni elemento in questo ciclo. E noi abbiamo, a Swift, l'idea di un ciclo for come ci si aspetterebbe. Ma il modo che indichiamo una gamma è leggermente diverso. Quindi, in questo caso, per Insomma tutto, ce la faremo andando a creare una temporanea chiamato somma variabile in modo per noi per mantenere questo conteggio. E notare la nostra per costruzione in bouclè qui. Per l'indice a 0 ..