1 00:00:00,000 --> 00:00:03,332 >> [RIPRODUZIONE DI BRANI MUSICALI] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DAN AMRMENDARIZ: Tutti, benvenuti al seminario CS50, 4 00:00:09,590 --> 00:00:11,690 iOS App per lo sviluppo di Swift. 5 00:00:11,690 --> 00:00:15,690 Sono Dan Armendariz, e io sono un maestro di informatica qui a Harvard. 6 00:00:15,690 --> 00:00:21,510 >> E la prossima ora sarà un tour di più oggetti 7 00:00:21,510 --> 00:00:25,160 su questo argomento, come possiamo andare bene. 8 00:00:25,160 --> 00:00:29,170 Io posto tutto il codice sorgente di che vedrete oggi on-line. 9 00:00:29,170 --> 00:00:31,990 Potremmo non essere in grado di effettivamente andare su tutto 10 00:00:31,990 --> 00:00:34,810 che sono che sono mostrando in questo momento. 11 00:00:34,810 --> 00:00:37,580 Ma almeno si spera attraverso i commenti del codice sorgente, 12 00:00:37,580 --> 00:00:40,830 sarete in grado di cercare di capire che cosa sta succedendo esattamente per queste cose 13 00:00:40,830 --> 00:00:42,950 che non abbiamo abbastanza raggiungere. 14 00:00:42,950 --> 00:00:46,970 >> In generale, la struttura di il discorso di oggi sarà il seguente. 15 00:00:46,970 --> 00:00:52,820 Inizieremo fuori facendo un po 'di base sintassi con la lingua Swift, 16 00:00:52,820 --> 00:00:56,290 entrare in alcune delle più avanzate sintassi del linguaggio Swift. 17 00:00:56,290 --> 00:00:59,560 Perché la lingua è davvero moderno e 18 00:00:59,560 --> 00:01:02,110 ha un sacco di alto livello caratteristiche, cose che non abbiamo 19 00:01:02,110 --> 00:01:06,600 visto in C tutto CS50, o anche alcune altre lingue 20 00:01:06,600 --> 00:01:09,310 che abbiamo iniziato utilizzando in CS50 come PHP, 21 00:01:09,310 --> 00:01:12,670 così ho intenzione di avere a cercare di introdurre anche alcuni argomenti che 22 00:01:12,670 --> 00:01:18,580 sono legati a linguaggi di livello superiore che non si può vedere in modo approfondito nel CS50, 23 00:01:18,580 --> 00:01:21,380 ma si vedrà più tardi corsi di informatica. 24 00:01:21,380 --> 00:01:25,290 Quindi sarà un fitto ora. 25 00:01:25,290 --> 00:01:28,897 E non esitate a lasciarmi sapere se avete domande. 26 00:01:28,897 --> 00:01:30,730 Quindi, se siete interessati a fare lo sviluppo 27 00:01:30,730 --> 00:01:34,442 con Swift, o realmente qualsiasi sviluppo iOS app, 28 00:01:34,442 --> 00:01:35,900 ci sono un paio di requisiti. 29 00:01:35,900 --> 00:01:39,940 Prima di tutto, si deve essere con un Mac, in esecuzione negli esempi 30 00:01:39,940 --> 00:01:43,880 che ci accingiamo a utilizzare oggi, una relativamente nuova versione di OS 31 00:01:43,880 --> 00:01:46,580 X. In questo caso, sto correndo X 10.5. 32 00:01:46,580 --> 00:01:48,600 È possibile eseguire 10.11 se si vuole. 33 00:01:48,600 --> 00:01:52,430 Ma tutto ciò che si sta andando a vedere sta coinvolgendo Xcode 7 e versioni successive, 34 00:01:52,430 --> 00:01:56,271 che ha l'ultima versione di Swift, che è Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Questo è in realtà una bella distinzione importante. 36 00:01:58,270 --> 00:02:01,510 Un sacco di sintassi ha cambiata abbastanza significativamente 37 00:02:01,510 --> 00:02:05,890 in alcuni casi da Swift 1.0, che è stato rilasciato lo scorso anno, 38 00:02:05,890 --> 00:02:08,514 a Swift 2.0, che appena uscito questo autunno. 39 00:02:08,514 --> 00:02:09,889 Così stiamo andando a mostrare Swift 2.0. 40 00:02:09,889 --> 00:02:13,020 Un sacco di cose che si cerca on-line 41 00:02:13,020 --> 00:02:18,040 quando si sta cercando di ottenere ulteriori informazioni su una varietà di cose, 42 00:02:18,040 --> 00:02:20,710 si potrebbe voler esplicitamente cercare Swift 2 43 00:02:20,710 --> 00:02:24,950 piuttosto che semplicemente vecchio Swift fare assicurarsi che si ottiene la sintassi corretta. 44 00:02:24,950 --> 00:02:26,920 >> In realtà, questo è generalmente vero. 45 00:02:26,920 --> 00:02:31,210 C'è un rapido quantità di sviluppo accade nella lingua Swift 46 00:02:31,210 --> 00:02:35,110 da quando Apple ha rilasciato, credo che cosa, è stato un po 'più di un anno 47 00:02:35,110 --> 00:02:36,370 adesso. 48 00:02:36,370 --> 00:02:39,080 E le cose sono cambiate drammaticamente in quel momento. 49 00:02:39,080 --> 00:02:42,160 E quindi non essere frustrato se, quando si sta guardando in giro 50 00:02:42,160 --> 00:02:48,310 per argomenti su Swift o di come realizzare qualcosa usando qualche esempio di codice 51 00:02:48,310 --> 00:02:51,210 o qualcosa che non fa effettivamente lavorare su Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Assicurarsi che si sta cercando in particolare per quella versione 53 00:02:53,790 --> 00:02:58,690 per cercare di ridurre al minimo gli effetti di diverso le versioni e questo genere di cose. 54 00:02:58,690 --> 00:03:02,470 >> Cercherò di indicare solo alcune cose che sono diverse per le versioni precedenti. 55 00:03:02,470 --> 00:03:03,970 Ma è qualcosa a cui prestare attenzione. 56 00:03:03,970 --> 00:03:06,770 Questo è probabilmente sarà uno dei più grandi mal di testa 57 00:03:06,770 --> 00:03:11,010 che si avrà con Swift è la ricerca esempio di codice che è più vecchio, anche solo 58 00:03:11,010 --> 00:03:14,050 da alcuni mesi, cercando di utilizzare nel vostro progetto più moderno. 59 00:03:14,050 --> 00:03:15,430 E semplicemente non funziona. 60 00:03:15,430 --> 00:03:18,530 Stai diventando errori di compilazione, la sintassi errori, ogni sorta di cose folli. 61 00:03:18,530 --> 00:03:21,580 Quindi, solo essere paziente con che, e si spera 62 00:03:21,580 --> 00:03:24,200 avere una bella bella esperienza con generale Swift. 63 00:03:24,200 --> 00:03:28,430 >> Ora si può effettivamente join-- e spero in realtà abbiamo ancora questo anno di successo questo 64 00:03:28,430 --> 00:03:30,910 Di CS 50 Apple App team di sviluppo, che 65 00:03:30,910 --> 00:03:34,680 vi permetterà di installare qualsiasi applicazione che si creano sui vostri dispositivi iOS. 66 00:03:34,680 --> 00:03:39,190 Quindi dare un'occhiata a questo URL se siete interessati a farlo. 67 00:03:39,190 --> 00:03:41,450 >> Quindi, solo un paio di cose su Swift stesso. 68 00:03:41,450 --> 00:03:43,580 È un linguaggio compilato. 69 00:03:43,580 --> 00:03:45,870 Ma vedrete che alcuni delle caratteristiche che usiamo 70 00:03:45,870 --> 00:03:50,650 consentono di essere utilizzato anche in un po ' interpretato come un modo pure. 71 00:03:50,650 --> 00:03:56,350 >> Un sacco di sintassi è preso in prestito da C. Si basa e scritto in C. 72 00:03:56,350 --> 00:04:00,400 E così vedremo che ci sono un sacco di take away 73 00:04:00,400 --> 00:04:04,450 dalla vostra conoscenza esistente da C che possiamo porto di Swift. 74 00:04:04,450 --> 00:04:07,290 >> Ma ci sono cose che lo rendono molto diverso da C. 75 00:04:07,290 --> 00:04:08,860 E 'molto fortemente tipizzato. 76 00:04:08,860 --> 00:04:10,380 C'è gestione automatica della memoria. 77 00:04:10,380 --> 00:04:13,170 Tu non stai andando ad avere per utilizzare malloc o dovunque gratuito. 78 00:04:13,170 --> 00:04:15,110 È progettato per la generalità. 79 00:04:15,110 --> 00:04:19,480 Quindi, in altre parole, è possibile utilizzarlo in tutti i tipi di contesti, da Apple Osservare 80 00:04:19,480 --> 00:04:26,290 per iPhone tutta la strada fino a OS X, e persino alcuni server, anche alcuni script. 81 00:04:26,290 --> 00:04:28,400 Ma vedremo che il supporto per lo scripting 82 00:04:28,400 --> 00:04:31,360 non c'era ancora come è in altre lingue. 83 00:04:31,360 --> 00:04:34,930 Quindi molto probabilmente sarete utilizzando questo esclusivamente per lo sviluppo 84 00:04:34,930 --> 00:04:37,060 sul vostro Mac o il vostro iPhone. 85 00:04:37,060 --> 00:04:40,150 >> E ha un sacco di funzioni moderne. 86 00:04:40,150 --> 00:04:43,380 E molte di queste cose sono cose che stiamo andando a cercare di affrontare oggi, 87 00:04:43,380 --> 00:04:47,590 ma anche i nostri argomenti che francamente, siamo in grado di dedicare interi corsi. 88 00:04:47,590 --> 00:04:50,140 Infatti, CS 51, che è offerto semestre successivo, 89 00:04:50,140 --> 00:04:53,990 si concentra molto su questi argomenti che sono descritte di seguito. 90 00:04:53,990 --> 00:04:56,781 Così si può trascorrere un intero semestre capire queste cose. 91 00:04:56,781 --> 00:04:58,530 Ma stiamo andando a provare per ottenere attraverso di loro 92 00:04:58,530 --> 00:05:00,800 almeno abbastanza che può capire che cosa è 93 00:05:00,800 --> 00:05:03,700 succede quando si guarda in un programma di Swift 94 00:05:03,700 --> 00:05:07,310 ed essere in grado di incidere il vostro modo attraverso di essa per il progetto finale. 95 00:05:07,310 --> 00:05:10,780 >> Ora, uno dei modi migliori che si può ottenere ulteriori informazioni su questo 96 00:05:10,780 --> 00:05:14,700 è francamente solo attraverso Apple fornito una documentazione per Swift. 97 00:05:14,700 --> 00:05:16,930 C'è un sacco di API che sono disponibili. 98 00:05:16,930 --> 00:05:21,170 E questa è una buona base di partenza per voi cercare, cose specifiche che si 99 00:05:21,170 --> 00:05:23,020 vogliono fare con un API che coinvolge iOS. 100 00:05:23,020 --> 00:05:26,350 Se si desidera utilizzare la fotocamera per esempio, è possibile iniziare a cercare qui, 101 00:05:26,350 --> 00:05:32,540 e anche l'uso di Google e Pila Overflow come si farebbe normalmente. 102 00:05:32,540 --> 00:05:36,670 >> Tutte le domande su questo prima di saltare in pieno? 103 00:05:36,670 --> 00:05:37,880 Tutto ok. 104 00:05:37,880 --> 00:05:38,700 Andiamo avanti. 105 00:05:38,700 --> 00:05:42,620 >> Quindi, prima, ho un numero di file di esempio. 106 00:05:42,620 --> 00:05:46,040 E ho intenzione di provare a fare un passo attraverso di loro in tempi relativamente brevi. 107 00:05:46,040 --> 00:05:49,190 Questo è il file Ciao Mondiale per Swift. 108 00:05:49,190 --> 00:05:51,050 E 'molto semplice. 109 00:05:51,050 --> 00:05:54,360 Non c'è modo più commenti che ci sono codice vero e proprio. 110 00:05:54,360 --> 00:05:57,100 Si noti il ​​codice attuale è a il fondo sulla linea 14. 111 00:05:57,100 --> 00:05:57,980 Dice di stampa. 112 00:05:57,980 --> 00:05:59,820 E poi è una chiamata di funzione. 113 00:05:59,820 --> 00:06:03,010 Stiamo passando in un stringa chiamato Ciao CS50. 114 00:06:03,010 --> 00:06:04,750 Si noti che non ci sono punti e virgola. 115 00:06:04,750 --> 00:06:07,010 Si noti che non c'è principale int. 116 00:06:07,010 --> 00:06:10,392 C'è nessuno dei cruff che abbiamo avuto con C. 117 00:06:10,392 --> 00:06:15,020 Quando stiamo usando Swift in questo modo, che è appena scritto in un file di testo 118 00:06:15,020 --> 00:06:18,340 e memorizzati sul mio computer, quindi Posso compilarlo ed eseguirlo. 119 00:06:18,340 --> 00:06:20,920 >> Si noti che qui io sono non usare l'IDE CS50. 120 00:06:20,920 --> 00:06:24,460 Ciò presuppone che io sono in esecuzione e che sono su OS X, 121 00:06:24,460 --> 00:06:27,870 e che ho già installato Xcode su questa macchina in modo che questo 122 00:06:27,870 --> 00:06:29,080 in realtà la funzione. 123 00:06:29,080 --> 00:06:33,349 Ma questo è solo un normale file di testo che possiamo quindi compilare e modificare. 124 00:06:33,349 --> 00:06:34,890 Quindi cerchiamo di vedere come funziona realmente. 125 00:06:34,890 --> 00:06:37,430 Che cosa devo fare per compilarlo? 126 00:06:37,430 --> 00:06:40,450 1.Swift swiftc. 127 00:06:40,450 --> 00:06:42,960 Dopo un momento o due, vedrà che abbiamo ora 128 00:06:42,960 --> 00:06:45,360 compilato questo in un file chiamato 1. 129 00:06:45,360 --> 00:06:51,090 E ora abbiamo stampato il nostro CS50, la nostra applicazione Ciao mondo piuttosto. 130 00:06:51,090 --> 00:06:54,690 >> Notate un'altra cosa come bene è che di default, 131 00:06:54,690 --> 00:07:00,090 Non abbiamo dovuto all'ingresso a / n per stampare una nuova riga. 132 00:07:00,090 --> 00:07:05,315 Per impostazione predefinita, la funzione di stampa in Swift stamperà una nuova linea per voi. 133 00:07:05,315 --> 00:07:09,284 È possibile passare un ulteriore optional parametro per dire che non farlo. 134 00:07:09,284 --> 00:07:10,950 Ma Google per ulteriori informazioni su questo. 135 00:07:10,950 --> 00:07:13,450 Per impostazione predefinita, lo farà la linea di stampa. 136 00:07:13,450 --> 00:07:16,420 >> Va bene, quindi cerchiamo di andare avanti poi ad alcune altre cose. 137 00:07:16,420 --> 00:07:18,620 Quindi, come possiamo davvero definire variabili? 138 00:07:18,620 --> 00:07:21,960 Possiamo farlo sta usando uno dei due metodi. 139 00:07:21,960 --> 00:07:26,122 E quello che voglio dirti su prima è questa definizione let. 140 00:07:26,122 --> 00:07:27,830 E questo è importante perché effettivamente 141 00:07:27,830 --> 00:07:30,240 quello che stiamo facendo è la definizione di una costante. 142 00:07:30,240 --> 00:07:34,010 Stiamo per creare una variabile, o meglio una chiamata nome costante, 143 00:07:34,010 --> 00:07:38,200 fornire ad essa alcuni data-- in questo caso, la stringa Dan. 144 00:07:38,200 --> 00:07:40,630 Ma usando questo let parola chiave, stiamo dicendo 145 00:07:40,630 --> 00:07:43,860 che questo variable-- o ancora constant-- chiamato 146 00:07:43,860 --> 00:07:46,220 nome non è mai sta per essere cambiato. 147 00:07:46,220 --> 00:07:50,120 Sta andando essere immutabile per tutto la durata del programma 148 00:07:50,120 --> 00:07:53,100 o per tutta la durata del contesto 149 00:07:53,100 --> 00:07:55,390 che tale variabile è disponibile. 150 00:07:55,390 --> 00:08:00,096 >> Questo è molto importante che quando avete alcuni dati che non è 151 00:08:00,096 --> 00:08:02,970 cambierà nel vostro programma, e vedrete una varietà di esempi 152 00:08:02,970 --> 00:08:06,790 su quando vogliamo usare lasciare rispetto all'altro sintassi, 153 00:08:06,790 --> 00:08:11,040 è importante che si utilizza lascia ove possibile, perché questa Notifica 154 00:08:11,040 --> 00:08:13,740 la lingua che è non andare a modificare, 155 00:08:13,740 --> 00:08:16,590 e può effettivamente svolgere un sacco di ottimizzazioni 156 00:08:16,590 --> 00:08:19,560 per migliorare la velocità e la sicurezza del vostro programma. 157 00:08:19,560 --> 00:08:24,480 E per la sicurezza, io non intendo lascio è scontro con errori pazzeschi 158 00:08:24,480 --> 00:08:27,910 che potremmo essere abituato a vedere in C. 159 00:08:27,910 --> 00:08:32,460 >> Poi possiamo usare l'interpolazione corda per incapsulare questo all'interno di una stringa. 160 00:08:32,460 --> 00:08:35,200 Così possiamo vedere in questo linea di stampa, stampare ciao, 161 00:08:35,200 --> 00:08:38,950 e quindi utilizzando backslash parentesi aperte, e poi il nome della mia variabile, 162 00:08:38,950 --> 00:08:41,809 in questo caso costante, chiudere le parentesi. 163 00:08:41,809 --> 00:08:46,400 Sono essenzialmente poi mettere il contenuti di questo nome variabile chiamata 164 00:08:46,400 --> 00:08:50,240 all'interno della stringa e poi stampa del risultato lì. 165 00:08:50,240 --> 00:08:54,070 >> C'è un altro cambiamento a questo file che è che ho, al top, 166 00:08:54,070 --> 00:08:57,340 mettere in una shebang, che fondamentalmente specifica solo 167 00:08:57,340 --> 00:09:00,180 che voglio usare il Interprete Swift, che 168 00:09:00,180 --> 00:09:04,190 vuol dire che non ho più a compilare questo particolare programma. 169 00:09:04,190 --> 00:09:06,567 Posso solo correre come una propria scrittura. 170 00:09:06,567 --> 00:09:09,400 Ma questa è, in questo caso, dietro le scene fase di compilazione e quindi 171 00:09:09,400 --> 00:09:10,030 in esecuzione. 172 00:09:10,030 --> 00:09:13,540 E 'solo a noi invisibile. 173 00:09:13,540 --> 00:09:15,880 >> Va bene, quindi cerchiamo di andare avanti. 174 00:09:15,880 --> 00:09:19,650 Quindi c'è un po 'di inganno che appena successo prima. 175 00:09:19,650 --> 00:09:23,230 Vi ho mostrato che io potrebbe definire una costante. 176 00:09:23,230 --> 00:09:25,490 E potrei fornire alcuni dati per farlo. 177 00:09:25,490 --> 00:09:29,240 Ma in questo caso, accorgo che non ho in realtà specificare il tipo di dati 178 00:09:29,240 --> 00:09:29,820 è così. 179 00:09:29,820 --> 00:09:32,780 E questo perché la compilatore, Swift può 180 00:09:32,780 --> 00:09:36,910 dedurre il tipo di dati solo in base sui dati che ho messo in esso. 181 00:09:36,910 --> 00:09:41,760 Perché sa che, valutando questo variabile proprio qui, questo diritto di dati 182 00:09:41,760 --> 00:09:43,370 qui, si sa che è una stringa. 183 00:09:43,370 --> 00:09:48,690 E così questo nome costante è quindi sarà una stringa come pure. 184 00:09:48,690 --> 00:09:52,730 >> Ma possiamo anche essere espliciti circa il tipo che è 185 00:09:52,730 --> 00:09:55,790 ci accingiamo a utilizzare per la costanti o variabili 186 00:09:55,790 --> 00:10:01,590 utilizzando questa sintassi instead-- lasciate nome colon String uguale 187 00:10:01,590 --> 00:10:05,530 Dan, che in questo caso significa che siamo andando a definire un nome chiamato costante. 188 00:10:05,530 --> 00:10:07,150 Sta andando essere di tipo stringa. 189 00:10:07,150 --> 00:10:10,550 E il valore sarà Dan. 190 00:10:10,550 --> 00:10:12,550 Ora l'altro modo che possiamo creare variables-- 191 00:10:12,550 --> 00:10:15,549 e questi sono variabili mutabili, che significa che siamo, infatti, andando 192 00:10:15,549 --> 00:10:19,670 a cambiare il loro contenuto a volte nella durata del contesto 193 00:10:19,670 --> 00:10:23,890 che tale variabile è defined-- noi utilizzare la parola chiave var invece di lasciare. 194 00:10:23,890 --> 00:10:27,400 Ma ancora una volta, per impostazione predefinita, se non si sa che è necessario manipolare i dati, 195 00:10:27,400 --> 00:10:30,510 provare a utilizzare per lasciare miglioramenti delle prestazioni. 196 00:10:30,510 --> 00:10:33,740 >> In questo caso, posso poi specificare il tipo di dati 197 00:10:33,740 --> 00:10:37,650 che ci aspettiamo di essere all'interno di questa nuova variabile chiamata etichetta. 198 00:10:37,650 --> 00:10:38,800 Sta andando essere una stringa. 199 00:10:38,800 --> 00:10:43,030 E stiamo per poi concatenare due stringhe, la stringa ciao, 200 00:10:43,030 --> 00:10:48,070 e la stringa rappresentata dal variabile, o meglio il nome della costante. 201 00:10:48,070 --> 00:10:50,660 >> Quindi questo è bello perché questo è un po 'come in PHP che abbiamo 202 00:10:50,660 --> 00:10:52,250 hanno molto semplice concatenazione di stringhe. 203 00:10:52,250 --> 00:10:56,350 Non abbiamo automaticamente utilizzare qualsiasi tipo di gestione della memoria 204 00:10:56,350 --> 00:11:00,580 per aumentare la dimensione e fare ogni sorta di cose divertenti lì. 205 00:11:00,580 --> 00:11:05,040 Questo funziona come ci si aspetterebbe in realtà. 206 00:11:05,040 --> 00:11:09,370 >> D'accordo, tutte le domande su questo? 207 00:11:09,370 --> 00:11:12,520 >> Ora l'altro motivo che abbiamo bisogno di avere la possibilità 208 00:11:12,520 --> 00:11:15,490 per poter definire tipo di variabili di dati sono 209 00:11:15,490 --> 00:11:18,170 è perché a volte non lo facciamo vuole inizializzare le variabili 210 00:11:18,170 --> 00:11:21,080 con alcuni dati al punto di definizione. 211 00:11:21,080 --> 00:11:23,500 Quindi, in questo caso, diciamo che voglio iniziare inserendo 212 00:11:23,500 --> 00:11:25,040 alcuni gradi in un libro di grado. 213 00:11:25,040 --> 00:11:27,530 So bene che uno dei variabili che voglio essere 214 00:11:27,530 --> 00:11:30,280 sta per essere un grado mutevole. 215 00:11:30,280 --> 00:11:33,010 E sappiamo anche che ci vuole che sia un numero intero. 216 00:11:33,010 --> 00:11:36,030 Ma forse non siamo ancora avere quella qualità disponibile. 217 00:11:36,030 --> 00:11:39,570 >> In Swift, si deve definire il tipo di dati 218 00:11:39,570 --> 00:11:44,000 che è associato con un variabile o una delusione costante 219 00:11:44,000 --> 00:11:47,840 prima di poter effettivamente utilizzare tale variabile. 220 00:11:47,840 --> 00:11:51,170 Perché è fortemente tipizzato, si deve associare un tipo di 221 00:11:51,170 --> 00:11:52,890 con queste variabili. 222 00:11:52,890 --> 00:11:56,120 >> Quindi, in questo caso, se non ho correttamente inizializzato il primo con un certo valore, 223 00:11:56,120 --> 00:12:00,520 poi ho bisogno di raccontare quello che Swift Mi aspetto che il tipo di dati di essere. 224 00:12:00,520 --> 00:12:02,650 E sta andando a rimanere lo stesso tipo di dati 225 00:12:02,650 --> 00:12:05,780 tutta la storia di questo programma. 226 00:12:05,780 --> 00:12:10,050 >> Ora si potrebbe essere tentati più presto Ho creato questa variabile grado 227 00:12:10,050 --> 00:12:13,530 ea condizione che un intero di 100, se ora 228 00:12:13,530 --> 00:12:18,540 vuole provare per concatenare una stringa che con intero, 229 00:12:18,540 --> 00:12:21,610 potrebbe essere tentati di usare ancora tale operatore concatenazione di stringhe 230 00:12:21,610 --> 00:12:24,500 come abbiamo fatto poche righe prima. 231 00:12:24,500 --> 00:12:26,460 Ma sfortunatamente, questo in realtà non lo farà 232 00:12:26,460 --> 00:12:29,270 lavorare, perché tu sei essenzialmente l'esecuzione 233 00:12:29,270 --> 00:12:32,380 un'operazione su due tipi diversi. 234 00:12:32,380 --> 00:12:36,856 >> Ora questo è molto diverso da altri linguaggi come PHP che sono davvero 235 00:12:36,856 --> 00:12:38,480 goosey loosey con il loro tipo di tipi. 236 00:12:38,480 --> 00:12:40,030 Sono proprio come, sì, qualsiasi altra cosa, non mi interessa. 237 00:12:40,030 --> 00:12:42,710 Dammi solo un tipo, e forse farò la cosa giusta. 238 00:12:42,710 --> 00:12:46,060 >> In questo caso, Swift è estremamente rigorosi sui tipi 239 00:12:46,060 --> 00:12:47,350 che si sta trattando. 240 00:12:47,350 --> 00:12:50,700 Questo operatore sommatoria o operatore di concatenazione 241 00:12:50,700 --> 00:12:54,400 ha essenzialmente una coppia di diverse opzioni possibili. 242 00:12:54,400 --> 00:12:56,970 Si può fare sommatoria con numeri interi, oppure si 243 00:12:56,970 --> 00:13:00,870 può fare concatenazione di stringhe, e forse alcune altre cose. 244 00:13:00,870 --> 00:13:05,550 Ma se tale operatore non riconosce ciò è su entrambi i lati di esso, 245 00:13:05,550 --> 00:13:10,452 ovvero la combinazione di questi due tipi, non è quello che si aspetta, 246 00:13:10,452 --> 00:13:11,910 poi sta andando a causare un guasto. 247 00:13:11,910 --> 00:13:16,690 >> Quindi, in questo caso, che cosa vuol dire avere una stringa più un intero? 248 00:13:16,690 --> 00:13:18,880 Ebbene nel contesto questo, probabilmente vogliamo 249 00:13:18,880 --> 00:13:21,990 di eseguire un'operazione di concatenazione di stringhe. 250 00:13:21,990 --> 00:13:26,420 Ma naturalmente computer non ha quel tipo di contesto. 251 00:13:26,420 --> 00:13:29,950 E così abbiamo bisogno di fornire che ulteriori informazioni 252 00:13:29,950 --> 00:13:32,390 per fargli sapere che cosa è che noi vogliamo fare. 253 00:13:32,390 --> 00:13:36,860 >> In altre parole, il fatto che Swift è fortemente tipizzato 254 00:13:36,860 --> 00:13:39,520 significa che devi fare un po 'di lavoro in più 255 00:13:39,520 --> 00:13:42,100 per farlo funzionare la modo che si vorrebbe. 256 00:13:42,100 --> 00:13:43,710 Ma come risultato, è più sicuro. 257 00:13:43,710 --> 00:13:46,290 E una volta che hai prendere in considerazione quei tipi, 258 00:13:46,290 --> 00:13:49,300 le cose cominciano francamente funzionare abbastanza bene. 259 00:13:49,300 --> 00:13:52,520 >> Quindi, in questo caso, abbiamo poi sarebbe eseguire concatenazione di stringhe 260 00:13:52,520 --> 00:13:56,040 lanciando esplicitamente il numero intero in una stringa 261 00:13:56,040 --> 00:13:58,490 avvolgendolo in questo capitale funzione S String, 262 00:13:58,490 --> 00:14:03,510 e quindi utilizzando la concatenazione di stringhe all'operatore di modificare la nostra variabile etichetta, 263 00:14:03,510 --> 00:14:06,280 e poi stamparlo. 264 00:14:06,280 --> 00:14:08,420 >> Fin qui tutto bene? 265 00:14:08,420 --> 00:14:12,020 Va bene, andiamo avanti. 266 00:14:12,020 --> 00:14:16,300 >> Ora ci sono una varietà di dati tipi che possiamo usare a Swift. 267 00:14:16,300 --> 00:14:21,620 Come avete abituati, siamo in grado di creare un array mutevole. 268 00:14:21,620 --> 00:14:26,140 E tale matrice solo è possibile contenere un solo tipo. 269 00:14:26,140 --> 00:14:30,360 >> Quindi, in questo caso, stiamo andando a creare un mutevoli array di interi, che 270 00:14:30,360 --> 00:14:34,800 noi chiamiamo gradi, e saremo in grado per memorizzare che in questa fascia di piazza 271 00:14:34,800 --> 00:14:38,650 formato sei cresciuto abituati a in una varietà di altre lingue. 272 00:14:38,650 --> 00:14:41,150 Ma notiamo che qui siamo la definizione di un paio di cose. 273 00:14:41,150 --> 00:14:45,350 gradi è un variable-- mutabile Non usiamo la parola chiave let. 274 00:14:45,350 --> 00:14:49,620 In modo che significa che possiamo quindi modificare il contenuto di questa matrice. 275 00:14:49,620 --> 00:14:53,420 E 'di tipo Array Int, e possiamo dire che 276 00:14:53,420 --> 00:14:56,260 sulla base di queste parentesi quadre qui. 277 00:14:56,260 --> 00:14:58,930 >> Ora, una delle cose belle su questo è che ci 278 00:14:58,930 --> 00:15:02,310 avere accesso ad un sacco di Informazioni aggiuntive 279 00:15:02,310 --> 00:15:07,110 circa l'array usando solo qualche semplice notazione del punto. 280 00:15:07,110 --> 00:15:10,500 Così, per esempio, grades.count fornisce a noi 281 00:15:10,500 --> 00:15:14,820 il numero di elementi che esistono in quel array, che possiamo poi accedere abbastanza 282 00:15:14,820 --> 00:15:19,090 facilmente semplicemente utilizzando tale notazione punto. 283 00:15:19,090 --> 00:15:21,830 >> Se si desidera aggiungere ulteriori elementi a questa matrice, 284 00:15:21,830 --> 00:15:27,220 non si può fare lo stile di PHP dove basta definire in modo esplicito, 285 00:15:27,220 --> 00:15:30,910 in un determinato indice, qualche valore che si desidera inserire. 286 00:15:30,910 --> 00:15:37,210 Utilizzare invece il append metodo nel tipo array 287 00:15:37,210 --> 00:15:40,920 per aggiungere tale voce, 95, a questa lista. 288 00:15:40,920 --> 00:15:45,990 >> Così ora questo array ha il seguente contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 E ora abbiamo allegati 95 a quello. 290 00:15:49,270 --> 00:15:51,830 >> Ci sono altri modi siamo in grado di aggiungere le cose. 291 00:15:51,830 --> 00:15:55,030 Si può effettivamente utilizzare un operatore di sommatoria, 292 00:15:55,030 --> 00:15:59,200 che sarà interpretata come un'operazione di matrice accodamento. 293 00:15:59,200 --> 00:16:04,680 E si può quindi aggiungere un altro matrice, i cui contenuti sono 70 e 80, 294 00:16:04,680 --> 00:16:05,560 di tale matrice. 295 00:16:05,560 --> 00:16:08,250 Così ora abbiamo la contenuti in questa variabile 296 00:16:08,250 --> 00:16:17,220 grades-- 100, 0, 90, 85, 95, 70, e 80. 297 00:16:17,220 --> 00:16:21,850 Questo è solo un bel po 'sintattica zucchero che Swift offre a noi. 298 00:16:21,850 --> 00:16:23,850 >> Quindi, se vogliamo sommare il gradi, siamo forse 299 00:16:23,850 --> 00:16:27,340 andando a voler iterare su ogni elemento in questo ciclo. 300 00:16:27,340 --> 00:16:32,150 E noi abbiamo, a Swift, l'idea di un ciclo for come ci si aspetterebbe. 301 00:16:32,150 --> 00:16:35,350 Ma il modo che indichiamo una gamma è leggermente diverso. 302 00:16:35,350 --> 00:16:37,790 Quindi, in questo caso, per Insomma tutto, ce la faremo 303 00:16:37,790 --> 00:16:40,650 andando a creare una temporanea chiamato somma variabile in modo per noi 304 00:16:40,650 --> 00:16:42,580 per mantenere questo conteggio. 305 00:16:42,580 --> 00:16:44,430 >> E notare la nostra per costruzione in bouclè qui. 306 00:16:44,430 --> 00:16:46,820 Per l'indice a 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Quindi questa costruzione, 0 .. 00:17:01,860 dicendo che stiamo per creare una serie di numeri interi da 0 fino 310 00:17:01,860 --> 00:17:05,750 ad e ad esclusione grades.count. 311 00:17:05,750 --> 00:17:09,577 Quindi questo sarà 0, 1, 2, 3, 4, 5, fino a quando però molti uno 312 00:17:09,577 --> 00:17:10,410 prima grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Quindi questo è diverso da come noi sarebbe tipicamente utilizzato per cicli 314 00:17:14,160 --> 00:17:18,569 dove si dovrebbe avere un po 'indice variabile, impostarlo a 0 all'inizio, 315 00:17:18,569 --> 00:17:25,480 e quindi integrare che fino a qualche valore inferiore al numero di elementi 316 00:17:25,480 --> 00:17:27,140 in tale matrice. 317 00:17:27,140 --> 00:17:29,820 >> Quindi vi è una modifica per questo, in realtà, 318 00:17:29,820 --> 00:17:35,010 che ci permette di molto facilmente impostare diversi tipi di intervallo. 319 00:17:35,010 --> 00:17:40,570 Se si cambia questa gamma per tre punti, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 questo rappresenta la gamma 0 a grades.count compreso, 321 00:17:45,120 --> 00:17:49,260 il che significa che quel numero è anche poi inclusi in tale intervallo. 322 00:17:49,260 --> 00:17:52,110 >> Ma questo è molto utile per queste cose esatte, 323 00:17:52,110 --> 00:17:54,590 quando dobbiamo eseguire iterazioni oltre cappio 324 00:17:54,590 --> 00:17:59,630 perché tali indici sono pari a zero indicizzati, come abbiamo visto in altre lingue 325 00:17:59,630 --> 00:18:02,360 anche. 326 00:18:02,360 --> 00:18:05,210 Tutte le domande su questo per ciclo? 327 00:18:05,210 --> 00:18:10,660 >> Quindi c'è definizione implicita di questa variabile indice, 328 00:18:10,660 --> 00:18:14,350 il cui valore inizia a 0, e continua ad ogni iterazione del ciclo 329 00:18:14,350 --> 00:18:17,950 aumentare di 1 fino ad un punto che è uguale a grades.count, 330 00:18:17,950 --> 00:18:20,380 a quel punto, il ciclo si interrompe. 331 00:18:20,380 --> 00:18:23,730 >> Si noti che nella nostra stringa interpolazione qui, 332 00:18:23,730 --> 00:18:26,910 possiamo effettivamente eseguire alcune semplici manipolazioni a tali valori. 333 00:18:26,910 --> 00:18:31,230 Così indice più 1 sarà effettivamente eseguire una somma di tale valore 334 00:18:31,230 --> 00:18:34,780 perché indice è, in questo caso, un numero intero. 335 00:18:34,780 --> 00:18:37,810 E a quel punto, lo farà successivamente convertito in una stringa 336 00:18:37,810 --> 00:18:42,230 e interpolato in questa stringa qui, e stampati come ci si aspetterebbe. . 337 00:18:42,230 --> 00:18:44,520 >> E la cosa bella sulle matrici qui è 338 00:18:44,520 --> 00:18:50,730 che anche noi siamo in grado di avere valori fetching e valori di impostazione 339 00:18:50,730 --> 00:18:54,080 usando la notazione parentesi quadra come abbiamo visto in altre lingue. 340 00:18:54,080 --> 00:18:57,130 341 00:18:57,130 --> 00:19:01,030 >> Va bene, allora da qui, ora calcolare nostra somma di tutti i nostri gradi. 342 00:19:01,030 --> 00:19:02,780 Ora, specie del prossimo passo logico sarebbe 343 00:19:02,780 --> 00:19:07,580 di eseguire un'operazione di divisione per trovare la media di questi gradi. 344 00:19:07,580 --> 00:19:10,150 Ma qualcosa di importante qui sta accadendo che 345 00:19:10,150 --> 00:19:15,020 è che tale somma è forse un numero intero. 346 00:19:15,020 --> 00:19:18,020 Ma abbiamo bisogno di eseguire alcune sorta di doppio divisione. 347 00:19:18,020 --> 00:19:20,600 E questo sta per essere estremamente importante quando 348 00:19:20,600 --> 00:19:24,140 vogliamo eseguire questa operazione, perché quello che stiamo dicendo 349 00:19:24,140 --> 00:19:28,430 è che abbiamo bisogno di realtà eseguire la divisione in due doppie. 350 00:19:28,430 --> 00:19:31,370 E ancora, perché Swift è molto fortemente tipizzato, 351 00:19:31,370 --> 00:19:36,760 dobbiamo esplicitamente impostare tutte le elementi a doppio prima di poter effettivamente 352 00:19:36,760 --> 00:19:38,300 eseguire tale operazione. 353 00:19:38,300 --> 00:19:40,550 >> Così, in modo per noi di eseguire doppia divisione, 354 00:19:40,550 --> 00:19:43,730 non è sufficiente che una sola di questi elementi di essere un doppio. 355 00:19:43,730 --> 00:19:46,400 Entrambi hanno essere un doppio perché veloce 356 00:19:46,400 --> 00:19:50,860 per essere sicuri che questo è quello che vogliamo fare. 357 00:19:50,860 --> 00:19:54,360 Quindi dovremo quindi esplicitamente typecast la somma che abbiamo calcolato in precedenza 358 00:19:54,360 --> 00:19:58,970 e il conteggio dei voti per raddoppia, e quindi eseguire tale operazione e memorizzare 359 00:19:58,970 --> 00:20:02,390 che in questa nuova variabile, o meglio questa nuova costante chiamata media, 360 00:20:02,390 --> 00:20:06,810 che avrà di che tipo, si immagina? 361 00:20:06,810 --> 00:20:07,587 Doppio, sì. 362 00:20:07,587 --> 00:20:09,420 Quindi, in questo caso, non c'è bisogno di specificarlo 363 00:20:09,420 --> 00:20:13,450 perché si può dedurre dal operazione che tipo di media di dati 364 00:20:13,450 --> 00:20:14,730 sarà. 365 00:20:14,730 --> 00:20:19,025 E Swift è generalmente piuttosto buono di essere in grado di dedurre il tipo. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Vuoi vedere questo Corro, o posso andare avanti? 368 00:20:24,200 --> 00:20:25,640 Voglio andare avanti. 369 00:20:25,640 --> 00:20:28,130 Tutte le domande di nulla di tutto questo? 370 00:20:28,130 --> 00:20:28,630 Grande. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Ora stiamo per iniziare a raggiungere le buone funzioni di definizione stuff--, 373 00:20:35,010 --> 00:20:39,090 e un paio di altri tipi che sono unico a Swift che non hanno 374 00:20:39,090 --> 00:20:41,620 visto in altre lingue fino a questo punto, 375 00:20:41,620 --> 00:20:46,290 ma sono presenti in altri lingue che si potrebbe trovare in seguito. 376 00:20:46,290 --> 00:20:48,210 Quindi, prima, se si desidera definire una funzione, 377 00:20:48,210 --> 00:20:52,170 si definisce con la parola funky la funzione, e quindi il nome della funzione, 378 00:20:52,170 --> 00:20:56,710 e poi tra parentesi, gli argomenti che si desidera che la funzione per accettare. 379 00:20:56,710 --> 00:21:00,280 Gli argomenti devono anche specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 deve anche specificare il tipo di dati che essi sono, a meno che non si può dedurre. 381 00:21:05,010 --> 00:21:07,500 E vedremo che poco caveat in appena un po '. 382 00:21:07,500 --> 00:21:09,920 >> Quindi, in questo caso abbiamo una funzione chiamata printGradeCount. 383 00:21:09,920 --> 00:21:12,840 Stiamo per accettare un variable-- anzi in questo caso, 384 00:21:12,840 --> 00:21:14,450 un constant-- chiamato registro di classe. 385 00:21:14,450 --> 00:21:18,517 E sta per essere di tipo array di interi. 386 00:21:18,517 --> 00:21:20,600 Ora c'è qualcosa che è molto importante qui 387 00:21:20,600 --> 00:21:21,849 che voglio che tu capisca. 388 00:21:21,849 --> 00:21:27,560 Che è che per default, questi argomenti che sono input per questa funzione sono 389 00:21:27,560 --> 00:21:34,380 definito con una parola chiave let implicita, il che significa che non posso modificare questo 390 00:21:34,380 --> 00:21:39,850 variabile registro di classe qui. 391 00:21:39,850 --> 00:21:43,360 E che tipo di senso, perché si sta passando i dati in. 392 00:21:43,360 --> 00:21:45,860 E forse non si vuole che di essere cambiato da sotto. 393 00:21:45,860 --> 00:21:50,800 È possibile menzionare esplicitamente che questa è una variabile mettendo 394 00:21:50,800 --> 00:21:52,070 la parola chiave var qui. 395 00:21:52,070 --> 00:21:56,832 Ma questa è una Gotcha che abbiamo persone notato hanno fatto in passato 396 00:21:56,832 --> 00:21:59,790 è che hanno supposto che sta andando essere una variabile quando, in realtà, 397 00:21:59,790 --> 00:22:02,640 è una costante. 398 00:22:02,640 --> 00:22:07,340 >> Va bene, ecco allora, in questo caso, non abbiamo specificato alcun tipo di ritorno. 399 00:22:07,340 --> 00:22:09,460 Vi mostreremo come fare che in un momento. 400 00:22:09,460 --> 00:22:12,340 Ma si noti che qui abbiamo solo una semplice se la condizione. 401 00:22:12,340 --> 00:22:14,560 Se il registro di classe è vuoto, che in questo caso 402 00:22:14,560 --> 00:22:19,310 è solo la proprietà di questo intero array, poi stampare qualcosa. 403 00:22:19,310 --> 00:22:23,100 Altrimenti facciamo qualcos'altro. 404 00:22:23,100 --> 00:22:25,000 >> Abbastanza semplice finora credo. 405 00:22:25,000 --> 00:22:27,960 Ma mi fermarsi se avete domande. 406 00:22:27,960 --> 00:22:33,350 >> Ora questa funzione, media, prende anche alcuni argomenti, o meglio un argomento, 407 00:22:33,350 --> 00:22:37,507 che è il registro di classe, e questa volta sta per restituire un doppio tipo. 408 00:22:37,507 --> 00:22:39,340 Perché è calcolando la media ed è 409 00:22:39,340 --> 00:22:45,010 andando a tornare in realtà che medio calcolato per la linea chiamante. 410 00:22:45,010 --> 00:22:50,070 >> In questo caso, si precisa la Tipo di tornare dopo una freccia. 411 00:22:50,070 --> 00:22:53,260 E questo potrebbe sentire un po 'strano in un primo momento. 412 00:22:53,260 --> 00:22:55,610 Sei cresciuto abituato all'impostazione del ritorno 413 00:22:55,610 --> 00:22:57,720 digitare prima del nome della funzione. 414 00:22:57,720 --> 00:23:00,310 Ma se si pensa a questo in termini di matematica, 415 00:23:00,310 --> 00:23:03,320 come quando si ha la matematica che definiscono una funzione, 416 00:23:03,320 --> 00:23:06,807 si dispone di una funzione con un po ' ingressi, e produce un'uscita. 417 00:23:06,807 --> 00:23:08,890 E questo è esattamente ciò che questo dovrebbe imitare. 418 00:23:08,890 --> 00:23:12,460 E ci sono un paio di altre lingue che hanno sintassi simile pure, 419 00:23:12,460 --> 00:23:15,674 ma probabilmente nessuno che che hai visto in CS50. 420 00:23:15,674 --> 00:23:17,090 Ma ancora non essere confuso da esso. 421 00:23:17,090 --> 00:23:21,650 La freccia indica che cosa sta succedendo da restituire in questo caso. 422 00:23:21,650 --> 00:23:23,650 OK, così come faremo per calcolare questa media? 423 00:23:23,650 --> 00:23:25,649 Beh, se il registro di classe è vuoto, beh, allora siamo 424 00:23:25,649 --> 00:23:30,731 andando a restituire 0, che forse un modo ragionevole per trattare questo. 425 00:23:30,731 --> 00:23:32,980 Non lo so, veniamo indietro a quella in un po '. 426 00:23:32,980 --> 00:23:34,688 Questo non può in realtà essere un modo ragionevole 427 00:23:34,688 --> 00:23:38,310 per calcolare una media se abbiamo un registro di classe vuota. 428 00:23:38,310 --> 00:23:41,260 >> Poi ci limiteremo a eseguiamo il nostro sommatoria. 429 00:23:41,260 --> 00:23:43,900 Si noti che qui abbiamo effettivamente avere una versione alternativa di un 430 00:23:43,900 --> 00:23:49,190 per il ciclo, che ci permette di iterare su ogni singolo elemento di un array 431 00:23:49,190 --> 00:23:53,630 e porre ogni elemento nella sua variabile. 432 00:23:53,630 --> 00:23:56,200 Specificando per grado in Registro di classe, quello che stiamo dicendo 433 00:23:56,200 --> 00:24:00,560 è che stiamo andando a implicitamente creare una nuova costante chiamato 434 00:24:00,560 --> 00:24:05,180 qualità che sta per rappresentare ogni oggetto unico nel registro di classe 435 00:24:05,180 --> 00:24:06,769 ogni volta che il ciclo for. 436 00:24:06,769 --> 00:24:08,560 Quindi la prima volta che è gestito, di grado sarà 437 00:24:08,560 --> 00:24:09,800 essere il primo elemento della registro di classe. 438 00:24:09,800 --> 00:24:12,300 La seconda volta sarà la secondo punto, così via e così via 439 00:24:12,300 --> 00:24:15,970 fino a quando ha gradebook si esaurisce di elementi. 440 00:24:15,970 --> 00:24:20,390 Allora saremo in grado di sommare che qualità nella nostra variabile sommatoria 441 00:24:20,390 --> 00:24:22,570 e restituire il nostro media come abbiamo visto prima. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, tutte le domande? 444 00:24:26,950 --> 00:24:27,699 Sì? 445 00:24:27,699 --> 00:24:28,990 PUBBLICO: Ho due domande. 446 00:24:28,990 --> 00:24:33,586 Numero uno, ipoteticamente, può si esegue intero su questo? 447 00:24:33,586 --> 00:24:35,604 Non deve essere un doppio, è corretto? 448 00:24:35,604 --> 00:24:37,520 DAN AMRMENDARIZ: Può voi ripetere questa domanda? 449 00:24:37,520 --> 00:24:39,587 PUBBLICO: Posso fare intero come la media? 450 00:24:39,587 --> 00:24:41,670 DAN AMRMENDARIZ: Può voi fare integer come media? 451 00:24:41,670 --> 00:24:45,015 Così restituire un intero media invece di un doppio? 452 00:24:45,015 --> 00:24:48,204 >> PUBBLICO: si Return-- avere che in questo momento al di sotto. 453 00:24:48,204 --> 00:24:49,870 DAN AMRMENDARIZ: Proprio qui, tornare 0.0? 454 00:24:49,870 --> 00:24:51,790 PUBBLICO: Sì, solo ritorno 0. 455 00:24:51,790 --> 00:24:56,590 Così sarà sia 80 o 85, ma non 85.2. 456 00:24:56,590 --> 00:24:59,465 >> DAN AMRMENDARIZ: Quindi, in questo caso, quindi c'è una paio di modi diversi 457 00:24:59,465 --> 00:25:00,090 per rispondere a questa. 458 00:25:00,090 --> 00:25:02,760 Lasciatemi rispondo in ordine. 459 00:25:02,760 --> 00:25:06,740 Quindi, se ho solo fare questo ritorno 0, 0 è un valore intero. 460 00:25:06,740 --> 00:25:09,730 E così che causerà una errore di tipo per questo caso 461 00:25:09,730 --> 00:25:13,210 perché si aspetta un doppio ma viene poi restituisce un intero. 462 00:25:13,210 --> 00:25:16,770 Se voglio tornare un intero, posso. 463 00:25:16,770 --> 00:25:20,450 Posso impostare il tipo di ritorno a int, tornare qui 0, 464 00:25:20,450 --> 00:25:22,047 e non eseguire la doppia divisione. 465 00:25:22,047 --> 00:25:23,880 Ma allora saremmo facendo divisione intera. 466 00:25:23,880 --> 00:25:27,080 E così abbiamo poi non avremmo avuto la media che avremmo forse aspettarci. 467 00:25:27,080 --> 00:25:29,210 Ma sì possiamo modificare i tipi in questo modo. 468 00:25:29,210 --> 00:25:32,598 >> PUBBLICO: E in secondo luogo, è avere una doppia in alto. 469 00:25:32,598 --> 00:25:35,502 Ma in basso, quando si fare ritorno Double Double, 470 00:25:35,502 --> 00:25:38,280 che è già automaticamente tornando formato doppio. 471 00:25:38,280 --> 00:25:42,278 Perché è ancora necessario definirla con la freccia sulla parte superiore con un doppio? 472 00:25:42,278 --> 00:25:45,010 >> DAN AMRMENDARIZ: So in caso, questo fa parte 473 00:25:45,010 --> 00:25:50,580 di the-- così a ripetere la domanda, perché è implicita dal ritorno 474 00:25:50,580 --> 00:25:56,030 tipi di qui, che tipo questo in realtà è, abbiamo bisogno di essere esplicito con Swift 475 00:25:56,030 --> 00:25:59,970 su quello che vogliamo tornare da questa funzione 476 00:25:59,970 --> 00:26:02,690 in modo che quando si esegue digitare il controllo, si può fare in modo 477 00:26:02,690 --> 00:26:05,850 che ciò che abbiamo effettivamente scritto in basso in realtà conforme a quella. 478 00:26:05,850 --> 00:26:10,225 Quindi è un po 'come un assegno con te stesso tipo di situazione. 479 00:26:10,225 --> 00:26:11,050 Ma ci sono-- 480 00:26:11,050 --> 00:26:12,560 >> PUBBLICO: [incomprensibile] freccia? 481 00:26:12,560 --> 00:26:19,490 >> DAN AMRMENDARIZ: Ci sono casi in cui possiamo specificare che possiamo implicitamente 482 00:26:19,490 --> 00:26:21,550 impostare il tipo di ritorno. 483 00:26:21,550 --> 00:26:23,940 Ma in questo caso, non mi pensare che avrebbe funzionato. 484 00:26:23,940 --> 00:26:26,190 C'è qualche altra sintassi che vedremo in seguito. 485 00:26:26,190 --> 00:26:30,320 486 00:26:30,320 --> 00:26:35,280 >> Va bene, quindi questa fonte codice è un po 'diverso 487 00:26:35,280 --> 00:26:41,839 perché questo analizza argomenti da la funzione che stiamo chiamando. 488 00:26:41,839 --> 00:26:44,130 Mi permetta di mostrare come funziona prima di poter effettivamente passa 489 00:26:44,130 --> 00:26:48,050 per alcune cose interessanti che sta succedendo a Swift. 490 00:26:48,050 --> 00:26:51,870 >> Quindi, in questo caso, se ho appena eseguito questo codice, si noti che quello che sta facendo 491 00:26:51,870 --> 00:26:54,900 mentre è--, che tipo di mi dà un errore di strano. 492 00:26:54,900 --> 00:26:59,730 Ho bisogno di passare un paio di numeri interi come argomento della riga di comando. 493 00:26:59,730 --> 00:27:06,220 Vediamo quindi, 150 e 80, e premi invio per scoprire cosa sta realmente facendo. 494 00:27:06,220 --> 00:27:09,890 E 'accettando ciascuno di questi valori come numeri interi. 495 00:27:09,890 --> 00:27:12,040 Li sta inserendo in un registro di classe. 496 00:27:12,040 --> 00:27:14,470 E poi è l'esecuzione tale calcolo medio 497 00:27:14,470 --> 00:27:16,650 e l'output che, come ci si aspetterebbe. 498 00:27:16,650 --> 00:27:19,950 >> Ma ovviamente c'è qualcosa da fare con questo qualcosa rifiuto 499 00:27:19,950 --> 00:27:23,300 qualcosa come un intero. 500 00:27:23,300 --> 00:27:27,300 Come si può ricordare da quando eravamo si tratta di argomenti della riga di comando 501 00:27:27,300 --> 00:27:32,640 in C e altre lingue, la prima 0-esimo elemento in tale argomento della riga di comando 502 00:27:32,640 --> 00:27:35,774 lista è il nome del comando che abbiamo effettivamente eseguito. 503 00:27:35,774 --> 00:27:38,690 Quindi, in questo caso, sto solo looping su tutti gli argomenti della riga di comando. 504 00:27:38,690 --> 00:27:41,650 Ma io non sto facendo alcun tipo di fantasia controllare per saltare quel primo. 505 00:27:41,650 --> 00:27:45,920 Sono solo in modo esplicito o che sono implicitamente controllare quali di questi tipi 506 00:27:45,920 --> 00:27:49,900 sono interi prima che io in realtà eseguire questo calcolo. 507 00:27:49,900 --> 00:27:52,420 >> E questo è essenzialmente cosa sta succedendo qui. 508 00:27:52,420 --> 00:27:55,860 Per ogni argomento gli argomenti del processo, 509 00:27:55,860 --> 00:27:59,210 Ho intenzione di eseguire alcune assegno. 510 00:27:59,210 --> 00:28:01,970 E in questo caso, ho intenzione per cercare di primo convertito 511 00:28:01,970 --> 00:28:07,620 tale argomento in un numero intero da l'esecuzione di un typecast esplicito, 512 00:28:07,620 --> 00:28:12,310 perché è, in ingresso, una stringa e non in realtà un numero intero. 513 00:28:12,310 --> 00:28:18,140 >> Ma questo è una specie di una sintassi strano, se di grado uguale lasciare Int (argomento). 514 00:28:18,140 --> 00:28:21,120 Che cosa sta effettivamente accadendo qui è estremamente 515 00:28:21,120 --> 00:28:24,390 importante per il vostro tramite Swift. 516 00:28:24,390 --> 00:28:27,610 Questo sta usando ciò che è chiamato un tipo opzionale. 517 00:28:27,610 --> 00:28:34,790 >> Quindi questa funzione, Int (argomento), restituisce non solo un intero, ma ritorna 518 00:28:34,790 --> 00:28:37,470 quello che chiama un intero opzionale. 519 00:28:37,470 --> 00:28:41,200 E così questo è una sorta di un tipo in cima a un tipo. 520 00:28:41,200 --> 00:28:45,900 È possibile ordinare di immaginare come è tornando come un pacchetto. 521 00:28:45,900 --> 00:28:47,750 E quando si apre che pacchetto, esso sia 522 00:28:47,750 --> 00:28:53,930 ha un numero intero, che è il risultato, o non ha assolutamente nulla a affatto. 523 00:28:53,930 --> 00:28:58,140 E questo è utile come controllo degli errori Meccanismo, perché in questo caso 524 00:28:58,140 --> 00:29:02,080 possiamo scoprire, è stata questa tipo di conversione di successo? 525 00:29:02,080 --> 00:29:05,810 Se fosse, allora è infatti andando ad avere un numero intero all'interno. 526 00:29:05,810 --> 00:29:08,750 In caso contrario, sta andando ad avere un po ' valore che chiameremo trascurabili, 527 00:29:08,750 --> 00:29:10,920 rappresentativa non integer affatto. 528 00:29:10,920 --> 00:29:13,270 E 'davvero rappresentativo di nulla. 529 00:29:13,270 --> 00:29:18,130 >> E così questo se la costruzione ci permette di scartare quel pacchetto, 530 00:29:18,130 --> 00:29:19,850 che opzionale vincolante. 531 00:29:19,850 --> 00:29:25,560 E se siamo in grado di scartare che pacchetto e trovare un intero all'interno, 532 00:29:25,560 --> 00:29:27,720 allora quello che stiamo dicendo qui è che ci sarà poi 533 00:29:27,720 --> 00:29:33,090 consentono tale valore da impostare in questa costante chiamato grado. 534 00:29:33,090 --> 00:29:36,590 E questa porzione di if, la parte superiore del if 535 00:29:36,590 --> 00:29:40,390 verrà eseguito, perché unwrap ha avuto successo. 536 00:29:40,390 --> 00:29:43,290 >> Se si da il caso che c'è stato un errore forse 537 00:29:43,290 --> 00:29:47,040 in questa conversione tipo esplicito da una stringa in un numero intero, forse 538 00:29:47,040 --> 00:29:49,160 è il valore ABC per esempio. 539 00:29:49,160 --> 00:29:52,120 E questo è in realtà non andare per convertire in un numero intero. 540 00:29:52,120 --> 00:29:55,520 Poi tornerà a zero, che non è un numero intero. 541 00:29:55,520 --> 00:29:57,570 E questa istruzione if bene quindi sicuro. 542 00:29:57,570 --> 00:30:01,930 grade non esisterà perché esso non ha contenuto intero. 543 00:30:01,930 --> 00:30:06,391 E sarà eseguire questo blocco else invece. 544 00:30:06,391 --> 00:30:06,890 Sì? 545 00:30:06,890 --> 00:30:09,652 >> PUBBLICO: Nil è la N-I-L? 546 00:30:09,652 --> 00:30:11,110 DAN AMRMENDARIZ: nil è N-I-L, sì. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Quindi questo è forse uno dei più difficili cose su Swift, 549 00:30:20,310 --> 00:30:23,690 soprattutto quando si è in le erbacce in un app iOS 550 00:30:23,690 --> 00:30:27,442 e si sta effettivamente cercando per fare un po 'di sviluppo lì. 551 00:30:27,442 --> 00:30:29,400 E sta per essere urlare a circa opzionale. 552 00:30:29,400 --> 00:30:33,050 E sta per essere voi per chiedere interrogativi e punti esclamativi. 553 00:30:33,050 --> 00:30:37,100 Ma una volta a capire se si fuori-- dedicare un po 'di tempo per capire 554 00:30:37,100 --> 00:30:41,990 quello che sta succedendo con i tipi opzionali, potrai risparmiare un sacco di mal di testa 555 00:30:41,990 --> 00:30:46,040 come si sta tentando di scrivere un'applicazione in Swift. 556 00:30:46,040 --> 00:30:47,660 >> In realtà è una caratteristica molto potente. 557 00:30:47,660 --> 00:30:49,826 E dovrete semplicemente per prendere la mia parola per ora. 558 00:30:49,826 --> 00:30:52,620 Ma staremo a vedere questa costruzione e alcuni altri piace 559 00:30:52,620 --> 00:30:56,740 in alcuni degli altri codice sorgente vi mostreremo in appena un po '. 560 00:30:56,740 --> 00:31:00,440 >> Ci sono domande iniziali qui? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Così l'asporto importante è che un tipo facoltativo è una sorta di metatipo. 563 00:31:08,690 --> 00:31:12,500 Si o ha un valore, e se lo fa, allora 564 00:31:12,500 --> 00:31:18,110 sarà forse avere quel valore associato con esso, o esso ha alcun valore, 565 00:31:18,110 --> 00:31:19,620 ed è rappresentato da zero. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 Il resto di questo è forse come ci si aspetterebbe. 568 00:31:28,870 --> 00:31:32,900 >> Quindi cerchiamo di rampa fino alla difficoltà ancora una volta. 569 00:31:32,900 --> 00:31:37,070 E questa volta, diamo uno sguardo ad alcune altri tipi di dati che in realtà esistono. 570 00:31:37,070 --> 00:31:41,290 Uno di questi è dizionari, che è molto simile ai dizionari Python. 571 00:31:41,290 --> 00:31:48,270 E 'in qualche modo simile a una tabella hash C. Si tratta essenzialmente di una mappatura di tasti 572 00:31:48,270 --> 00:31:49,820 dove le chiavi possono essere stringhe. 573 00:31:49,820 --> 00:31:52,670 E quando si guarda quelle chiavi, tali tasti avranno un valore. 574 00:31:52,670 --> 00:31:56,020 Quindi non è comunque una serie, ma invece, più strettamente associato 575 00:31:56,020 --> 00:31:58,810 a una mappa hash o una tabella hash. 576 00:31:58,810 --> 00:32:02,420 >> Vediamo come questo dovrebbe a lavorare prima di riuscire a 577 00:32:02,420 --> 00:32:05,210 entrare nel codice sorgente stessa. 578 00:32:05,210 --> 00:32:07,680 Se ho appena eseguito questo, non succede nulla davvero. 579 00:32:07,680 --> 00:32:12,430 Mi sta dicendo che mi aspetto alcuni parametri del seguente tipo. 580 00:32:12,430 --> 00:32:16,050 Quindi ho intenzione di fornire a essa alcuni nomi problema set, 581 00:32:16,050 --> 00:32:18,490 così pset0, forse ho avuto 100. 582 00:32:18,490 --> 00:32:20,790 E pset1, ho ottenuto un 5. 583 00:32:20,790 --> 00:32:24,630 E poi l'esame, mi ha fatto molto bene e ha ottenuto 30. 584 00:32:24,630 --> 00:32:27,180 E oops, mi ha colpito un spazio qui. 585 00:32:27,180 --> 00:32:30,940 >> Quando mi ha colpito Invio, è possibile vedere esegue qualche calcolo. 586 00:32:30,940 --> 00:32:33,740 Dice gradebook è di tre gradi, pset1, pset0, esame. 587 00:32:33,740 --> 00:32:36,120 E il registro di classe ha questa specifica media. 588 00:32:36,120 --> 00:32:38,370 Così ancora una volta, stiamo lavorando con questa idea Registro di classe, 589 00:32:38,370 --> 00:32:44,650 ma abbiamo intenzione di continuare l'iterazione con la complessità della nostra funzione. 590 00:32:44,650 --> 00:32:47,650 >> Così al momento della comparsa, siamo solo andando a creare una funzione che 591 00:32:47,650 --> 00:32:49,390 è responsabile per la stampa dell'utilizzo. 592 00:32:49,390 --> 00:32:51,920 E c'è questa uscita funzione che sarà solo 593 00:32:51,920 --> 00:32:53,710 forzatamente chiudere l'applicazione. 594 00:32:53,710 --> 00:32:56,530 Questo non è qualcosa che si utilizzerà in iOS. 595 00:32:56,530 --> 00:32:59,750 Questo è solo, in questo caso, con un argomento da riga di comando. 596 00:32:59,750 --> 00:33:01,990 Successivo inizieremo muoversi verso Xcode. 597 00:33:01,990 --> 00:33:07,760 Ma questo è specifico per un comando programma di stile di linea a Swift. 598 00:33:07,760 --> 00:33:11,490 >> Diamo uno sguardo ad alcune delle le cose interessanti qui. 599 00:33:11,490 --> 00:33:15,150 Vediamo, solo un paio di cose interessanti da citare forse 600 00:33:15,150 --> 00:33:19,930 è che nella mia funzione di stampare il numero di voti, 601 00:33:19,930 --> 00:33:26,090 si potrebbe ricordare che ho avuto quella lista di pset1 items--, pset0, ed esame. 602 00:33:26,090 --> 00:33:29,130 Si può effettivamente rapidamente e facilmente fare questo 603 00:33:29,130 --> 00:33:34,490 prendendo il registro di classe, che è un dizionario che ha le chiavi e valori. 604 00:33:34,490 --> 00:33:38,730 Trova tutti della chiave è attraverso il metodo chiavi a punti qui, 605 00:33:38,730 --> 00:33:43,180 e quindi utilizzare questo joinWithSeparator, che poi prendere tutte le chiavi 606 00:33:43,180 --> 00:33:48,590 che avevamo digitato, pset1-- o scusate, pset0, pset1, e exam-- 607 00:33:48,590 --> 00:33:53,030 e concatenare insieme utilizzando una virgola e uno spazio 608 00:33:53,030 --> 00:33:55,400 per creare una stringa lungo. 609 00:33:55,400 --> 00:34:00,190 Questa operazione è solo aderire fenomenale utile in una varietà di contesti. 610 00:34:00,190 --> 00:34:03,450 E così è questo joinWithSeparator. 611 00:34:03,450 --> 00:34:06,939 >> E questa è una cosa che è cambiato da Swift 1 a Swift 2. 612 00:34:06,939 --> 00:34:08,730 Ci deve essere utilizzato un Python style-- se siete 613 00:34:08,730 --> 00:34:13,219 familiarità con Python-- un Python stile metodo join sulle stringhe. 614 00:34:13,219 --> 00:34:15,699 Ma che non è più il caso Swift 2. 615 00:34:15,699 --> 00:34:19,400 Si desidera utilizzare questo se si vuole per concatenare una serie di cose 616 00:34:19,400 --> 00:34:23,380 insieme con una stringa. 617 00:34:23,380 --> 00:34:27,889 >> Quindi, forse, allora nella nostra discussione di media prima, 618 00:34:27,889 --> 00:34:32,659 fa un po 'più senso per noi per impostare la funzione di media 619 00:34:32,659 --> 00:34:36,610 per essere un doppio facoltativo piuttosto di un semplice doppio esplicito. 620 00:34:36,610 --> 00:34:39,239 Perché abbiamo avuto che condizione insolita dove, 621 00:34:39,239 --> 00:34:41,550 che cosa se realmente gradebook non ha valori all'interno di esso? 622 00:34:41,550 --> 00:34:44,280 Quale dovrebbe essere il rendimento medio? 623 00:34:44,280 --> 00:34:46,350 >> Beh, forse in C te avrebbe fatto qualcosa 624 00:34:46,350 --> 00:34:50,040 come condizione un valore sentinel, come 0.0, o forse un numero negativo, 625 00:34:50,040 --> 00:34:53,690 o qualcosa solo che rappresenta la realtà che ci fosse qualche condizione di errore 626 00:34:53,690 --> 00:34:57,910 e forse in realtà non hanno la possibilità di calcolare tale media. 627 00:34:57,910 --> 00:35:05,590 Beh, la bellezza di specificare un tipo opzionale sarebbe quello di farlo. 628 00:35:05,590 --> 00:35:09,540 E ora sto dicendo che tutte queste parole, ma questo in realtà non fa uso di optional. 629 00:35:09,540 --> 00:35:12,970 Ma vedremo che in appena minuti dove possiamo impostare media 630 00:35:12,970 --> 00:35:17,230 essere un tipo di dati facoltativo affinché se effettivamente restituisce alcuni dati, poi 631 00:35:17,230 --> 00:35:18,470 ritorneremo tali dati. 632 00:35:18,470 --> 00:35:20,570 In caso contrario, ci ritorneremo nil, dicendo che questo 633 00:35:20,570 --> 00:35:22,200 non ha il calcolo significativo. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Passiamo ad altro. 636 00:35:28,570 --> 00:35:35,910 Quindi da qui, abbiamo cercato di tutti questi esempi nella linea di comando. 637 00:35:35,910 --> 00:35:39,470 Ma in realtà quello che si sta andando a che fare con è Xcode. 638 00:35:39,470 --> 00:35:43,720 E una delle cose belle di Xcode è, e in particolare in Swift, 639 00:35:43,720 --> 00:35:47,450 è che abbiamo questa cosa chiamato un parco giochi. 640 00:35:47,450 --> 00:35:51,470 E un parco giochi è non è affatto un app iOS. 641 00:35:51,470 --> 00:35:54,751 Ma permette di sperimentare con Swift in un modo molto semplice. 642 00:35:54,751 --> 00:35:56,000 È possibile digitare tutto il codice. 643 00:35:56,000 --> 00:35:58,140 E 'ben sintassi evidenziata qui. 644 00:35:58,140 --> 00:36:01,600 Quando si crea un nuovo file, verrà richiesto se si desidera creare un parco giochi. 645 00:36:01,600 --> 00:36:08,720 Ma la cosa bella di Playground è che a destra della finestra, 646 00:36:08,720 --> 00:36:12,020 fa realmente vi mostrerà Uscita dal codice. 647 00:36:12,020 --> 00:36:16,110 Quindi, se ho scorrere verso il basso, si può vedere che cosa l'uscita di varie linee di codice 648 00:36:16,110 --> 00:36:17,200 in realtà sembra essere. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Quindi, in questo caso, stiamo andando a cambiare direzione solo un po ' 651 00:36:26,790 --> 00:36:30,960 e parlare di qualcosa che è davvero importante in questo modo ad alto livello 652 00:36:30,960 --> 00:36:34,020 Swift che opera, e è questa idea di chiusure. 653 00:36:34,020 --> 00:36:36,960 E probabilmente avete visto questo un po 'in JavaScript. 654 00:36:36,960 --> 00:36:40,770 Per quelli di voi che sono in CS50, chiusure 655 00:36:40,770 --> 00:36:47,240 sono molto popolari, molto buon modo per farlo cose di alto livello in lingue moderne. 656 00:36:47,240 --> 00:36:50,270 Ma è anche un po 'difficile da avvolgere la testa intorno la prima volta. 657 00:36:50,270 --> 00:36:52,269 Quindi, se guardando questo prima volta, va bene così. 658 00:36:52,269 --> 00:36:56,740 Basta guardare il codice sorgente e vedere se si può capire a casa. 659 00:36:56,740 --> 00:37:01,050 >> Quindi, in questo caso, diciamo che noi vuole creare un sacco di esponenti 660 00:37:01,050 --> 00:37:04,134 con un certo valore fisso. 661 00:37:04,134 --> 00:37:05,800 Quindi, in questo caso posso creare una funzione. 662 00:37:05,800 --> 00:37:09,270 Ho intenzione di chiamarlo potere di 2 il cui unico scopo nella vita 663 00:37:09,270 --> 00:37:15,770 è quello di prendere un po 'di ingresso e doppio esso, e restituire tale valore. 664 00:37:15,770 --> 00:37:21,210 Si noti che io sono qui accettare un tipo di dati. 665 00:37:21,210 --> 00:37:23,137 Sta andando essere una variabile chiamata x. 666 00:37:23,137 --> 00:37:23,970 E 'di tipo Double. 667 00:37:23,970 --> 00:37:26,190 E ho intenzione di tornare un doppio qui. 668 00:37:26,190 --> 00:37:29,100 E sto solo andando a fare molto, francamente, piuttosto 669 00:37:29,100 --> 00:37:32,650 modo ingenuo di raddoppiare questo valore. 670 00:37:32,650 --> 00:37:35,600 E ti mostrerò perché questo è utile in un secondo. 671 00:37:35,600 --> 00:37:40,418 >> Si noti che qui abbiamo questa gamma ancora. qualcosa in 1, puntino 672 00:37:40,418 --> 00:37:44,130 dot dot, 2, il che significa che questo ciclo verrà eseguito due volte. 673 00:37:44,130 --> 00:37:46,480 Ma questo rappresenta una variabile dummy. 674 00:37:46,480 --> 00:37:49,650 Significa che non ho davvero intenzione di stia usando la variabile ovunque 675 00:37:49,650 --> 00:37:51,070 all'interno di tale ciclo. 676 00:37:51,070 --> 00:37:55,380 Voglio solo che questa linea di codice da eseguire due volte, 677 00:37:55,380 --> 00:37:58,980 senza dover conoscere il valore di tale intervallo. 678 00:37:58,980 --> 00:38:02,570 >> Quindi, in questo caso sto risultato correndo volte x due volte, che in sostanza 679 00:38:02,570 --> 00:38:06,560 significa che sto quadratura questo valore. 680 00:38:06,560 --> 00:38:10,230 E questo succede a lavorare come ci aspetteremmo. 681 00:38:10,230 --> 00:38:16,410 Potenza di 2, si passa il valore 2.0 ci dà una potenza di 4. 682 00:38:16,410 --> 00:38:18,810 3.2 lavori per 10.24. 683 00:38:18,810 --> 00:38:22,660 >> Ora possiamo fare un simile cosa per il potere di 3. 684 00:38:22,660 --> 00:38:25,330 Ma ora cambia solo l'intervallo. 685 00:38:25,330 --> 00:38:28,840 Per variabile dummy a 1 a 3, moltiplicare 3 volte, 686 00:38:28,840 --> 00:38:29,830 e fare la stessa cosa. 687 00:38:29,830 --> 00:38:32,240 >> Quindi questo potrebbe sentire un po 'forzato. 688 00:38:32,240 --> 00:38:34,270 Ma c'è un importante cosa qui che 689 00:38:34,270 --> 00:38:37,770 è che guardando queste due funzioni, c'è 690 00:38:37,770 --> 00:38:43,600 solo una cosa che è diverso, che è questo valore nella gamma. 691 00:38:43,600 --> 00:38:46,910 Tutto il resto di questi due funzioni, potenza di 3 e potenza di 2, 692 00:38:46,910 --> 00:38:50,440 sono, infatti, identici perché funzionano allo stesso modo. 693 00:38:50,440 --> 00:38:53,460 >> Quindi, a questo punto, un po ' campanello d'allarme dovrebbe andare via. 694 00:38:53,460 --> 00:38:56,200 Speriamo che quello che stai dicendo, si sa, questo si sente un po ' 695 00:38:56,200 --> 00:38:59,250 come la duplicazione degli sforzi. 696 00:38:59,250 --> 00:39:02,950 Forse c'è un modo che avrei essere in grado di incapsulare tutto questo 697 00:39:02,950 --> 00:39:06,630 e fornire una funzione oppure creare una funzione che 698 00:39:06,630 --> 00:39:11,550 fa esattamente quello che voglio senza la necessità di digitare esplicitamente. 699 00:39:11,550 --> 00:39:15,732 E questo è ciò che il potere di una chiusura ci permette di fare. 700 00:39:15,732 --> 00:39:16,940 Quindi, diamo uno sguardo a questo. 701 00:39:16,940 --> 00:39:18,700 E io passerò una coppia minuti su questo, perché questo 702 00:39:18,700 --> 00:39:20,310 è abbastanza importante per Swift. 703 00:39:20,310 --> 00:39:22,900 Vediamo questo tutto il tempo. 704 00:39:22,900 --> 00:39:24,550 Stiamo per definire una funzione. 705 00:39:24,550 --> 00:39:26,380 Sta andando per essere chiamato powerof. 706 00:39:26,380 --> 00:39:29,470 Sta andando a accettare un parametro chiamato y di tipo Int. 707 00:39:29,470 --> 00:39:32,220 Ma date un'occhiata al tipo di ritorno. 708 00:39:32,220 --> 00:39:38,730 Il tipo di ritorno è, in parentesi, Doppia freccia a due. 709 00:39:38,730 --> 00:39:43,370 Il che significa che questa funzione, questa funzione powerof, 710 00:39:43,370 --> 00:39:46,550 sta tornando una funzione. 711 00:39:46,550 --> 00:39:50,845 Che sta accettando un doppio e restituire un doppio. 712 00:39:50,845 --> 00:39:53,720 In modo che potrebbe suonare un po 'pazzo, ma cerchiamo di scorrere verso il basso un po ' 713 00:39:53,720 --> 00:39:55,060 e guardare per vedere cosa succede. 714 00:39:55,060 --> 00:39:57,910 Siamo all'interno di questa funzione powerof. 715 00:39:57,910 --> 00:40:00,760 Stiamo creando una nuova funzione chiamato exponentiator, 716 00:40:00,760 --> 00:40:02,900 ma non importa quello che è. 717 00:40:02,900 --> 00:40:06,410 >> Si noti che questo ha un valore di ingresso x. 718 00:40:06,410 --> 00:40:09,910 E si sta prendendo in camera matrimoniale e restituire un doppio. 719 00:40:09,910 --> 00:40:16,320 E questo è lo stesso codice che abbiamo visto sopra, tranne che il valore di 2 720 00:40:16,320 --> 00:40:20,060 o il valore di 3, che limite superiore in tale intervallo, 721 00:40:20,060 --> 00:40:23,210 è stato sostituito con questo valore di y, che 722 00:40:23,210 --> 00:40:27,230 era il parametro iniziale della nostra funzione powerof. 723 00:40:27,230 --> 00:40:31,700 E a questo punto, ci tornare exponentiator. 724 00:40:31,700 --> 00:40:33,345 Stiamo restituendo la funzione. 725 00:40:33,345 --> 00:40:36,300 726 00:40:36,300 --> 00:40:39,550 >> E 'un po' come un piccolo soffia mente. 727 00:40:39,550 --> 00:40:44,360 Ma immaginiamo cosa succede quando chiamo questa funzione powerof 728 00:40:44,360 --> 00:40:47,610 e passare in esso un certo valore come 2. 729 00:40:47,610 --> 00:40:50,020 Ciò significa che Ora ho il valore 730 00:40:50,020 --> 00:40:55,130 2 per y, il che significa che questo valore y in questa funzione exponentiator 731 00:40:55,130 --> 00:40:56,410 sarà quel valore 2. 732 00:40:56,410 --> 00:41:01,290 Ma sto tornando questo Funzione exponentiator. 733 00:41:01,290 --> 00:41:05,900 >> Allora notate cosa Swift dice che hanno creato in questo caso. 734 00:41:05,900 --> 00:41:10,550 lasciò piazza è una definizione, è una funzione che accetta un doppio 735 00:41:10,550 --> 00:41:12,610 e restituisce un Double. 736 00:41:12,610 --> 00:41:16,590 Ho creato una funzione che qualcosa piazze 737 00:41:16,590 --> 00:41:19,782 utilizzando questo meccanismo proprio qui. 738 00:41:19,782 --> 00:41:22,490 E davvero quello che sta succedendo è che sta tornando questa funzione 739 00:41:22,490 --> 00:41:26,390 exponentiator, ma questo valore y è avvolto all'interno di esso. 740 00:41:26,390 --> 00:41:31,080 E così ora ogni volta che uso questo variabile o costante questa chiamata 741 00:41:31,080 --> 00:41:35,180 piazza, si sta andando a comportarsi come una funzione. 742 00:41:35,180 --> 00:41:39,960 E così posso quindi chiamare quella variabile come vorrei chiamare una funzione, 743 00:41:39,960 --> 00:41:43,830 e passare in un certo numero, come in questo caso 3. 744 00:41:43,830 --> 00:41:45,910 E io allora quadrato di questo valore. 745 00:41:45,910 --> 00:41:53,340 Quindi 3 quadrato verrà poi diventano 9, come si può vedere qui. 746 00:41:53,340 --> 00:41:56,530 >> Veramente pazzo, ma questo ora mi offre l'opportunità 747 00:41:56,530 --> 00:41:59,040 per creare altre funzioni powerof. 748 00:41:59,040 --> 00:42:03,680 Come posso dire, OK, bene ora voglio per creare una nuova funzione, powerof (3), 749 00:42:03,680 --> 00:42:06,290 e memorizzare che in un costante chiamata cubo. 750 00:42:06,290 --> 00:42:10,220 E ora il cubo sta per essere una funzione separata che sarà poi 751 00:42:10,220 --> 00:42:14,800 prendere un certo valore come input e cubo che valore come si può vedere nella riga inferiore 752 00:42:14,800 --> 00:42:16,420 Qui. 753 00:42:16,420 --> 00:42:18,590 cubo 2 sta per tradursi in 8. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Roba Speriamo piuttosto pulito. 756 00:42:22,680 --> 00:42:25,920 Non avete mai visto prima. 757 00:42:25,920 --> 00:42:29,990 Vi incoraggio a guardare in chiusure e indagare su questo un po 'di più. 758 00:42:29,990 --> 00:42:33,570 E 'roba davvero potente vediamo un sacco in JavaScript e alcune altre lingue. 759 00:42:33,570 --> 00:42:37,160 E 'davvero fondamentale per capire API così 760 00:42:37,160 --> 00:42:38,620 che ci arriveremo in un secondo. 761 00:42:38,620 --> 00:42:39,456 Sì? 762 00:42:39,456 --> 00:42:43,740 >> PUBBLICO: Quando si esegue powerof (2), parentesi, e poi 763 00:42:43,740 --> 00:42:48,764 un'altra parentesi, un altro input-- sei fondamentalmente sostituire la piazza. 764 00:42:48,764 --> 00:42:50,930 DAN AMRMENDARIZ: Così guardare all'ultimo riga qui. 765 00:42:50,930 --> 00:42:55,930 In realtà è del tutto possibile farlo concatenamento come lei ha suggerito. 766 00:42:55,930 --> 00:43:00,990 Così powerof (5) indica che stiamo andando per avere un exponentiator 5 quassù. 767 00:43:00,990 --> 00:43:04,160 Quindi questo è essenzialmente sarà il stessa cosa 4 alla quinta potenza, 768 00:43:04,160 --> 00:43:07,200 perché abbiamo creato un exponentiating funzionare alla quinta potenza, 769 00:43:07,200 --> 00:43:09,920 e stiamo passando in che funzione il valore 4. 770 00:43:09,920 --> 00:43:12,619 E si ottiene quel valore che ci aspettiamo, 1024. 771 00:43:12,619 --> 00:43:14,785 PUBBLICO: E non è un nome, in modo che rende più facile 772 00:43:14,785 --> 00:43:16,570 per leggere, la piazza qualunque. 773 00:43:16,570 --> 00:43:17,903 >> DAN AMRMENDARIZ: Giusto, esattamente. 774 00:43:17,903 --> 00:43:21,120 Quindi, prima ho appena messo in una costante qui così 775 00:43:21,120 --> 00:43:23,808 che ha reso facile da usare quel nome. 776 00:43:23,808 --> 00:43:24,308 Sì? 777 00:43:24,308 --> 00:43:26,942 >> PUBBLICO: In questo contesto, powerof, è parte 778 00:43:26,942 --> 00:43:30,774 del linguaggio di programmazione in contrasto con il modo in cui si 779 00:43:30,774 --> 00:43:33,952 pensare powerof in [incomprensibile]? 780 00:43:33,952 --> 00:43:35,660 DAN AMRMENDARIZ: So in questo caso, powerof 781 00:43:35,660 --> 00:43:39,280 è semplicemente il nome del funzione che ho definito qui. 782 00:43:39,280 --> 00:43:41,801 Quindi non è inerente al linguaggio stesso, 783 00:43:41,801 --> 00:43:43,550 ma, invece, è solo una funzione che ha 784 00:43:43,550 --> 00:43:45,628 quel nome perché gli ho dato quel nome. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 Qualsiasi altra domanda? 787 00:43:51,920 --> 00:43:52,800 Tutto ok. 788 00:43:52,800 --> 00:43:54,750 >> Ora, questo è grande. 789 00:43:54,750 --> 00:43:58,170 Ma tu non stai andando a vedere un molte funzioni di chiusura che 790 00:43:58,170 --> 00:44:03,440 sono come questo, dove si definisce, dentro di una funzione, un'altra funzione. 791 00:44:03,440 --> 00:44:04,320 E lo si può fare. 792 00:44:04,320 --> 00:44:06,430 Ma non è di tipo davvero necessario, giusto? 793 00:44:06,430 --> 00:44:09,189 Come faccio a definire il motivo per cui questo funzione chiamata exponentiator 794 00:44:09,189 --> 00:44:10,480 e poi tornare immediatamente. 795 00:44:10,480 --> 00:44:15,220 Perché non posso solo subito restituire questa funzione? 796 00:44:15,220 --> 00:44:18,890 >> Ed infatti, è proprio L'idea alla base un concetto chiamato 797 00:44:18,890 --> 00:44:22,410 funzioni anonime, dove funzioni anonime in realtà non 798 00:44:22,410 --> 00:44:25,270 avere un nome, perché non c'è bisogno di avere uno. 799 00:44:25,270 --> 00:44:28,700 E così in questo caso, in 7B, possiamo trovare esattamente quello. 800 00:44:28,700 --> 00:44:31,470 E 'lo stesso codice, fa esattamente la stessa cosa, 801 00:44:31,470 --> 00:44:35,570 ma ora abbiamo cambiato leggermente in modo che questa funzione powerof subito 802 00:44:35,570 --> 00:44:37,750 restituisce una funzione. 803 00:44:37,750 --> 00:44:44,150 Si noti che dopo il ritorno, c'è una parentesi graffa aperta. 804 00:44:44,150 --> 00:44:46,410 Si aspetta questo ingresso doppio. 805 00:44:46,410 --> 00:44:48,560 Si aspetta che l'uscita doppia. 806 00:44:48,560 --> 00:44:52,175 E poi la parola chiave in separa il codice stesso. 807 00:44:52,175 --> 00:44:53,550 Quindi questa è una funzione anonima. 808 00:44:53,550 --> 00:44:57,030 In realtà non ha un nome, mentre prima si chiamava exponentiator. 809 00:44:57,030 --> 00:45:00,229 Ma come abbiamo visto, solo veramente non faceva riferimento ai exponentiator 810 00:45:00,229 --> 00:45:01,270 al di fuori di tale funzione. 811 00:45:01,270 --> 00:45:02,470 Quindi non aveva importanza. 812 00:45:02,470 --> 00:45:06,300 Quindi questa funzione anonima è cosiddetto perché è senza nome, 813 00:45:06,300 --> 00:45:09,107 ma è ancora in uso nel contesto di questo codice. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> I prossimi due quelli cui sono intenzione di continuare spera 816 00:45:16,079 --> 00:45:17,370 soffia la vostra mente un po '. 817 00:45:17,370 --> 00:45:20,410 Possiamo semplificare questo ancor più. 818 00:45:20,410 --> 00:45:24,490 Perché, come è stato acutamente sottolineato in precedenza, 819 00:45:24,490 --> 00:45:29,100 forse che sappiamo, da dedurre da questo codice, cosa 820 00:45:29,100 --> 00:45:31,750 l'uscita di questo codice sta per essere. 821 00:45:31,750 --> 00:45:38,180 Ed in effetti, in questa funzione anonima, infatti possiamo dedurre i tipi di dati. 822 00:45:38,180 --> 00:45:41,650 >> Quindi, in questo, non abbiamo più necessità di definire in modo esplicito 823 00:45:41,650 --> 00:45:44,850 il tipo di dati che si sta ingresso e uscita da questa funzione 824 00:45:44,850 --> 00:45:45,890 per un paio di ragioni. 825 00:45:45,890 --> 00:45:51,390 Uno è che abbiamo definito, fino al prototipo della funzione di inclusione, 826 00:45:51,390 --> 00:45:55,770 il tipo di dati questo anonimi funzione dovrebbe ingresso e uscita. 827 00:45:55,770 --> 00:45:57,900 E dall'altro, abbiamo può dedurre dal codice 828 00:45:57,900 --> 00:46:01,930 qui che stiamo accettando input che è di tipo doppio 829 00:46:01,930 --> 00:46:03,670 e restituire un doppio. 830 00:46:03,670 --> 00:46:07,890 >> Si noti che qui non abbiamo esplicitamente definiti i nomi degli argomenti 831 00:46:07,890 --> 00:46:11,220 che questa funzione è accettare. 832 00:46:11,220 --> 00:46:16,180 E così vediamo che possiamo fare riferimento a i parametri che utilizzano $ 0, $ 1, 833 00:46:16,180 --> 00:46:20,140 così via e così via, a seconda il numero di tale parametro utilizzato 834 00:46:20,140 --> 00:46:20,850 in questa funzione. 835 00:46:20,850 --> 00:46:23,370 836 00:46:23,370 --> 00:46:29,740 >> Questo è qualcosa che si sta andando per vedere una partita è questa parentesi graffa aperta 837 00:46:29,740 --> 00:46:32,797 Definizione seguita da una $ 0, e poi alcune operazioni, 838 00:46:32,797 --> 00:46:34,130 e poi una parentesi graffa chiusa. 839 00:46:34,130 --> 00:46:38,630 Questa è una funzione anonima che esegue questa operazione. 840 00:46:38,630 --> 00:46:42,940 Ha questo parametro dove è tipo è dedotto. 841 00:46:42,940 --> 00:46:44,860 Quel primo parametro è $ 0. 842 00:46:44,860 --> 00:46:49,010 E alcuni operazione è accade su quel $ 0. 843 00:46:49,010 --> 00:46:52,100 >> AUDIENCE: Così il segno del dollaro significa parametro fondamentalmente, 844 00:46:52,100 --> 00:46:53,429 e 0 significa il primo? 845 00:46:53,429 --> 00:46:54,720 DAN ARMENDARIZ: Esatto. 846 00:46:54,720 --> 00:46:59,100 Così il segno del dollaro significa sostanzialmente parametro e 0 indica il primo. 847 00:46:59,100 --> 00:47:02,760 Ma funziona in particolare in questo caso dove non ho nominato 848 00:47:02,760 --> 00:47:07,940 gli argomenti a mia funzione anonima. 849 00:47:07,940 --> 00:47:11,119 >> PUBBLICO: Fa Perl o qualcosa hanno questo simbolo del dollaro, dollaro 0 in là? 850 00:47:11,119 --> 00:47:12,702 DAN ARMENDARIZ: fa che, mi dispiace? 851 00:47:12,702 --> 00:47:15,360 PUBBLICO: Il Perl ha questo dollaro 0, dollaro 1-- 852 00:47:15,360 --> 00:47:17,318 DAN ARMENDARIZ: io non sono troppo familiare con il Perl, 853 00:47:17,318 --> 00:47:21,340 ma quello che definisce le variabili di PHP sulla base di segni di dollaro. 854 00:47:21,340 --> 00:47:26,120 E ci possono essere alcune lingue che hanno caratteristiche come questo. 855 00:47:26,120 --> 00:47:28,240 Infatti, prende in prestito un Swift molte caratteristiche come questo 856 00:47:28,240 --> 00:47:29,489 da un sacco di altre lingue. 857 00:47:29,489 --> 00:47:32,380 Vediamo un accenno di Python in esso. 858 00:47:32,380 --> 00:47:35,800 Questa definizione di tipo sembra provenire da OCaml. 859 00:47:35,800 --> 00:47:38,932 E abbiamo solo un sacco di roba da un sacco di lingue diverse. 860 00:47:38,932 --> 00:47:40,640 Questo è uno dei più bella cose su Swift 861 00:47:40,640 --> 00:47:43,390 è che ci vuole un sacco dei migliori idee da un gruppo di lingue 862 00:47:43,390 --> 00:47:47,229 e tutti insieme calzascarpe in una lingua eccellente. 863 00:47:47,229 --> 00:47:49,520 In realtà, se mi permettete di continuare soffia la tua mente, 864 00:47:49,520 --> 00:47:51,000 così faccio da noi tutto questo. 865 00:47:51,000 --> 00:47:56,690 Forse possiamo semplificare questo un po ' bit realizzando che, naturalmente, 866 00:47:56,690 --> 00:48:02,120 Swift ha un exponentiating funzione built in. 867 00:48:02,120 --> 00:48:04,660 Se importare Darwin, che è proprio la libreria che 868 00:48:04,660 --> 00:48:09,680 presenta questa funzione chiamata pow, ora Posso semplificare la mia potenza della funzione 869 00:48:09,680 --> 00:48:11,830 essere il seguente. 870 00:48:11,830 --> 00:48:15,860 E sta per essere di ritorno questa funzione anonima. 871 00:48:15,860 --> 00:48:17,950 >> Ma guardate quanto semplice questo è ora. 872 00:48:17,950 --> 00:48:22,780 Si tratta di una funzione anonima che è accettare un certo tipo di dati, 873 00:48:22,780 --> 00:48:26,600 e che sta per essere uno argomento specificamente, 874 00:48:26,600 --> 00:48:29,320 si fa riferimento a $ 0 cioè di tipo Double. 875 00:48:29,320 --> 00:48:32,680 E 'intenzione di restituire un tipo Double. 876 00:48:32,680 --> 00:48:35,760 Ma l'istruzione return è ora implicita. 877 00:48:35,760 --> 00:48:39,990 >> Ed è questo stile esatto è molto, molto diffuso in Swift, 878 00:48:39,990 --> 00:48:40,790 tutto il luogo. 879 00:48:40,790 --> 00:48:43,190 Stiamo andando a vedere questo tutto il tempo a Swift. 880 00:48:43,190 --> 00:48:46,150 Così sto mostrando tutto questo a voi a causa di questa sintassi. 881 00:48:46,150 --> 00:48:49,070 Questo è molto comune per vedere, il che significa che 882 00:48:49,070 --> 00:48:51,420 è una funzione anonima che esegue 883 00:48:51,420 --> 00:48:54,640 alcune operazioni su questi argomenti. 884 00:48:54,640 --> 00:48:56,940 E c'è un rendimento implicito. 885 00:48:56,940 --> 00:49:01,850 Quindi è assolutamente la stessa cosa per noi di dire questo, proprio qui. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> Perché questo riccio staffa è una funzione, 888 00:49:08,150 --> 00:49:10,480 siamo eseguire questa operazione sul primo argomento. 889 00:49:10,480 --> 00:49:12,170 Stiamo per tornare quello. 890 00:49:12,170 --> 00:49:14,815 Ma questo ritorno esterno è ritorno che tutta la funzione, 891 00:49:14,815 --> 00:49:19,855 che tutta la funzione anonima che abbiamo appena creato. 892 00:49:19,855 --> 00:49:21,689 Qualsiasi altra domanda? 893 00:49:21,689 --> 00:49:23,980 Va bene, non so se voi ragazzi siete pronti per questo, 894 00:49:23,980 --> 00:49:27,455 ma possiamo andare ancora più pazzo di Swift. 895 00:49:27,455 --> 00:49:28,560 Sei pronto? 896 00:49:28,560 --> 00:49:29,930 OK, questo è grande. 897 00:49:29,930 --> 00:49:35,310 >> Ora in realtà abbiamo la capacità a, in Swift, a causa di come modulare 898 00:49:35,310 --> 00:49:39,650 e come base protocollo è, per definire i nostri operatori freaking. 899 00:49:39,650 --> 00:49:44,060 Come in questo caso, non avevamo operatore per il exponentiation-- bene, 900 00:49:44,060 --> 00:49:47,990 per l'esecuzione di poteri di qualcosa. 901 00:49:47,990 --> 00:49:53,632 Ma posso, a Swift, definire un nuovo operatore che fa proprio questo. 902 00:49:53,632 --> 00:49:55,590 Quindi in questo caso non c'è un po 'di sintassi qui. 903 00:49:55,590 --> 00:49:59,980 E ti permetterò di vedere le cose a casa quando si guarda a questo. 904 00:49:59,980 --> 00:50:06,890 Ma stiamo definendo questo infisso operatore **, che poi ci consentono, 905 00:50:06,890 --> 00:50:09,840 definendo cosa che Funzione ** realtà 906 00:50:09,840 --> 00:50:15,010 non, di accettare una mano sinistra lato e un lato destro, 907 00:50:15,010 --> 00:50:21,190 e poi tornare l'esponente di tale lato sinistro al lato destro. 908 00:50:21,190 --> 00:50:24,850 >> E così ora tutto ad un tratto mi hanno creato una nuova numeratore. 909 00:50:24,850 --> 00:50:29,490 Quindi 2 ** 3 significa 2 alla terza potenza. 910 00:50:29,490 --> 00:50:34,420 [Strabiliante SOUND] Questo per si dovrebbe ti fanno essere come, 911 00:50:34,420 --> 00:50:37,960 OK, vite C. vado Swift tutta la strada. 912 00:50:37,960 --> 00:50:38,740 Questo è grande. 913 00:50:38,740 --> 00:50:40,140 Questo è abbastanza fantastico. 914 00:50:40,140 --> 00:50:42,240 >> Anche se questo è un grande esempio. 915 00:50:42,240 --> 00:50:45,570 Ma non ho mai una volta al di fuori di questo esempio effettivamente 916 00:50:45,570 --> 00:50:46,800 definito il mio operatore. 917 00:50:46,800 --> 00:50:49,710 Ma ancora, mostra un molta della potenza di Swift 918 00:50:49,710 --> 00:50:54,050 e perché questo è in realtà davvero molto cool. 919 00:50:54,050 --> 00:50:55,832 Ok si? 920 00:50:55,832 --> 00:50:57,790 PUBBLICO: Se siete definire il proprio operatore, 921 00:50:57,790 --> 00:51:02,940 come fai a sapere che non accidentalmente cercare di creare un operatore che è 922 00:51:02,940 --> 00:51:06,040 da qualche parte in C, come nascosto da qualche parte a Swift, 923 00:51:06,040 --> 00:51:12,210 come un quella oscura che si non può avere mai visto prima. 924 00:51:12,210 --> 00:51:15,050 >> DAN ARMENDARIZ: Quindi, se si sta cercando di definire i propri operatori, 925 00:51:15,050 --> 00:51:20,970 vi è il rischio di definire uno su un operatore esistente. 926 00:51:20,970 --> 00:51:24,870 Che va in un livello di dettaglio che Non credo che abbiamo tempo di andare oltre. 927 00:51:24,870 --> 00:51:27,620 Ma questo è un rischio. 928 00:51:27,620 --> 00:51:31,320 E questo è in realtà il vero motivo per cui Non ho usato il simbolo di inserimento, che 929 00:51:31,320 --> 00:51:36,210 quando stiamo digitando potere, di solito utilizzare 4 simbolo ^ 5 o qualcosa 930 00:51:36,210 --> 00:51:40,560 così, proprio quando siamo Gchatting amici o qualsiasi altra cosa. 931 00:51:40,560 --> 00:51:43,660 Ma in questo caso, che in realtà avrebbe provocato una collisione. 932 00:51:43,660 --> 00:51:46,450 E così ho evitato solo perché Mi è capitato di conoscere in questo caso 933 00:51:46,450 --> 00:51:50,430 che ciò avrebbe causato tale collisione. 934 00:51:50,430 --> 00:51:52,270 >> Tutto ok. 935 00:51:52,270 --> 00:51:55,080 Ora, purtroppo, per gli ultimi sette minuti, 936 00:51:55,080 --> 00:51:57,410 Devo continuare a soffiaggio le vostre menti un po '. 937 00:51:57,410 --> 00:52:00,230 Quindi, mi permetta di mostrarvi alcune altre cose. 938 00:52:00,230 --> 00:52:03,710 >> Vi abbiamo mostrato questa idea di avere queste funzioni anonime, 939 00:52:03,710 --> 00:52:07,040 queste chiusure che consentono di tipo di passare funzioni intorno. 940 00:52:07,040 --> 00:52:08,100 Li può tornare. 941 00:52:08,100 --> 00:52:09,490 Li può manipolare. 942 00:52:09,490 --> 00:52:11,790 Si può fare ogni sorta di cose folli. 943 00:52:11,790 --> 00:52:14,850 >> Ma un'altra cosa che sembra essere utile 944 00:52:14,850 --> 00:52:19,740 è la capacità di, contrariamente di tornare quelle funzioni 945 00:52:19,740 --> 00:52:25,146 in una funzione, per passare una funzione come parametro a un'altra funzione. 946 00:52:25,146 --> 00:52:30,430 Si potrebbe pensare bene perché sulla Terra dovrei fare una cosa del genere? 947 00:52:30,430 --> 00:52:33,660 >> Beh, diciamo che voglio di prendere questo operatore che mi 948 00:52:33,660 --> 00:52:40,260 lavorato così duramente per creare e applicare ad un gruppo di numeri diversi 949 00:52:40,260 --> 00:52:41,770 in un array. 950 00:52:41,770 --> 00:52:46,700 Quindi, in questo caso ho una serie di integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 E voglio raddoppiare tutti. 952 00:52:48,080 --> 00:52:50,430 Il modo in cui avremmo tipicamente farlo è quello di scrivere semplicemente 953 00:52:50,430 --> 00:52:53,440 un semplice ciclo for che itera su tutti 954 00:52:53,440 --> 00:52:57,140 ed eseguire una sorta di operazione piazza su di loro, 955 00:52:57,140 --> 00:53:02,700 inserendo i nuovi valori in una nuova variabili, o meglio, un nuovo array qui. 956 00:53:02,700 --> 00:53:07,370 E il valore dell'uscita di risulta quindi tutte queste matrici, 957 00:53:07,370 --> 00:53:10,200 ovvero tutti coloro Elementi ora al quadrato. 958 00:53:10,200 --> 00:53:12,680 >> E potremmo fare lo stesso cosa per cubatura esso, 959 00:53:12,680 --> 00:53:15,360 ma un po 'campanello d'allarme dovrebbe andare via 960 00:53:15,360 --> 00:53:17,360 dicendo che forse c'è un modo che avremmo 961 00:53:17,360 --> 00:53:19,860 essere in grado di semplificare questo un po '. 962 00:53:19,860 --> 00:53:21,130 E in realtà non c'è. 963 00:53:21,130 --> 00:53:25,320 Che cosa se potremmo creare una funzione che ci permette 964 00:53:25,320 --> 00:53:28,350 di accettare, come un predatore, una funzione? 965 00:53:28,350 --> 00:53:30,350 Quindi, in questo caso, prendere una guardare a questi argomenti. 966 00:53:30,350 --> 00:53:33,220 Stiamo per accettare un elenco di doppio. 967 00:53:33,220 --> 00:53:35,030 E poi stiamo andando per accettare una funzione 968 00:53:35,030 --> 00:53:40,990 in una variabile chiamata f che sta succedendo di prendere un doppio e restituire un doppio. 969 00:53:40,990 --> 00:53:43,320 E l'intera uscita di questa funzione intera 970 00:53:43,320 --> 00:53:47,310 chiamato mapper sta per restituisce un array chiamato doppio. 971 00:53:47,310 --> 00:53:52,380 >> Che cosa questo avrebbe poi mi permette di fare è di iterare quella lista 972 00:53:52,380 --> 00:53:56,350 e fare la stessa cosa, ma ora applicare tale funzione su ciascun 973 00:53:56,350 --> 00:53:58,970 dei valori individuali di quella lista. 974 00:53:58,970 --> 00:54:00,750 Quindi non so davvero che cosa f è. 975 00:54:00,750 --> 00:54:02,010 Non importa a me. 976 00:54:02,010 --> 00:54:06,530 Ma finché ci vuole in camera matrimoniale, esegue alcune operazioni su di esso, 977 00:54:06,530 --> 00:54:08,640 e quindi restituisce un Doppia, vorrei poi essere 978 00:54:08,640 --> 00:54:13,415 in grado di mappare tale funzione attraverso ogni singolo elemento della lista. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> E questo tipo di programmazione è chiamati funzioni di ordine superiore, 981 00:54:20,930 --> 00:54:24,440 dove stiamo passando funzioni intorno come parametri 982 00:54:24,440 --> 00:54:26,430 e fare le cose con le funzioni. 983 00:54:26,430 --> 00:54:29,640 È un po 'come prendere tutti questi idee che abbiamo imparato a CS50 984 00:54:29,640 --> 00:54:31,390 e prendendo le specie di al livello successivo. 985 00:54:31,390 --> 00:54:34,140 E questa è tutta roba stile CS51. 986 00:54:34,140 --> 00:54:37,080 E così noi andremo a fondo più in classi come quella. 987 00:54:37,080 --> 00:54:38,930 >> Ma questo è anche importante qui perché siamo 988 00:54:38,930 --> 00:54:42,010 vedere un sacco di funzioni che vengono utilizzati in Swift 989 00:54:42,010 --> 00:54:45,590 fa che essenzialmente questo, dove abbiamo 990 00:54:45,590 --> 00:54:48,300 alcuni numeri, alcune serie di numeri. 991 00:54:48,300 --> 00:54:50,850 Stiamo andando a passare che array in nostro mapper. 992 00:54:50,850 --> 00:54:55,770 E stiamo anche andando a passare qualche funzione che 993 00:54:55,770 --> 00:54:57,950 abbiamo già definito qui. 994 00:54:57,950 --> 00:54:59,690 Sta andando essere quadrata. 995 00:54:59,690 --> 00:55:02,220 E stiamo per poi quadrare tutti quei numeri 996 00:55:02,220 --> 00:55:04,710 e memorizzare che in questo risultato qui. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Quindi questo caso abbiamo definito il nostro propria funzione chiamata mapper. 999 00:55:11,000 --> 00:55:15,370 Ma questa cosa esatta è, infatti, integrato in Swift. 1000 00:55:15,370 --> 00:55:18,960 Ci sono una varietà di funzioni chiamate mappa. 1001 00:55:18,960 --> 00:55:21,520 C'è una funzione di carta, c'è una funzione di ridurre, 1002 00:55:21,520 --> 00:55:25,630 e c'è una funzione di filtro, che sostanzialmente applicare funzioni 1003 00:55:25,630 --> 00:55:30,782 ad ogni singolo elemento in un un elenco di modificarli in qualche modo. 1004 00:55:30,782 --> 00:55:34,510 >> PUBBLICO: Quindi, dal momento che si sta trasformando i dati in un altro formato 1005 00:55:34,510 --> 00:55:36,134 attraverso un function-- 1006 00:55:36,134 --> 00:55:37,050 DAN ARMENDARIZ: Giusto. 1007 00:55:37,050 --> 00:55:39,420 Sì, così la funzione che stiamo accettando 1008 00:55:39,420 --> 00:55:41,790 sta trasformando i dati in qualche modo. 1009 00:55:41,790 --> 00:55:44,700 In questo caso, eravamo o quadratura, o stavamo cubatura che, 1010 00:55:44,700 --> 00:55:50,060 o davvero, potremmo eseguire nessuna operazione su affatto. 1011 00:55:50,060 --> 00:55:54,150 >> Ma lasciate che vi mostri allora come questo sta andando a guardare nella pratica. 1012 00:55:54,150 --> 00:55:56,681 E di nuovo, sto correndo un po 'di tempo. quindi non sono 1013 00:55:56,681 --> 00:55:59,430 sarà in grado di andare oltre tutto del codice sorgente qui in dettaglio. 1014 00:55:59,430 --> 00:56:00,721 Ma vi incoraggio a farlo. 1015 00:56:00,721 --> 00:56:03,850 Postiamo il più presto possibile dopo questo discorso. 1016 00:56:03,850 --> 00:56:07,610 >> Ma se si dà un'occhiata a questo, supporre che abbiamo un elenco di numeri, 1017 00:56:07,610 --> 00:56:10,260 una matrice di numeri in questo variabili numeri chiamati. 1018 00:56:10,260 --> 00:56:16,670 Poi vogliamo eseguire questo funzionamento del filtro su quei numeri. 1019 00:56:16,670 --> 00:56:19,730 Quindi filtro è un elevato Funzione affinché 1020 00:56:19,730 --> 00:56:24,660 accetta un array e anche una funzione. 1021 00:56:24,660 --> 00:56:28,760 E su ogni elemento di quella array, svolgere tale funzione. 1022 00:56:28,760 --> 00:56:31,990 >> Se quella funzione ritorna vero, mantiene tale elemento. 1023 00:56:31,990 --> 00:56:36,100 Se tale funzione restituisce false, si butta via quella voce. 1024 00:56:36,100 --> 00:56:40,480 E poi restituisce un elenco che viene poi riempito tutto 1025 00:56:40,480 --> 00:56:44,360 di quegli elementi che sono stati filtrati. 1026 00:56:44,360 --> 00:56:47,150 >> Quindi, in altre parole, si tratta la stessa idea, il registro di classe. 1027 00:56:47,150 --> 00:56:50,800 Potremmo avere una varietà di gradi in questo valore numeri chiamati. 1028 00:56:50,800 --> 00:56:55,590 Potrebbe essere 100, e 70, e 40, così via e così via. 1029 00:56:55,590 --> 00:56:59,110 Che cosa questo filtro fa è comunicazione che questo è che lo zucchero sintattico 1030 00:56:59,110 --> 00:57:01,310 per una funzione anonima. 1031 00:57:01,310 --> 00:57:05,980 Si tratta di una funzione anonima dicendo che il parametro che sto accettando 1032 00:57:05,980 --> 00:57:09,690 sta per essere, se è maggiore di 70, 1033 00:57:09,690 --> 00:57:15,837 allora questa restituisce true, il che significa che tale elemento sarà tenuto in questo filtro. 1034 00:57:15,837 --> 00:57:17,920 Quindi cerchiamo di essere un po ' più concreta su questo. 1035 00:57:17,920 --> 00:57:25,760 Se ho questa serie di numeri e consiste di 100, 70, e 40, 1036 00:57:25,760 --> 00:57:29,730 Eseguo questo filtro operazione su ognuno di questi. 1037 00:57:29,730 --> 00:57:33,270 Sicché prima è il valore di 100. 1038 00:57:33,270 --> 00:57:36,770 100 maggiore o uguale a 70 è vero, che 1039 00:57:36,770 --> 00:57:41,950 significa che 100 è mantenuto in questa nuova copia di questo array. 1040 00:57:41,950 --> 00:57:44,290 70 passa anche. 1041 00:57:44,290 --> 00:57:46,020 Ma 40 non lo fa. 1042 00:57:46,020 --> 00:57:54,290 Che cosa viene restituito in passingCount è la matrice di elementi 100 e 70-- 1043 00:57:54,290 --> 00:57:57,410 100, comma 70. 1044 00:57:57,410 --> 00:57:59,870 Quelli erano gli unici due elementi che sono stati mantenuti. 1045 00:57:59,870 --> 00:58:03,740 E così il motivo per cui è andato rapidamente attraverso un sacco di questo tipo di ordine elevato 1046 00:58:03,740 --> 00:58:08,680 le cose sono perché questo è quello comune cosa che si vedrà a Swift abbastanza 1047 00:58:08,680 --> 00:58:16,810 spesso, sta eseguendo alcune operazioni utilizzando questa sintassi funzione anonima. 1048 00:58:16,810 --> 00:58:18,450 >> Ci sono alcune cose interessanti. 1049 00:58:18,450 --> 00:58:24,730 Gli switch sono davvero potente in Swift, Voglio dire solo come un pazzo, pazzo potente. 1050 00:58:24,730 --> 00:58:28,250 È possibile utilizzare l'interruttore, e si può effettivamente applicarle 1051 00:58:28,250 --> 00:58:33,160 a intervalli, che è un po 'pazzo, e fare cose fantasiose come quella. 1052 00:58:33,160 --> 00:58:37,540 >> Ma negli ultimi minuti, Voglio saltare abbastanza lontano 1053 00:58:37,540 --> 00:58:46,940 e vi mostrerà un esempio specifico di come siamo in grado di creare in iOS utilizzando Swift. 1054 00:58:46,940 --> 00:58:49,040 Così, quando si sta facendo questo, dovrete prendere 1055 00:58:49,040 --> 00:58:51,990 uno sguardo at-- su Apple documentazione, essi 1056 00:58:51,990 --> 00:58:56,084 hanno un sacco di veramente buoni tutorial per creare la vostra prima applicazione. 1057 00:58:56,084 --> 00:58:58,250 E vi incoraggio a fare che perché ti portano 1058 00:58:58,250 --> 00:59:04,110 attraverso tutte le fasi di quello che esattamente a fare clic su per creare un'applicazione iOS. 1059 00:59:04,110 --> 00:59:07,290 >> Ma qui abbiamo questa app iOS. 1060 00:59:07,290 --> 00:59:10,960 Ed è una bella semplice applicazione davvero. 1061 00:59:10,960 --> 00:59:13,840 Se faccio funzionare questo, mi permetta di mostrare quello che sembra. 1062 00:59:13,840 --> 00:59:19,480 Tutto ciò che fa in sostanza è esso tira da internet un file JSON 1063 00:59:19,480 --> 00:59:22,300 che ho memorizzato su un server. 1064 00:59:22,300 --> 00:59:26,310 E quel file JSON definisce le immagini che permettono 1065 00:59:26,310 --> 00:59:31,680 me per poi passare, nel mio app, le immagini dal mio server web. 1066 00:59:31,680 --> 00:59:32,880 >> Così ho qui getNextImage. 1067 00:59:32,880 --> 00:59:37,100 Carica un'immagine da internet, e quindi visualizza sullo schermo. 1068 00:59:37,100 --> 00:59:38,200 >> Quindi è abbastanza semplice. 1069 00:59:38,200 --> 00:59:41,550 Ma l'obiettivo qui è quello di mostrare come possiamo combinare le cose 1070 00:59:41,550 --> 00:59:47,820 da queste ultime settimane di CS50 in un'applicazione reale iOS. 1071 00:59:47,820 --> 00:59:53,140 In altre parole, forse una delle cose che si vorranno fare 1072 00:59:53,140 --> 00:59:56,340 è quello di avere un'applicazione iOS che può tirare i dati da internet 1073 00:59:56,340 --> 00:59:59,070 e mostrare all'utente alcune informazioni. 1074 00:59:59,070 --> 01:00:03,130 Questo è del tutto il punto di questo codice sorgente qui. 1075 01:00:03,130 --> 01:00:07,890 >> Quindi c'è molto da dire su come fare vero sviluppo iOS. 1076 01:00:07,890 --> 01:00:12,860 Ci sono un sacco di sintassi pazzo che non abbiamo ancora visto tutto 1077 01:00:12,860 --> 01:00:15,580 come una classe, che una classe è in realtà. 1078 01:00:15,580 --> 01:00:19,470 Possiamo in gran parte ignorare che per il momento. 1079 01:00:19,470 --> 01:00:23,250 >> Ma notiamo che abbiamo contenuto in questo una varietà di cose 1080 01:00:23,250 --> 01:00:27,720 che abbiamo già visto come funzioni che hanno nomi specifici. 1081 01:00:27,720 --> 01:00:32,650 E quando diamo quelli funzioni i nomi corretti 1082 01:00:32,650 --> 01:00:36,530 che sono attesi da iOS, infatti questo si sente un po 'magico. 1083 01:00:36,530 --> 01:00:40,300 Ma quando si crea un applicazione iOS, ci 1084 01:00:40,300 --> 01:00:47,590 sono i nomi delle funzioni specifiche che sono chiamati dal telefono stesso 1085 01:00:47,590 --> 01:00:52,440 come l'applicazione sta caricando per provare per creare il processo che effettivamente 1086 01:00:52,440 --> 01:00:54,787 esegue l'applicazione. 1087 01:00:54,787 --> 01:00:58,120 Quindi, di nuovo, ci sono un sacco di cose che mi devono sorvolare qui in modo per noi 1088 01:00:58,120 --> 01:01:00,570 per parlare di questo in particolare. 1089 01:01:00,570 --> 01:01:06,050 Ma vi incoraggio a guardare forse l'altra seminario IOS, ma anche alcune 1090 01:01:06,050 --> 01:01:09,290 del tutorial online che fanno un lavoro molto migliore di descrivere 1091 01:01:09,290 --> 01:01:11,030 le informazioni specifiche. 1092 01:01:11,030 --> 01:01:15,760 >> Ma possiamo vedere un paio di cose che sono interessanti dal codice qui. 1093 01:01:15,760 --> 01:01:17,950 Si noti che abbiamo if. 1094 01:01:17,950 --> 01:01:20,400 Tra l'altro, un importante cosa if 1095 01:01:20,400 --> 01:01:24,860 è che le parentesi intorno al Espressione booleana sono opzionali. 1096 01:01:24,860 --> 01:01:30,800 Ma le parentesi graffe non sono opzionali, indipendentemente poche o molte linee di codice 1097 01:01:30,800 --> 01:01:32,360 avete in un'istruzione if. 1098 01:01:32,360 --> 01:01:38,670 Non si può avere un if senza parentesi graffe a Swift. 1099 01:01:38,670 --> 01:01:41,000 >> E questo è, beh, una sorta di sciocco. 1100 01:01:41,000 --> 01:01:43,910 Ma c'è ragioni storiche per questo. 1101 01:01:43,910 --> 01:01:46,180 Si suppone che salvarti da te stesso. 1102 01:01:46,180 --> 01:01:49,899 Così per esempio, non è possibile eliminare le parentesi graffe intorno a quella 1103 01:01:49,899 --> 01:01:50,440 if. 1104 01:01:50,440 --> 01:01:52,730 Coloro che sono in effetti obbligatori. 1105 01:01:52,730 --> 01:01:54,480 Quindi vi incoraggio a guarda questo. 1106 01:01:54,480 --> 01:01:56,230 Ma c'è un altro costruisco che voglio 1107 01:01:56,230 --> 01:02:02,640 per mostrarvi su Swift che è nuovo a Swift 2.0 rispetto 1108 01:02:02,640 --> 01:02:08,460 per le vecchie versioni di Swift, che è il seguente. 1109 01:02:08,460 --> 01:02:11,620 Vediamo dove ho messo qui? 1110 01:02:11,620 --> 01:02:16,630 >> Quindi, in questa funzione chiamato fetchJSON, questa funzione 1111 01:02:16,630 --> 01:02:23,450 è responsabile per la trazione che JSON file da un URL, che guarda caso 1112 01:02:23,450 --> 01:02:26,310 essere in esecuzione sul mio CS50 IDE. 1113 01:02:26,310 --> 01:02:28,580 Ho appena iniziato Apache, mettere il mio file JSON lì, 1114 01:02:28,580 --> 01:02:32,110 e sono in grado di tirare che poi i dati da Internet utilizzando 1115 01:02:32,110 --> 01:02:36,430 questa funzione e questo URL, che viene fornito dal telefono. 1116 01:02:36,430 --> 01:02:40,490 E 'fornito da un libreria che si usa quando 1117 01:02:40,490 --> 01:02:43,140 si sta facendo un po 'di sviluppo di applicazioni iOS. 1118 01:02:43,140 --> 01:02:49,690 >> Si noti qui che c'è questo insolito costrutto sintattico chiamato guardia. 1119 01:02:49,690 --> 01:02:53,530 E davvero tutto questo è in Swift è un modo di verificare 1120 01:02:53,530 --> 01:02:56,870 che alcune cose devono stati raggiunti prima 1121 01:02:56,870 --> 01:03:00,000 procedere con il resto della funzione. 1122 01:03:00,000 --> 01:03:04,260 Così ho potuto avere, utilizzando questo tipo facoltativo, 1123 01:03:04,260 --> 01:03:10,530 Ho potuto trovare l'URL esecuzione di questa funzione NSURL 1124 01:03:10,530 --> 01:03:16,640 e memorizzare che in un URL costante, e poi controllando 1125 01:03:16,640 --> 01:03:20,820 per vedere se l'URL è stato pari a zero, perché stava per restituire un tipo opzionale. 1126 01:03:20,820 --> 01:03:25,660 E se fosse pari a zero, allora vorrei stampare un errore e poi tornare. 1127 01:03:25,660 --> 01:03:29,970 >> Invece, ciò che permette di guardia noi facciamo è quella cosa molto, 1128 01:03:29,970 --> 01:03:34,550 ma assicurarsi che sia in realtà il caso che url 1129 01:03:34,550 --> 01:03:38,020 è stato correttamente impostato dal NSURL. 1130 01:03:38,020 --> 01:03:41,810 E se lo è, allora salta su questo, e 1131 01:03:41,810 --> 01:03:46,110 vi permetterà di procedere con url essendo stato correttamente definito. 1132 01:03:46,110 --> 01:03:48,830 Ma se è vero che url non è ben definito, 1133 01:03:48,830 --> 01:03:52,550 se questa funzione restituisce un errore o qualche altra cosa inaspettata 1134 01:03:52,550 --> 01:03:58,030 in realtà si verifica, questa guardia costrutto ci permette di poi uscita quell'errore 1135 01:03:58,030 --> 01:04:00,390 e tornare immediatamente. 1136 01:04:00,390 --> 01:04:00,890 Sì? 1137 01:04:00,890 --> 01:04:04,839 >> PUBBLICO: Quindi è una specie di come un se poi il resto? 1138 01:04:04,839 --> 01:04:07,130 DAN ARMENDARIZ: E 'una specie di come un altro se poi, sì, 1139 01:04:07,130 --> 01:04:14,200 salvo che questo url è quindi definito per tutto di sotto di questo. 1140 01:04:14,200 --> 01:04:20,420 Se passa questa guardia, allora sarà effettivamente riempito con dati 1141 01:04:20,420 --> 01:04:29,500 ed utilizzabili nei restanti il codice sorgente nella funzione. 1142 01:04:29,500 --> 01:04:33,790 Così ho il sospetto che si sta andando a iniziare a vedere questa guardia pure. 1143 01:04:33,790 --> 01:04:36,670 Ed essere consapevoli di questo. 1144 01:04:36,670 --> 01:04:46,270 >> Quindi, solo guardando un paio di altri le cose, questo qui è quello che, 1145 01:04:46,270 --> 01:04:53,377 pensi che, solo sulla base di quello che stavamo parlando prima? 1146 01:04:53,377 --> 01:04:56,650 >> PUBBLICO: Penso che sarà eseguito nella lista? 1147 01:04:56,650 --> 01:04:59,100 >> DAN ARMENDARIZ: Così che è vicino. 1148 01:04:59,100 --> 01:05:02,360 Si tratta di una funzione che stiamo definendo. 1149 01:05:02,360 --> 01:05:07,240 E stiamo inserendo tale funzione come argomento a questa funzione qui. 1150 01:05:07,240 --> 01:05:09,120 >> PUBBLICO: [incomprensibile], se non nullo. 1151 01:05:09,120 --> 01:05:11,470 Così è nella lista, giusto? 1152 01:05:11,470 --> 01:05:15,450 >> DAN ARMENDARIZ: Se l'errore non è pari a zero, in modo che è-- quindi devo scorrere. 1153 01:05:15,450 --> 01:05:18,060 Bene, vediamo, non posso davvero scorrere a destra qui. 1154 01:05:18,060 --> 01:05:23,161 l'errore è un argomento che si sta passata a questa funzione anonima. 1155 01:05:23,161 --> 01:05:24,410 Questa è una funzione anonima. 1156 01:05:24,410 --> 01:05:25,480 Non ha un nome. 1157 01:05:25,480 --> 01:05:29,850 Ma stiamo accettando questi tre argomenti, i dati, la risposta, e l'errore. 1158 01:05:29,850 --> 01:05:33,590 E sta per tornare vuoto, così non sta andando a restituire nulla. 1159 01:05:33,590 --> 01:05:37,910 E questo è il contenuto di tale funzione. 1160 01:05:37,910 --> 01:05:41,961 E poi noi abbiamo accesso all'interno che funzione a ciascuno di questi argomenti. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Quindi è un vortice Visita della lingua. 1163 01:05:48,679 --> 01:05:50,470 Ma spero con questo, si spera come si prende 1164 01:05:50,470 --> 01:05:54,490 uno sguardo ad alcuni dei tutorial specifico per lo sviluppo di iOS con Swift, 1165 01:05:54,490 --> 01:05:57,481 soprattutto se si va a Web developer page-- di Apple 1166 01:05:57,481 --> 01:05:59,980 hanno un sacco di veramente buono tutorial per iniziare. 1167 01:05:59,980 --> 01:06:05,010 Ma si spera proprio questa ora di parlare sulla sintassi stessa ha dato 1168 01:06:05,010 --> 01:06:08,760 abbastanza per iniziare con quello. 1169 01:06:08,760 --> 01:06:12,950 >> Noi pubblicheremo tutto di questa fonte codice sul sito seminario 1170 01:06:12,950 --> 01:06:17,800 il più presto possibile, e anche le diapositive in modo da avere un punto di riferimento per tutti coloro che. 1171 01:06:17,800 --> 01:06:20,530 Ma buona fortuna con i vostri progetti. 1172 01:06:20,530 --> 01:06:23,640 E grazie a tutti per essere venuti. 1173 01:06:23,640 --> 01:06:26,990 >> [APPLAUSI] 1174 01:06:26,990 --> 01:06:28,026