1 00:00:00,000 --> 00:00:03,332 >> [REPRODUCCIÓ DE MÚSICA] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DONEN AMRMENDARIZ: Tothom, la benvinguda al seminari CS50, 4 00:00:09,590 --> 00:00:11,690 iOS desenvolupament d'aplicacions amb Swift. 5 00:00:11,690 --> 00:00:15,690 Estic Dan Armendariz, i jo sóc un preceptor de la informàtica aquí a Harvard. 6 00:00:15,690 --> 00:00:21,510 >> I la propera hora serà un viatge llampec de tantes coses 7 00:00:21,510 --> 00:00:25,160 sobre aquest tema com podem encaixar. 8 00:00:25,160 --> 00:00:29,170 Vaig a publicar tot el codi font que es poden veure en línia avui. 9 00:00:29,170 --> 00:00:31,990 Potser no som capaços de realment anar per sobre de tot 10 00:00:31,990 --> 00:00:34,810 que sóc que sóc que li mostra en aquesta hora. 11 00:00:34,810 --> 00:00:37,580 Però almenys espero que a través de els comentaris del codi font, 12 00:00:37,580 --> 00:00:40,830 vostè serà capaç de tractar d'esbrinar el que exactament que està passant per aquestes coses 13 00:00:40,830 --> 00:00:42,950 que ni bé arribem a. 14 00:00:42,950 --> 00:00:46,970 >> En general, l'estructura de la xerrada d'avui serà el següent. 15 00:00:46,970 --> 00:00:52,820 Anem a començar a terme fent una mica bàsic la sintaxi de la llengua Swift, 16 00:00:52,820 --> 00:00:56,290 entrar en alguns dels més avançats la sintaxi de la llengua Swift. 17 00:00:56,290 --> 00:00:59,560 A causa de que l'idioma és molt modern i 18 00:00:59,560 --> 00:01:02,110 té un munt d'alt nivell característiques, les coses que no tenim 19 00:01:02,110 --> 00:01:06,600 vist en C al llarg de CS50, o fins i tot alguns dels altres idiomes 20 00:01:06,600 --> 00:01:09,310 que hem començat utilitzant en CS50 com PHP, 21 00:01:09,310 --> 00:01:12,670 així que vaig a haver de tractar de introduir també alguns temes que 22 00:01:12,670 --> 00:01:18,580 estan relacionats amb llenguatges d'alt nivell que vostè no pot veure a fons en CS50, 23 00:01:18,580 --> 00:01:21,380 però es veurà en endavant classes d'informàtica. 24 00:01:21,380 --> 00:01:25,290 Així que serà un atapeïda hores. 25 00:01:25,290 --> 00:01:28,897 I no dubteu a deixar-me saber si vostè té alguna pregunta. 26 00:01:28,897 --> 00:01:30,730 Així que si vostè està interessat en fer el desenvolupament 27 00:01:30,730 --> 00:01:34,442 amb Swift, o realment qualsevol desenvolupament d'aplicacions iOS, 28 00:01:34,442 --> 00:01:35,900 hi ha un parell de requisits. 29 00:01:35,900 --> 00:01:39,940 En primer lloc, vostè ha d'estar fent servir un Mac, corrent en els exemples 30 00:01:39,940 --> 00:01:43,880 que utilitzarem avui en dia, una relativament nova versió d'OS 31 00:01:43,880 --> 00:01:46,580 X. En aquest cas, m'estic quedant X 10.5. 32 00:01:46,580 --> 00:01:48,600 Pot estar executant 10.11 si vols. 33 00:01:48,600 --> 00:01:52,430 Però tot el que vas a veure és que implica Xcode 7 i versions posteriors, 34 00:01:52,430 --> 00:01:56,271 que té la versió més recent de Swift, que és Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Això és realment una bonica distinció important. 36 00:01:58,270 --> 00:02:01,510 Una gran quantitat de la sintaxi té canviat molt significativament 37 00:02:01,510 --> 00:02:05,890 en alguns casos de Swift 1.0, que va ser llançat l'any passat, 38 00:02:05,890 --> 00:02:08,514 a Swift 2.0, que acaba de sortir aquesta tardor. 39 00:02:08,514 --> 00:02:09,889 Així que anem a mostrar Swift 2.0. 40 00:02:09,889 --> 00:02:13,020 Moltes de les coses que vostè busca en línia 41 00:02:13,020 --> 00:02:18,040 quan vostè està tractant d'aconseguir addicional informació sobre una varietat de coses, 42 00:02:18,040 --> 00:02:20,710 és possible que desitgi de forma explícita buscar Swift 2 43 00:02:20,710 --> 00:02:24,950 en comptes de vella Swift fer Assegureu-vos que vostè obtingui la sintaxi correcta. 44 00:02:24,950 --> 00:02:26,920 >> De fet, això és cert en general. 45 00:02:26,920 --> 00:02:31,210 Hi ha una quantitat ràpida del desenvolupament succeint en l'idioma Swift 46 00:02:31,210 --> 00:02:35,110 des que Apple va llançar, crec el, que ha estat una mica més d'un any 47 00:02:35,110 --> 00:02:36,370 ara. 48 00:02:36,370 --> 00:02:39,080 I les coses han canviat dramàticament en aquest moment. 49 00:02:39,080 --> 00:02:42,160 I el que no es va frustrar si, quan vostè està mirant al seu voltant 50 00:02:42,160 --> 00:02:48,310 per temes Swift o com dur a terme alguna cosa usant un codi d'exemple 51 00:02:48,310 --> 00:02:51,210 o alguna cosa que no ho fa realment treballar en Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Assegureu-vos que vostè està buscant específicament per a aquesta versió 53 00:02:53,790 --> 00:02:58,690 per intentar minimitzar els efectes de diferents versions i aquest tipus de coses. 54 00:02:58,690 --> 00:03:02,470 >> Vaig a tractar d'assenyalar només algunes coses que són diferents a les versions anteriors. 55 00:03:02,470 --> 00:03:03,970 Però és una cosa a tenir en compte. 56 00:03:03,970 --> 00:03:06,770 Això és probablement serà un dels majors mals de cap 57 00:03:06,770 --> 00:03:11,010 que va tenir amb Swift és trobar exemple de codi que és més antic, encara que només 58 00:03:11,010 --> 00:03:14,050 per uns pocs mesos, tractant d'usar en el seu projecte més modern. 59 00:03:14,050 --> 00:03:15,430 I simplement no funciona. 60 00:03:15,430 --> 00:03:18,530 Vostè està rebent errors del compilador, la sintaxi errors, tot tipus de coses boges. 61 00:03:18,530 --> 00:03:21,580 Així que ser pacient amb això, i ho faràs amb sort 62 00:03:21,580 --> 00:03:24,200 tenir una experiència bastant agradable amb total Swift. 63 00:03:24,200 --> 00:03:28,430 >> Ara pots fer-ho realitat join-- i espero que en realitat encara tenim present aquest any-- 64 00:03:28,430 --> 00:03:30,910 CS 50 aplicació d'Apple equip de desenvolupament, que 65 00:03:30,910 --> 00:03:34,680 li permetrà instal·lar qualsevol aplicació el que crea en els seus dispositius iOS. 66 00:03:34,680 --> 00:03:39,190 Així que mireu aquest URL si vostè està interessat en fer això. 67 00:03:39,190 --> 00:03:41,450 >> Així que només un parell de coses sobre si Swift. 68 00:03:41,450 --> 00:03:43,580 Es tracta d'un llenguatge compilat. 69 00:03:43,580 --> 00:03:45,870 Però veuràs que alguns de les característiques que utilitzem 70 00:03:45,870 --> 00:03:50,650 Deixeu que es pot utilitzar també en una mica interpretar com una manera també. 71 00:03:50,650 --> 00:03:56,350 >> És prestat Una gran quantitat de la sintaxi de C. Es basa i escrit en C. 72 00:03:56,350 --> 00:04:00,400 I així veurem que hi ha un munt de menjar per emportar 73 00:04:00,400 --> 00:04:04,450 del seu coneixement existent de C que podem port a Swift. 74 00:04:04,450 --> 00:04:07,290 >> Però hi ha coses que fan que sigui molt diferent de C. 75 00:04:07,290 --> 00:04:08,860 Està molt inflexible de tipus. 76 00:04:08,860 --> 00:04:10,380 No hi ha gestió de memòria automàtica. 77 00:04:10,380 --> 00:04:13,170 No hauràs de utilitzar malloc o en qualsevol lloc lliure. 78 00:04:13,170 --> 00:04:15,110 Està dissenyat per a la Generalitat. 79 00:04:15,110 --> 00:04:19,480 En altres paraules, vostè pot utilitzar-lo en tot tipus de contextos, des d'Apple Seguir 80 00:04:19,480 --> 00:04:26,290 per a iPhone tot el camí fins OS X, i fins i tot alguns servidors, fins i tot algunes seqüències d'ordres. 81 00:04:26,290 --> 00:04:28,400 Però anem a veure que el suport per scripting 82 00:04:28,400 --> 00:04:31,360 no ha arribat encara com ho és en altres idiomes. 83 00:04:31,360 --> 00:04:34,930 Així que el més probable podràs fer servir aquesta exclusivament per al desenvolupament 84 00:04:34,930 --> 00:04:37,060 en el seu Mac o un iPhone. 85 00:04:37,060 --> 00:04:40,150 >> I té un munt de característiques modernes. 86 00:04:40,150 --> 00:04:43,380 I moltes d'aquestes coses són coses que tractarem de fer front avui en dia, 87 00:04:43,380 --> 00:04:47,590 sinó també els nostres temes que, francament, podem dedicar cursos sencers. 88 00:04:47,590 --> 00:04:50,140 De fet, CS 51, que és va oferir el proper semestre, 89 00:04:50,140 --> 00:04:53,990 se centra molt en aquests temes que es descriuen a continuació. 90 00:04:53,990 --> 00:04:56,781 Així que vostè pot passar tot un semestre entendre aquestes coses. 91 00:04:56,781 --> 00:04:58,530 Però anem a tractar aconseguir a través d'ells 92 00:04:58,530 --> 00:05:00,800 almenys prou perquè vostè pot entendre el que és 93 00:05:00,800 --> 00:05:03,700 passant quan es mira en un programa de Swift 94 00:05:03,700 --> 00:05:07,310 i ser capaç d'obrir-se pas a través d'ell per al projecte final. 95 00:05:07,310 --> 00:05:10,780 >> Ara una de les millors maneres que vostè pot obtenir informació addicional sobre aquest 96 00:05:10,780 --> 00:05:14,700 és francament només a través d'Apple proporcionat documentació de Swift. 97 00:05:14,700 --> 00:05:16,930 Hi ha una gran quantitat d'APIs que estan disponibles. 98 00:05:16,930 --> 00:05:21,170 I aquesta és una bona base d'operacions per a vostè buscar, coses específiques que vostè 99 00:05:21,170 --> 00:05:23,020 vull fer amb una API que implica iOS. 100 00:05:23,020 --> 00:05:26,350 Si voleu utilitzar la càmera durant exemple, pot començar a buscar aquí, 101 00:05:26,350 --> 00:05:32,540 i també utilitzar Google i Pila Desbordament com ho faria normalment. 102 00:05:32,540 --> 00:05:36,670 >> Teniu alguna pregunta respecte aquest abans de saltar a la dreta dins? 103 00:05:36,670 --> 00:05:37,880 Tot bé. 104 00:05:37,880 --> 00:05:38,700 Anem a passar. 105 00:05:38,700 --> 00:05:42,620 >> Així que primer, tinc un nombre d'arxius d'exemple. 106 00:05:42,620 --> 00:05:46,040 I jo vaig a intentar fer un pas a través d'ells amb relativa rapidesa. 107 00:05:46,040 --> 00:05:49,190 Aquest és l'arxiu Hello World per Swift. 108 00:05:49,190 --> 00:05:51,050 És molt simple. 109 00:05:51,050 --> 00:05:54,360 No hi ha manera més comentaris que hi ha codi real. 110 00:05:54,360 --> 00:05:57,100 Observeu el codi real està en la part inferior en la línia 14. 111 00:05:57,100 --> 00:05:57,980 Diu impressió. 112 00:05:57,980 --> 00:05:59,820 I llavors és una crida a la funció. 113 00:05:59,820 --> 00:06:03,010 Estem passant en ella una string anomenat Hola CS50. 114 00:06:03,010 --> 00:06:04,750 Recordeu que no hi ha punt i coma. 115 00:06:04,750 --> 00:06:07,010 Recordeu que no hi ha int main. 116 00:06:07,010 --> 00:06:10,392 No hi ha cap dels crosta que teníem amb C. 117 00:06:10,392 --> 00:06:15,020 Quan estem utilitzant Swift d'aquesta manera, que només s'escriu en un arxiu de text 118 00:06:15,020 --> 00:06:18,340 i s'emmagatzema a l'ordinador, a continuació, Puc compilar i executar-lo. 119 00:06:18,340 --> 00:06:20,920 >> Noteu que aquí estic no fer servir l'IDE CS50. 120 00:06:20,920 --> 00:06:24,460 Això suposa que sóc córrer i que estic en OS X, 121 00:06:24,460 --> 00:06:27,870 i que he Xcode ja instal·lat en aquesta màquina perquè aquest 122 00:06:27,870 --> 00:06:29,080 per realment funció. 123 00:06:29,080 --> 00:06:33,349 Però això és només un arxiu de text normal que llavors podem recopilar i editar. 124 00:06:33,349 --> 00:06:34,890 Així que anem a veure com funciona en realitat. 125 00:06:34,890 --> 00:06:37,430 I si vull compilar? 126 00:06:37,430 --> 00:06:40,450 1.Swift swiftc. 127 00:06:40,450 --> 00:06:42,960 Després d'un moment o dos, veurà que tenim ara 128 00:06:42,960 --> 00:06:45,360 compilat aquesta en un arxiu anomenat 1. 129 00:06:45,360 --> 00:06:51,090 I ara hem imprès nostra CS50, la nostra aplicació Hello World lloc. 130 00:06:51,090 --> 00:06:54,690 >> Note altra cosa com així és que, per defecte, 131 00:06:54,690 --> 00:07:00,090 que no teníem a l'entrada a / per imprimir una nova línia. 132 00:07:00,090 --> 00:07:05,315 Per defecte, la funció d'impressió en Swift s'imprimirà una nova línia per a vostè. 133 00:07:05,315 --> 00:07:09,284 Pot passar un opcional addicional paràmetre per dir-li que no ho fes. 134 00:07:09,284 --> 00:07:10,950 Però Google per obtenir més informació al respecte. 135 00:07:10,950 --> 00:07:13,450 Per defecte, es farà la línia d'impressió. 136 00:07:13,450 --> 00:07:16,420 >> Molt bé, així que anem a passar després a algunes altres coses. 137 00:07:16,420 --> 00:07:18,620 Llavors, com podem realment definir variables? 138 00:07:18,620 --> 00:07:21,960 Podem fer això és l'ús de un de dos mètodes. 139 00:07:21,960 --> 00:07:26,122 I el que vull dir-te sobre primera és aquesta definició let. 140 00:07:26,122 --> 00:07:27,830 I això és important perquè efectivament 141 00:07:27,830 --> 00:07:30,240 el que estem fent és definir una constant. 142 00:07:30,240 --> 00:07:34,010 Crearem una variable, o més aviat una crida nom de constant, 143 00:07:34,010 --> 00:07:38,200 proporcionar a ella alguns data-- en aquest cas, la cadena de Dan. 144 00:07:38,200 --> 00:07:40,630 Però a través d'aquest let paraula clau, estem dient 145 00:07:40,630 --> 00:07:43,860 que aquest variable-- o nou constant-- anomenada 146 00:07:43,860 --> 00:07:46,220 nom mai va ser canviat. 147 00:07:46,220 --> 00:07:50,120 Serà immutable al llarg la durada d'aquest programa 148 00:07:50,120 --> 00:07:53,100 o en tot el durada del context 149 00:07:53,100 --> 00:07:55,390 que aquesta variable està disponible. 150 00:07:55,390 --> 00:08:00,096 >> Això és molt important que quan vostè ha algunes dades que no és 151 00:08:00,096 --> 00:08:02,970 canviarà en el seu programa, i veuràs una varietat d'exemples 152 00:08:02,970 --> 00:08:06,790 de quan volem usar deixar que contra l'altra sintaxi, 153 00:08:06,790 --> 00:08:11,040 és important que utilitzi deixes sempre que sigui possible, perquè aquesta notifica 154 00:08:11,040 --> 00:08:13,740 l'idioma que és no canviarà, 155 00:08:13,740 --> 00:08:16,590 i que en realitat pot dur a terme un munt d'optimitzacions 156 00:08:16,590 --> 00:08:19,560 per millorar la velocitat i la la seguretat del seu programa. 157 00:08:19,560 --> 00:08:24,480 I per la seguretat, no em refereixo a deixar accident amb errors bojos 158 00:08:24,480 --> 00:08:27,910 perquè siguem acostumat a veure en C. 159 00:08:27,910 --> 00:08:32,460 >> Llavors podem utilitzar la interpolació cadena per encapsular aquesta dins d'una cadena. 160 00:08:32,460 --> 00:08:35,200 Així que podem veure en aquest línia d'impressió, imprimir hola, 161 00:08:35,200 --> 00:08:38,950 i després utilitzant barres invertides parens obertes, i després el nom de la meva variable 162 00:08:38,950 --> 00:08:41,809 en aquest cas constant, tancar els parèntesis. 163 00:08:41,809 --> 00:08:46,400 Estic bàsicament després posar la continguts d'aquesta variable anomenada nom 164 00:08:46,400 --> 00:08:50,240 interior de la cadena i després imprimir el resultat allà. 165 00:08:50,240 --> 00:08:54,070 >> Hi ha un altre canvi en aquest arxiu que és el que tinc, al capdamunt, 166 00:08:54,070 --> 00:08:57,340 posar en una línia de muntatge, que bàsicament només especifica 167 00:08:57,340 --> 00:09:00,180 que vull utilitzar el Intèrpret Swift, que 168 00:09:00,180 --> 00:09:04,190 vol dir que ja no he de compilar aquest programa en particular. 169 00:09:04,190 --> 00:09:06,567 Jo només puc córrer com si fos el seu propi guió. 170 00:09:06,567 --> 00:09:09,400 Però això és, en aquest cas, darrere de les escenes estan recopilant i després 171 00:09:09,400 --> 00:09:10,030 s'executa. 172 00:09:10,030 --> 00:09:13,540 És simplement invisibles per a nosaltres. 173 00:09:13,540 --> 00:09:15,880 >> Molt bé, així que seguirem endavant. 174 00:09:15,880 --> 00:09:19,650 Així que hi ha una mica d'engany que acaba de succeir abans. 175 00:09:19,650 --> 00:09:23,230 Et vaig mostrar que jo podria definir una constant. 176 00:09:23,230 --> 00:09:25,490 I podria proporcionar algunes dades per fer-ho. 177 00:09:25,490 --> 00:09:29,240 Però en aquest cas, noto que no ho vaig fer realitat especificar el tipus de dades 178 00:09:29,240 --> 00:09:29,820 que és. 179 00:09:29,820 --> 00:09:32,780 I això és degut a que la compilador, Swift pot 180 00:09:32,780 --> 00:09:36,910 inferir el tipus de dades només es basa en les dades que he posat en ell. 181 00:09:36,910 --> 00:09:41,760 Perquè sap que mitjançant l'avaluació d'aquesta variable d'aquí, aquest dret les dades 182 00:09:41,760 --> 00:09:43,370 aquí, se sap que és una cadena. 183 00:09:43,370 --> 00:09:48,690 I pel que aquest nom de constant, per tant és serà una cadena també. 184 00:09:48,690 --> 00:09:52,730 >> Però també podem ser explícita sobre el tipus que és 185 00:09:52,730 --> 00:09:55,790 utilitzarem per constants o variables 186 00:09:55,790 --> 00:10:01,590 mitjançant l'ús d'aquesta sintaxi instead-- deixi Cadena nom de còlon és igual 187 00:10:01,590 --> 00:10:05,530 Donen, que en aquest cas vol dir que estem va definir una crida nom de constant. 188 00:10:05,530 --> 00:10:07,150 Va a ser de tipus String. 189 00:10:07,150 --> 00:10:10,550 I el valor serà Dan. 190 00:10:10,550 --> 00:10:12,550 Ara l'altra de manera que podem crear variables-- 191 00:10:12,550 --> 00:10:15,549 i aquestes són variables mutables, que vol dir que som, de fet, anem 192 00:10:15,549 --> 00:10:19,670 canviar el seu contingut en algun moment en la durada del context 193 00:10:19,670 --> 00:10:23,890 que aquesta variable es defined-- ens utilitzeu el terme clau var en lloc de deixar. 194 00:10:23,890 --> 00:10:27,400 Però, de nou, per defecte, llevat que sàpiga que necessita per manipular aquestes dades, 195 00:10:27,400 --> 00:10:30,510 tractar d'usar per permetre que millores en el rendiment. 196 00:10:30,510 --> 00:10:33,740 >> En aquest cas, pot llavors especificar el tipus de dades 197 00:10:33,740 --> 00:10:37,650 que esperem estar dins de aquesta nova variable anomenada etiqueta. 198 00:10:37,650 --> 00:10:38,800 Serà una cadena. 199 00:10:38,800 --> 00:10:43,030 I anem a continuació, concatenar dues cordes juntes, la cadena hola, 200 00:10:43,030 --> 00:10:48,070 i la cadena representada per la variables, o més aviat el nom de constant. 201 00:10:48,070 --> 00:10:50,660 >> Així que això és bo perquè aquest és un tant PHP com en la que estem 202 00:10:50,660 --> 00:10:52,250 tenen molt fàcil concatenació de cadenes. 203 00:10:52,250 --> 00:10:56,350 Nosaltres no tenim que automàticament utilitzar qualsevol tipus de gestió de memòria 204 00:10:56,350 --> 00:11:00,580 per augmentar la mida i fer qualsevol tipus de coses divertides allà. 205 00:11:00,580 --> 00:11:05,040 Això funciona com ens hagués fet esperar. 206 00:11:05,040 --> 00:11:09,370 >> Molt bé, alguna pregunta sobre això? 207 00:11:09,370 --> 00:11:12,520 >> Ara l'altra raó per la qual hem de vostè té la capacitat 208 00:11:12,520 --> 00:11:15,490 per ser capaç de definir el tipus de variables de dades són 209 00:11:15,490 --> 00:11:18,170 és perquè de vegades no ho fem voleu inicialitzar variables 210 00:11:18,170 --> 00:11:21,080 amb algunes dades al punt de definició. 211 00:11:21,080 --> 00:11:23,500 Així que en aquest cas, diguem que vull començar a introduir 212 00:11:23,500 --> 00:11:25,040 alguns graus en un llibre de qualificacions. 213 00:11:25,040 --> 00:11:27,530 Bé, jo sé que un dels variables que vull ser 214 00:11:27,530 --> 00:11:30,280 serà un grau mutable. 215 00:11:30,280 --> 00:11:33,010 I també sabem que nosaltres vull que sigui un nombre sencer. 216 00:11:33,010 --> 00:11:36,030 Però potser encara no tenir aquesta qualitat disponible. 217 00:11:36,030 --> 00:11:39,570 >> En Swift, vostè ha de definir el tipus de dades 218 00:11:39,570 --> 00:11:44,000 que s'associa amb una variable o una decepció constant 219 00:11:44,000 --> 00:11:47,840 abans que vostè realment pot utilitzar aquesta variable. 220 00:11:47,840 --> 00:11:51,170 A causa de que està fortament tipat, vostè ha d'associar un tipus 221 00:11:51,170 --> 00:11:52,890 amb aquestes variables. 222 00:11:52,890 --> 00:11:56,120 >> Així que en aquest cas, si jo no tinc adequadament inicialitzat el primer amb algun valor, 223 00:11:56,120 --> 00:12:00,520 llavors he de dir-li el que Swift Espero que el tipus de dades que sigui. 224 00:12:00,520 --> 00:12:02,650 I seguirà sent aquest mateix tipus de dades 225 00:12:02,650 --> 00:12:05,780 en tota la història d'aquest programa. 226 00:12:05,780 --> 00:12:10,050 >> Ara vostè pot tenir la temptació tan aviat com sigui He creat aquesta variable grau 227 00:12:10,050 --> 00:12:13,530 i sempre que una sencer de 100, ara si 228 00:12:13,530 --> 00:12:18,540 Intenta-ho de nou per concatenar una cadena amb aquest sencer, 229 00:12:18,540 --> 00:12:21,610 podria tenir la temptació d'usar encara que l'operador de concatenació de cadenes 230 00:12:21,610 --> 00:12:24,500 com ho vam fer només unes poques línies abans. 231 00:12:24,500 --> 00:12:26,460 Però, per desgràcia, això en realitat no ho farà 232 00:12:26,460 --> 00:12:29,270 treballar, perquè vostè és essencialment realitzar 233 00:12:29,270 --> 00:12:32,380 una operació en dos tipus diferents. 234 00:12:32,380 --> 00:12:36,856 >> Ara bé, això és molt diferent d'altres llenguatges com PHP que són realment 235 00:12:36,856 --> 00:12:38,480 goosey arronsa amb la seva classe de tipus. 236 00:12:38,480 --> 00:12:40,030 Només estan agrada, sí, el que sigui, no m'importa. 237 00:12:40,030 --> 00:12:42,710 Només dóna'm un tipus, i potser jo vaig a fer el correcte. 238 00:12:42,710 --> 00:12:46,060 >> En aquest cas, és Swift molt estricte pel que fa als tipus 239 00:12:46,060 --> 00:12:47,350 que vostè està tractant. 240 00:12:47,350 --> 00:12:50,700 Aquest operador sumatòria o operador de concatenació 241 00:12:50,700 --> 00:12:54,400 té essencialment un parell de diferents opcions possibles. 242 00:12:54,400 --> 00:12:56,970 Vostè pot fer la suma amb nombres enters, o que 243 00:12:56,970 --> 00:13:00,870 pot fer la concatenació de cadenes, i potser algunes altres coses també. 244 00:13:00,870 --> 00:13:05,550 Però si aquest operador no reconeix el que està en cada costat d'ella, 245 00:13:05,550 --> 00:13:10,452 o més aviat la combinació dels dos tipus, no és el que està esperant, 246 00:13:10,452 --> 00:13:11,910 llavors va a conduir a la caiguda. 247 00:13:11,910 --> 00:13:16,690 >> Així que en aquest cas, ¿què significa tenir una cadena més un nombre enter? 248 00:13:16,690 --> 00:13:18,880 Bé en el context de això, és probable que volem 249 00:13:18,880 --> 00:13:21,990 fer una operació de concatenació de cadenes. 250 00:13:21,990 --> 00:13:26,420 Però, és clar, l'ordinador no té aquest tipus de context. 251 00:13:26,420 --> 00:13:29,950 I el que hem d'oferir que la informació addicional 252 00:13:29,950 --> 00:13:32,390 per fer-li saber el que és que nosaltres volem fer. 253 00:13:32,390 --> 00:13:36,860 >> Així, en altres paraules, el fet que Swift és fortament tipat 254 00:13:36,860 --> 00:13:39,520 vol dir que vostè ha de fer un mica de treball addicional 255 00:13:39,520 --> 00:13:42,100 per aconseguir que funcioni el manera que vostè desitja. 256 00:13:42,100 --> 00:13:43,710 Però com a resultat, és més segur. 257 00:13:43,710 --> 00:13:46,290 I una vegada que tens prendre en compte aquests tipus, 258 00:13:46,290 --> 00:13:49,300 les coses comencen amb franquesa que funciona prou bé. 259 00:13:49,300 --> 00:13:52,520 >> Així que en aquest cas, llavors ho faria realitzar la concatenació de cadenes 260 00:13:52,520 --> 00:13:56,040 per colada explícitament el nombre sencer a una cadena 261 00:13:56,040 --> 00:13:58,490 embolicant-lo en aquest capital de la funció S String, 262 00:13:58,490 --> 00:14:03,510 i després utilitzant la concatenació de cadenes operador modificar la nostra variable etiqueta, 263 00:14:03,510 --> 00:14:06,280 i després imprimir-lo. 264 00:14:06,280 --> 00:14:08,420 >> Fins ara, tot bé? 265 00:14:08,420 --> 00:14:12,020 Molt bé, anem a passar. 266 00:14:12,020 --> 00:14:16,300 >> Ara bé, hi ha una varietat de dades tipus que podem utilitzar en Swift. 267 00:14:16,300 --> 00:14:21,620 Com han acostumat a, podem crear una matriu mutable. 268 00:14:21,620 --> 00:14:26,140 I aquesta matriu només pot contenir un sol tipus. 269 00:14:26,140 --> 00:14:30,360 >> Així que en aquest cas, crearem 1 mutables arrays d'enters, els quals 270 00:14:30,360 --> 00:14:34,800 l'anomenarem graus, i podrem per emmagatzemar que en aquest claudàtor 271 00:14:34,800 --> 00:14:38,650 format que t'has acostumat en una varietat d'altres idiomes. 272 00:14:38,650 --> 00:14:41,150 Però notem que aquí estem la definició d'un parell de coses. 273 00:14:41,150 --> 00:14:45,350 graus és un variable-- mutable No fem servir la paraula clau let. 274 00:14:45,350 --> 00:14:49,620 Així que això significa llavors podem modificar el contingut d'aquesta matriu. 275 00:14:49,620 --> 00:14:53,420 És de tipus Array Int, i podem dir que 276 00:14:53,420 --> 00:14:56,260 en base a aquests claudàtors aquí. 277 00:14:56,260 --> 00:14:58,930 >> Ara una de les coses bones sobre això és que 278 00:14:58,930 --> 00:15:02,310 tenir accés a una gran quantitat de informació adicional 279 00:15:02,310 --> 00:15:07,110 sobre la matriu només usar alguna notació de punt simple. 280 00:15:07,110 --> 00:15:10,500 Així, per exemple, grades.count ofereix a nosaltres 281 00:15:10,500 --> 00:15:14,820 el nombre d'elements que hi ha en aquest matriu, que podrem accedir a pràcticament 282 00:15:14,820 --> 00:15:19,090 fàcilment usant simplement que la notació de punt. 283 00:15:19,090 --> 00:15:21,830 >> Si voleu afegir addicional articles a aquesta matriu, 284 00:15:21,830 --> 00:15:27,220 no es pot fer l'estil de PHP on s'acaba de definir de manera explícita, 285 00:15:27,220 --> 00:15:30,910 a un índex donat, algun valor que vols inserir. 286 00:15:30,910 --> 00:15:37,210 En el seu lloc, utilitzeu el append mètode en el tipus de matriu 287 00:15:37,210 --> 00:15:40,920 per afegir que el tema, el 95, a aquesta llista. 288 00:15:40,920 --> 00:15:45,990 >> Així que ara aquesta matriu té la següent contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 I ara que hem adjuntem 95 perquè també. 290 00:15:49,270 --> 00:15:51,830 >> Hi ha altres maneres podem afegir coses. 291 00:15:51,830 --> 00:15:55,030 Vostè pot utilitzar realment un operador de suma, 292 00:15:55,030 --> 00:15:59,200 el qual serà interpretat com una operació de matriu de dades annexades. 293 00:15:59,200 --> 00:16:04,680 I a continuació, pot afegir un altre matriu, el contingut és el 70 i el 80, 294 00:16:04,680 --> 00:16:05,560 a aquesta matriu. 295 00:16:05,560 --> 00:16:08,250 Així que ara tenim la continguts en aquesta variable 296 00:16:08,250 --> 00:16:17,220 grades-- 100, 0, 90, 85, 95, 70, i 80. 297 00:16:17,220 --> 00:16:21,850 Això és només una petita sintàctica sucre que Swift ofereix a nosaltres. 298 00:16:21,850 --> 00:16:23,850 >> Així que si volem resumir la graus, estem potser 299 00:16:23,850 --> 00:16:27,340 voldrà repetir sobre tots els elements d'aquest bucle. 300 00:16:27,340 --> 00:16:32,150 I nosaltres tenim, en Swift, la noció d'un bucle for com era d'esperar. 301 00:16:32,150 --> 00:16:35,350 Però la forma en què li indiquem una gamma és lleugerament diferent. 302 00:16:35,350 --> 00:16:37,790 Així doncs, en aquest cas, per Resumint tot, anem a 303 00:16:37,790 --> 00:16:40,650 crearà un temporal anomenada suma variable en ordre per a nosaltres 304 00:16:40,650 --> 00:16:42,580 per mantenir aquest recompte. 305 00:16:42,580 --> 00:16:44,430 >> I noti la nostra per construcció de bucle aquí. 306 00:16:44,430 --> 00:16:46,820 Per índex en 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Així que aquesta construcció, 0 .. 00:17:01,860 dient que crearem una gamma de nombres enters de 0 fins 310 00:17:01,860 --> 00:17:05,750 però excloent grades.count. 311 00:17:05,750 --> 00:17:09,577 Així que aquest serà 0, 1, 2, 3, 4, 5, fins que no obstant això molts un 312 00:17:09,577 --> 00:17:10,410 abans grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Així que això és diferent de la manera en què que normalment s'utilitza per als bucles 314 00:17:14,160 --> 00:17:18,569 on tindria algun índex variables, configurar igual a 0 al principi, 315 00:17:18,569 --> 00:17:25,480 i després integrar que fins a alguns valor menor que el nombre d'elements 316 00:17:25,480 --> 00:17:27,140 en aquesta matriu. 317 00:17:27,140 --> 00:17:29,820 >> Així que hi ha una modificació a aquest, en realitat, 318 00:17:29,820 --> 00:17:35,010 el que ens permet molt fàcilment establir diferents tipus de rangs. 319 00:17:35,010 --> 00:17:40,570 Si canvia aquesta gamma de tres punts, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 això representa l'interval de 0 a grades.count inclusiva, 321 00:17:45,120 --> 00:17:49,260 el que significa que aquest nombre és també a continuació, s'inclou en aquest rang. 322 00:17:49,260 --> 00:17:52,110 >> Però això és molt pràctic per a aquestes coses exactes, 323 00:17:52,110 --> 00:17:54,590 quan hem de realitzar iteracions més de bucle 324 00:17:54,590 --> 00:17:59,630 perquè aquests índexs s'indexen zero, com hem vist en altres idiomes 325 00:17:59,630 --> 00:18:02,360 tant be. 326 00:18:02,360 --> 00:18:05,210 Teniu preguntes sobre aquest per bucle? 327 00:18:05,210 --> 00:18:10,660 >> Així que no hi ha definició implícita d'aquesta variable índex, 328 00:18:10,660 --> 00:18:14,350 el valor comença a 0, i continua en cada iteració del bucle 329 00:18:14,350 --> 00:18:17,950 augmentar en un 1 fins a un punt que és igual a grades.count, 330 00:18:17,950 --> 00:18:20,380 en el punt, el bucle avorta. 331 00:18:20,380 --> 00:18:23,730 >> Tingueu en compte que a la nostra cadena interpolació aquí, 332 00:18:23,730 --> 00:18:26,910 en realitat podem realitzar algunes senzilles manipulacions a aquests valors. 333 00:18:26,910 --> 00:18:31,230 Així índex més 1 farà realitat realitzar una suma d'aquest valor 334 00:18:31,230 --> 00:18:34,780 perquè índex és, en aquest cas, un nombre sencer. 335 00:18:34,780 --> 00:18:37,810 I en aquest punt, ho farà a continuació, es converteix en una cadena 336 00:18:37,810 --> 00:18:42,230 i interpolat en aquesta cadena aquí, i imprès com esperaríem. . 337 00:18:42,230 --> 00:18:44,520 >> I el bo sobre els arrays aquí és 338 00:18:44,520 --> 00:18:50,730 que també som capaços de tenir valors d'anar a buscar i els valors d'ajust 339 00:18:50,730 --> 00:18:54,080 utilitzant el suport de notació quadrada com que hem vist en altres idiomes també. 340 00:18:54,080 --> 00:18:57,130 341 00:18:57,130 --> 00:19:01,030 >> Molt bé, pel que des d'aquí, ara calcular la nostra suma de tots els nostres graus. 342 00:19:01,030 --> 00:19:02,780 Ara espècie de la propera pas lògic seria 343 00:19:02,780 --> 00:19:07,580 fer una operació de divisió per trobar la mitjana d'aquests graus. 344 00:19:07,580 --> 00:19:10,150 Però alguna cosa important aquí està succeint que 345 00:19:10,150 --> 00:19:15,020 és que aquesta suma és potser un nombre sencer. 346 00:19:15,020 --> 00:19:18,020 Però hem de fer alguna mena de doble divisió. 347 00:19:18,020 --> 00:19:20,600 I això serà extremadament important quan 348 00:19:20,600 --> 00:19:24,140 volem realitzar aquesta operació, perquè el que estem dient 349 00:19:24,140 --> 00:19:28,430 és que necessitem en realitat realitzar la divisió en dos dobles. 350 00:19:28,430 --> 00:19:31,370 I de nou, perquè Swift és molt inflexible, 351 00:19:31,370 --> 00:19:36,760 hem d'establir explícitament tota la articles a dobles abans que realment 352 00:19:36,760 --> 00:19:38,300 realitzar aquesta operació. 353 00:19:38,300 --> 00:19:40,550 >> Així que per a nosaltres realitzar doble divisió, 354 00:19:40,550 --> 00:19:43,730 no és suficient per a un sol d'aquests elements per ser un doble. 355 00:19:43,730 --> 00:19:46,400 Tots dos han de ser un doble amb la finalitat d'accelerar la 356 00:19:46,400 --> 00:19:50,860 per assegurar-se que aquest és el que volem fer. 357 00:19:50,860 --> 00:19:54,360 Així que anem a continuació encasellat explícitament la suma que hem calculat més amunt 358 00:19:54,360 --> 00:19:58,970 i el recompte dels graus als dobles, i a continuació, realitzar aquesta operació i emmagatzemar 359 00:19:58,970 --> 00:20:02,390 que en aquesta nova variable, o millor dit, aquesta nova constant anomenada mitjana, 360 00:20:02,390 --> 00:20:06,810 el qual tindrà de quin tipus, t'imagines? 361 00:20:06,810 --> 00:20:07,587 Doble, si. 362 00:20:07,587 --> 00:20:09,420 Així que en aquest cas, no han de especificar 363 00:20:09,420 --> 00:20:13,450 ja que pot deduir-se de la operació de quin tipus de mitjana de dades 364 00:20:13,450 --> 00:20:14,730 serà. 365 00:20:14,730 --> 00:20:19,025 I Swift és en general bastant bona sobre ser capaç d'inferir els tipus. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Vols veure això rotllana, o puc seguir endavant? 368 00:20:24,200 --> 00:20:25,640 Vull seguir endavant. 369 00:20:25,640 --> 00:20:28,130 Qualsevol pregunta sobre alguna cosa d'això? 370 00:20:28,130 --> 00:20:28,630 Gran. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Ara anem a començar a arribar a les bones funcions definitòries stuff--, 373 00:20:35,010 --> 00:20:39,090 i un parell d'altres tipus que són única de Swift que no té 374 00:20:39,090 --> 00:20:41,620 vist en altres idiomes fins a aquest punt, 375 00:20:41,620 --> 00:20:46,290 però estan presents en una altra idiomes que es poden trobar més endavant. 376 00:20:46,290 --> 00:20:48,210 Així que primer si vols per definir una funció, 377 00:20:48,210 --> 00:20:52,170 es defineix amb la paraula covard funció, i després el nom de la funció, 378 00:20:52,170 --> 00:20:56,710 i després entre parèntesi, els arguments que desitja que la funció d'acceptar. 379 00:20:56,710 --> 00:21:00,280 Els arguments han de també specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 També ha d'especificar el tipus de dades que que són, tret que puguin ser inferits. 381 00:21:05,010 --> 00:21:07,500 I veurem que poc advertència en només una mica. 382 00:21:07,500 --> 00:21:09,920 >> Així que en aquest cas tenim una funció crida printGradeCount. 383 00:21:09,920 --> 00:21:12,840 Anem a acceptar una variable-- o més bé en aquest cas, 384 00:21:12,840 --> 00:21:14,450 1 constant-- anomenat llibre de qualificacions. 385 00:21:14,450 --> 00:21:18,517 I que serà de escrigui matriu d'enters. 386 00:21:18,517 --> 00:21:20,600 Ara hi ha alguna cosa això és realment important aquí 387 00:21:20,600 --> 00:21:21,849 que jo vull que entenguis. 388 00:21:21,849 --> 00:21:27,560 És a dir que, per defecte, aquests arguments que són entrades per a aquesta funció són 389 00:21:27,560 --> 00:21:34,380 definit amb una paraula clau implícita let, el que significa que no puc modificar aquesta 390 00:21:34,380 --> 00:21:39,850 variable de llibre de qualificacions aquí. 391 00:21:39,850 --> 00:21:43,360 I aquest tipus de té sentit, perquè vostè està passant dades. 392 00:21:43,360 --> 00:21:45,860 I potser no ho vols de canviar de sota de tu. 393 00:21:45,860 --> 00:21:50,800 És possible esmentar explícitament que aquesta és una variable posant 394 00:21:50,800 --> 00:21:52,070 la paraula clau var aquí. 395 00:21:52,070 --> 00:21:56,832 Però aquesta és una de gotcha que hem persones notat han fet en el passat 396 00:21:56,832 --> 00:21:59,790 és que ells van assumir que es va ser una variable quan, de fet, 397 00:21:59,790 --> 00:22:02,640 és una constant. 398 00:22:02,640 --> 00:22:07,340 >> Molt bé, així que aquí, llavors, en aquest cas, no estem especificant qualsevol tipus de retorn. 399 00:22:07,340 --> 00:22:09,460 Mostrarem com fer-ho que, en un moment. 400 00:22:09,460 --> 00:22:12,340 Però cal notar que aquí tenim només un simple si la condició. 401 00:22:12,340 --> 00:22:14,560 Si el llibre de qualificacions és buit, que en aquest cas 402 00:22:14,560 --> 00:22:19,310 és només la propietat d'aquest sencer matriu, llavors imprimir alguna cosa. 403 00:22:19,310 --> 00:22:23,100 Altrament ho fem una altra cosa. 404 00:22:23,100 --> 00:22:25,000 >> Bastant senzill fins ara crec. 405 00:22:25,000 --> 00:22:27,960 Però aturar-me si té alguna pregunta. 406 00:22:27,960 --> 00:22:33,350 >> Ara aquesta funció, la mitjana, també pren alguns arguments, o més aviat un argument, 407 00:22:33,350 --> 00:22:37,507 que és el llibre de qualificacions, i aquest cop va a tornar un tipus de matrimoni. 408 00:22:37,507 --> 00:22:39,340 A causa que està calculant de la mitjana i és 409 00:22:39,340 --> 00:22:45,010 va tornar realitat que mitjana calculat a la línia que truca. 410 00:22:45,010 --> 00:22:50,070 >> En aquest cas, s'especifica la tornar tipus després d'una fletxa. 411 00:22:50,070 --> 00:22:53,260 I això pot sentir una mica estrany al principi. 412 00:22:53,260 --> 00:22:55,610 Has crescut acostumats a fixar el retorn 413 00:22:55,610 --> 00:22:57,720 escrigui abans del nom de la funció. 414 00:22:57,720 --> 00:23:00,310 Però si et sembla aquest en termes de les matemàtiques, 415 00:23:00,310 --> 00:23:03,320 com quan tens les matemàtiques que defineixen una funció, 416 00:23:03,320 --> 00:23:06,807 vostè té una funció amb alguns entrades, i es produeix una sortida. 417 00:23:06,807 --> 00:23:08,890 I això és exactament el això se suposa que imitar. 418 00:23:08,890 --> 00:23:12,460 I hi ha un parell d'altres llengües que tenen una sintaxi similar també, 419 00:23:12,460 --> 00:23:15,674 però probablement cap que que has vist a CS50. 420 00:23:15,674 --> 00:23:17,090 Però encara no es deixi confondre per això. 421 00:23:17,090 --> 00:23:21,650 La fletxa significa el que està passant per ser retornat en aquest cas. 422 00:23:21,650 --> 00:23:23,650 OK, així que com anem per calcular aquesta mitjana? 423 00:23:23,650 --> 00:23:25,649 Bé, si el llibre de qualificacions està buit, així llavors estem 424 00:23:25,649 --> 00:23:30,731 va a tornar 0, el que potser una forma raonable per tractar això. 425 00:23:30,731 --> 00:23:32,980 No sé, arribarem tornar a això en una mica. 426 00:23:32,980 --> 00:23:34,688 Aquesta realitat no pot ser una manera raonable 427 00:23:34,688 --> 00:23:38,310 per calcular una mitjana si tenim un llibre de qualificacions buida. 428 00:23:38,310 --> 00:23:41,260 >> Després només haurem de realitzem la nostra suma. 429 00:23:41,260 --> 00:23:43,900 Noteu que aquí estem en realitat tenir una versió alternativa d'un 430 00:23:43,900 --> 00:23:49,190 de llaç, el que ens permet iterar sobre cada article en una matriu 431 00:23:49,190 --> 00:23:53,630 i col·locar cada element en la seva pròpia variable. 432 00:23:53,630 --> 00:23:56,200 En especificar per al grau en llibre de qualificacions, el que estem dient 433 00:23:56,200 --> 00:24:00,560 és que anem a implícitament crear una nova constant anomenada 434 00:24:00,560 --> 00:24:05,180 grau que representarà cada article únic en el llibre de qualificacions 435 00:24:05,180 --> 00:24:06,769 cada vegada que el bucle for itera. 436 00:24:06,769 --> 00:24:08,560 Així que la primera vegada que està dirigit, grau ho farà 437 00:24:08,560 --> 00:24:09,800 ser el primer element en el llibre de qualificacions. 438 00:24:09,800 --> 00:24:12,300 La segona vegada que va a ser el segon element, etc., etc. 439 00:24:12,300 --> 00:24:15,970 fins al llibre de qualificacions té esgotat d'elements. 440 00:24:15,970 --> 00:24:20,390 Llavors serem capaços de resumir que grau en la nostra variable sumatòria 441 00:24:20,390 --> 00:24:22,570 i tornar nostre mitjana com hem vist abans. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, alguna pregunta? 444 00:24:26,950 --> 00:24:27,699 Sí? 445 00:24:27,699 --> 00:24:28,990 AUDIÈNCIA: Tinc dues preguntes. 446 00:24:28,990 --> 00:24:33,586 Número u, hipotèticament, pot executar sencer en aquest cas? 447 00:24:33,586 --> 00:24:35,604 No ha de ser un doble, és això correcte? 448 00:24:35,604 --> 00:24:37,520 DONEN AMRMENDARIZ: Pot vostè repetir la pregunta? 449 00:24:37,520 --> 00:24:39,587 AUDIÈNCIA: Puc fer sencer com la mitjana? 450 00:24:39,587 --> 00:24:41,670 DONEN AMRMENDARIZ: Pot vostè fer sencer com una mitjana? 451 00:24:41,670 --> 00:24:45,015 Així retornar un enter mitjana en lloc d'un doble? 452 00:24:45,015 --> 00:24:48,204 >> AUDIÈNCIA: vostè Return-- tenir aquest moment de sota. 453 00:24:48,204 --> 00:24:49,870 DONEN AMRMENDARIZ: Aquí mateix, retorni 0.0? 454 00:24:49,870 --> 00:24:51,790 AUDIÈNCIA: Sí, només tornar 0. 455 00:24:51,790 --> 00:24:56,590 Per tant, serà o bé 80 o 85, però no 85.2. 456 00:24:56,590 --> 00:24:59,465 >> DONEN AMRMENDARIZ: Així que en aquest cas, així que hi ha un parell de maneres diferents 457 00:24:59,465 --> 00:25:00,090 per respondre a això. 458 00:25:00,090 --> 00:25:02,760 Deixin-me els responc en ordre. 459 00:25:02,760 --> 00:25:06,740 Així que si jo només faig aquest retorn 0, un 0 és un valor sencer. 460 00:25:06,740 --> 00:25:09,730 I pel que li causarà una error de tipus per a aquest cas 461 00:25:09,730 --> 00:25:13,210 perquè està esperant un doble però després torna un enter. 462 00:25:13,210 --> 00:25:16,770 Si vull tornar un sencer, puc. 463 00:25:16,770 --> 00:25:20,450 Puc fixar el tipus de retorn a int, retorna 0 aquí, 464 00:25:20,450 --> 00:25:22,047 i no realitzar la doble divisió. 465 00:25:22,047 --> 00:25:23,880 Però llavors estaríem fent la divisió entera. 466 00:25:23,880 --> 00:25:27,080 I pel que llavors no aconseguir la mitjana que hauríem possiblement esperar. 467 00:25:27,080 --> 00:25:29,210 Però sí podem modificar els tipus d'aquesta manera. 468 00:25:29,210 --> 00:25:32,598 >> AUDIÈNCIA: ¿I en segon lloc, tenen el doble a la part superior. 469 00:25:32,598 --> 00:25:35,502 Però a baix, quan fer tornar Doble Doble, 470 00:25:35,502 --> 00:25:38,280 que ja és de forma automàtica tornar format doble. 471 00:25:38,280 --> 00:25:42,278 Per què vostè encara ha de definir- amb la fletxa a la part superior amb un doble? 472 00:25:42,278 --> 00:25:45,010 >> DONEN AMRMENDARIZ: Així en el cas, això és part 473 00:25:45,010 --> 00:25:50,580 d'ell-- el que repetir la pregunta, perquè és implícita de la declaració 474 00:25:50,580 --> 00:25:56,030 tipus aquí, quin tipus d'aquesta realitat És a dir, hem de ser explícit amb Swift 475 00:25:56,030 --> 00:25:59,970 sobre el que volem tornaran d'aquesta funció 476 00:25:59,970 --> 00:26:02,690 de manera que quan es realitza escrigui comprovació, es pot assegurar 477 00:26:02,690 --> 00:26:05,850 que el que en realitat hem escrit baix realitat s'ajusta a això. 478 00:26:05,850 --> 00:26:10,225 Així que és una cosa així com un xec amb un mateix tipus de situació. 479 00:26:10,225 --> 00:26:11,050 Però no tracti: 480 00:26:11,050 --> 00:26:12,560 >> AUDIÈNCIA: [inaudible] fletxa? 481 00:26:12,560 --> 00:26:19,490 >> DONEN AMRMENDARIZ: hi ha casos en què podem especificar que podem implícitament 482 00:26:19,490 --> 00:26:21,550 establir el tipus de canvi. 483 00:26:21,550 --> 00:26:23,940 Però en aquest cas, no ho faig crec que això funcionaria. 484 00:26:23,940 --> 00:26:26,190 Hi ha alguna altra sintaxi que veurem més endavant. 485 00:26:26,190 --> 00:26:30,320 486 00:26:30,320 --> 00:26:35,280 >> Molt bé, pel que aquesta font codi és una mica diferent 487 00:26:35,280 --> 00:26:41,839 perquè aquest analitza els arguments de la funció que estem cridant. 488 00:26:41,839 --> 00:26:44,130 Et vaig a ensenyar com funciona abans que realment seguir endavant 489 00:26:44,130 --> 00:26:48,050 a algunes coses interessants que està succeint en Swift. 490 00:26:48,050 --> 00:26:51,870 >> Així que en aquest cas, si jo només corro aquesta codi, observi que el que està fent 491 00:26:51,870 --> 00:26:54,900 mentre que és-, quin tipus de em dóna un error estrany. 492 00:26:54,900 --> 00:26:59,730 He de passar un parell de sencers com un argument de línia d'ordres. 493 00:26:59,730 --> 00:27:06,220 Així que anem a veure, 150 i 80, i prem enter per esbrinar el que està fent en realitat. 494 00:27:06,220 --> 00:27:09,890 S'accepta cadascuna de aquests valors com a nombres enters. 495 00:27:09,890 --> 00:27:12,040 Se'ls està introduint en un llibre de qualificacions. 496 00:27:12,040 --> 00:27:14,470 I després hi ha la realització de que el càlcul mitjana 497 00:27:14,470 --> 00:27:16,650 i la sortida que, com és d'esperar. 498 00:27:16,650 --> 00:27:19,950 >> Però òbviament hi ha alguna cosa que fer amb això algú rebutjant 499 00:27:19,950 --> 00:27:23,300 alguna cosa com un sencer. 500 00:27:23,300 --> 00:27:27,300 Com es pot recordar de quan érem es tracta d'arguments de la línia d'ordres 501 00:27:27,300 --> 00:27:32,640 en C i altres llenguatges, la primera 0-èsim element en què l'argument de línia d'ordres 502 00:27:32,640 --> 00:27:35,774 llista és el nom de la comanda que en realitat executem. 503 00:27:35,774 --> 00:27:38,690 Així que en aquest cas, només estic bucle sobre tots els arguments de la línia d'ordres. 504 00:27:38,690 --> 00:27:41,650 Però jo no estic fent cap tipus de luxe comprovar per passar per alt que la primera. 505 00:27:41,650 --> 00:27:45,920 Estic explícitament o implícitament que sóc comprovar quin d'aquests tipus 506 00:27:45,920 --> 00:27:49,900 són sencers abans que realment realitzar aquest càlcul. 507 00:27:49,900 --> 00:27:52,420 >> I això és en essència ¿Què està passant aquí. 508 00:27:52,420 --> 00:27:55,860 Per a cada argument en els arguments del procés, 509 00:27:55,860 --> 00:27:59,210 Vaig a fer alguna comprovació. 510 00:27:59,210 --> 00:28:01,970 I en aquest cas, em vaig per tractar de primer convers 511 00:28:01,970 --> 00:28:07,620 aquest argument en un sencer per realitzar una conversió de tipus explícita, 512 00:28:07,620 --> 00:28:12,310 perquè és, a l'entrada, una cadena i no de fet un nombre sencer. 513 00:28:12,310 --> 00:28:18,140 >> Però això és una espècie d'una sintaxi estranya, si el grau és igual a deixar Int (argument). 514 00:28:18,140 --> 00:28:21,120 Què està succeint realment aquí és extremadament 515 00:28:21,120 --> 00:28:24,390 important per al seu ús de Swift. 516 00:28:24,390 --> 00:28:27,610 Això és usant el que és anomenat un tipus opcional. 517 00:28:27,610 --> 00:28:34,790 >> Així que aquesta funció Int (argument), retorna no només un sencer, però torna 518 00:28:34,790 --> 00:28:37,470 el que es diu un sencer opcional. 519 00:28:37,470 --> 00:28:41,200 I pel que aquesta és una espècie de un tipus en la part superior d'un tipus. 520 00:28:41,200 --> 00:28:45,900 Pot espècie d'imaginar com està tornant com un paquet. 521 00:28:45,900 --> 00:28:47,750 I en obrir que paquet, ja sigui 522 00:28:47,750 --> 00:28:53,930 té un nombre sencer, que és el resultat, o no té absolutament res en ella en absolut. 523 00:28:53,930 --> 00:28:58,140 I això és útil com a comprovació d'errors mecanisme, perquè en aquest cas 524 00:28:58,140 --> 00:29:02,080 podem esbrinar, era això conversió reeixida tipus? 525 00:29:02,080 --> 00:29:05,810 Si ho fos, llavors és, de fet, tindrem un nombre enter a l'interior. 526 00:29:05,810 --> 00:29:08,750 En cas contrari, va a tenir una mica de valor que anomenarem nul·la, el que 527 00:29:08,750 --> 00:29:10,920 és representant de cap sencer en absolut. 528 00:29:10,920 --> 00:29:13,270 És realment representativa de res. 529 00:29:13,270 --> 00:29:18,130 >> I pel que aquest si la construcció ens permet desenvolupar el paquet, 530 00:29:18,130 --> 00:29:19,850 que opcional d'unió. 531 00:29:19,850 --> 00:29:25,560 I si som capaços de desenvolupar que empaquetar i trobar un nombre enter a l'interior, 532 00:29:25,560 --> 00:29:27,720 llavors el que estem dient aquí és que ho farem a continuació, 533 00:29:27,720 --> 00:29:33,090 permeten que el valor que s'estableix en aquesta constant anomenat grau. 534 00:29:33,090 --> 00:29:36,590 I aquesta part de la sentència if, la part superior de la sentència if 535 00:29:36,590 --> 00:29:40,390 s'executarà, perquè això desenvolupi amb èxit. 536 00:29:40,390 --> 00:29:43,290 >> Si dóna la casualitat que hi va haver un error potser 537 00:29:43,290 --> 00:29:47,040 en aquesta conversió de tipus explícita a partir d'una cadena en un enter, potser 538 00:29:47,040 --> 00:29:49,160 que és l'ABC de valor, per exemple. 539 00:29:49,160 --> 00:29:52,120 I això és realment no anar per convertir a un enter. 540 00:29:52,120 --> 00:29:55,520 Llavors tornarà a zero, que no és un enter. 541 00:29:55,520 --> 00:29:57,570 I aquesta sentència if bé llavors falli. 542 00:29:57,570 --> 00:30:01,930 grau no existirà perquè no té contingut sencer. 543 00:30:01,930 --> 00:30:06,391 I va a executar aquest bloc cosa al seu lloc. 544 00:30:06,391 --> 00:30:06,890 Sí? 545 00:30:06,890 --> 00:30:09,652 >> AUDIÈNCIA: Nul és N-I-L? 546 00:30:09,652 --> 00:30:11,110 DONEN AMRMENDARIZ: nil és N-I-L, si. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Així que aquest és potser un dels les coses més difícils sobre Swift, 549 00:30:20,310 --> 00:30:23,690 especialment quan vostè està en les males herbes en una aplicació per iOS 550 00:30:23,690 --> 00:30:27,442 i en realitat estàs tractant fer una mica de desenvolupament allà. 551 00:30:27,442 --> 00:30:29,400 Va a estar cridant a vostè sobre opcional. 552 00:30:29,400 --> 00:30:33,050 Serà vostè demanar signes d'interrogació i d'exclamació. 553 00:30:33,050 --> 00:30:37,100 Però una vegada que figura fora-- si dedicar algun temps a esbrinar 554 00:30:37,100 --> 00:30:41,990 el que està passant amb els tipus opcionals, s'estalviarà una gran quantitat de mal de cap 555 00:30:41,990 --> 00:30:46,040 com vostè està tractant de escriure una aplicació en Swift. 556 00:30:46,040 --> 00:30:47,660 >> En realitat és una característica molt poderosa. 557 00:30:47,660 --> 00:30:49,826 I vostè només haurà de prengui la meva paraula per a ella de moment. 558 00:30:49,826 --> 00:30:52,620 Però anem a veure aquesta construcció i alguns altres com ell 559 00:30:52,620 --> 00:30:56,740 en alguns dels altres codi font que li mostrarem en només una mica. 560 00:30:56,740 --> 00:31:00,440 >> Hi ha alguna pregunta inicials aquí? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Així que el menjar per emportar important és que una Tipus opcional és una espècie de metatipo. 563 00:31:08,690 --> 00:31:12,500 O bé té un valor, i si ho fa, llavors 564 00:31:12,500 --> 00:31:18,110 potser haurà de valor associat amb ell, o no té cap valor, 565 00:31:18,110 --> 00:31:19,620 i es representa per nul·la. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 La resta d'aquest és potser com era d'esperar. 568 00:31:28,870 --> 00:31:32,900 >> Així que anem a la rampa sobre de la dificultat una vegada més. 569 00:31:32,900 --> 00:31:37,070 I aquesta vegada, anem a fer una ullada a alguns altres tipus de dades que existeixen en realitat. 570 00:31:37,070 --> 00:31:41,290 Un d'ells és dels diccionaris, que és molt similar als diccionaris de Python. 571 00:31:41,290 --> 00:31:48,270 És una cosa similar a una taula hash en C. Es tracta essencialment d'un mapeig de tecles 572 00:31:48,270 --> 00:31:49,820 on les claus poden ser cadenes. 573 00:31:49,820 --> 00:31:52,670 I quan vostè mira cap amunt aquestes claus, aquestes claus tindran un valor. 574 00:31:52,670 --> 00:31:56,020 Així que no és del tot un arsenal, però en canvi, més estretament associat 575 00:31:56,020 --> 00:31:58,810 a un mapa de hash o una taula hash. 576 00:31:58,810 --> 00:32:02,420 >> Anem a veure com això es suposa a treballar abans que realment 577 00:32:02,420 --> 00:32:05,210 entrar en el propi codi font. 578 00:32:05,210 --> 00:32:07,680 Si jo només corro això, res realment succeeix. 579 00:32:07,680 --> 00:32:12,430 M'està dient que estic esperant alguns paràmetres del tipus següent. 580 00:32:12,430 --> 00:32:16,050 Així que vaig a donar a que alguns noms de problemes, 581 00:32:16,050 --> 00:32:18,490 així pset0, potser em van donar 100. 582 00:32:18,490 --> 00:32:20,790 I pset1, tinc maig 1. 583 00:32:20,790 --> 00:32:24,630 I després en l'examen, em ho va fer molt bé i va aconseguir 30. 584 00:32:24,630 --> 00:32:27,180 I vaja, em va colpejar un espai aquí. 585 00:32:27,180 --> 00:32:30,940 >> Quan vaig arribar a Enter, es pot veure que realitzi un càlcul. 586 00:32:30,940 --> 00:32:33,740 Diu llibre de qualificacions és de tres graus, pset1, pset0, examen. 587 00:32:33,740 --> 00:32:36,120 I el llibre de qualificacions té aquesta mitjana específic. 588 00:32:36,120 --> 00:32:38,370 Així que de nou, estem treballant amb aquesta idea del llibre de qualificacions, 589 00:32:38,370 --> 00:32:44,650 però continuarem la iteració amb la complexitat de la nostra funció. 590 00:32:44,650 --> 00:32:47,650 >> Així que en l'inici, només som crearà una funció que 591 00:32:47,650 --> 00:32:49,390 és responsable de la impressió de l'ús. 592 00:32:49,390 --> 00:32:51,920 I hi ha aquesta sortida funció que acaba de 593 00:32:51,920 --> 00:32:53,710 la força sortir de l'aplicació. 594 00:32:53,710 --> 00:32:56,530 Això no és una cosa que que utilitzarà en iOS. 595 00:32:56,530 --> 00:32:59,750 Això només és, en aquest cas, amb un argument de línia d'ordres. 596 00:32:59,750 --> 00:33:01,990 A continuació anem a començar a avançar cap a Xcode. 597 00:33:01,990 --> 00:33:07,760 Però això és específic d'un comandament programa d'estil de línia en Swift. 598 00:33:07,760 --> 00:33:11,490 >> Fem una ullada a alguns les coses interessants aquí. 599 00:33:11,490 --> 00:33:15,150 Anem a veure, només un parell de coses interessants per esmentar potser 600 00:33:15,150 --> 00:33:19,930 és que en la meva funció de imprimir el nombre de graus, 601 00:33:19,930 --> 00:33:26,090 es pot recordar que vaig tenir aquesta llista de pset1 articles--, pset0 i examen. 602 00:33:26,090 --> 00:33:29,130 Vostè pot realment ràpid i fàcil de fer això 603 00:33:29,130 --> 00:33:34,490 prenent el llibre de qualificacions, que és una diccionari que té claus i valors. 604 00:33:34,490 --> 00:33:38,730 Trobar tots els de la clau és a través de el mètode tecles de punts aquí, 605 00:33:38,730 --> 00:33:43,180 i després utilitzar aquest joinWithSeparator, que després prengui totes les claus 606 00:33:43,180 --> 00:33:48,590 que havíem escrit en, o pset1-- ho sento, pset0, pset1 i exam-- 607 00:33:48,590 --> 00:33:53,030 i concatenar junts usant una coma i un espai 608 00:33:53,030 --> 00:33:55,400 per crear una cadena llarga. 609 00:33:55,400 --> 00:34:00,190 Aquesta operació de combinació és simplement fenomenal útil en una varietat de contextos. 610 00:34:00,190 --> 00:34:03,450 I el que és aquest joinWithSeparator. 611 00:34:03,450 --> 00:34:06,939 >> I això és una cosa que és canviat d'1 a Swift Swift 2. 612 00:34:06,939 --> 00:34:08,730 Solia haver-hi un Style-- Python si estàs 613 00:34:08,730 --> 00:34:13,219 familiaritzats amb Python-- 1 Python estil unir mètode de cordes. 614 00:34:13,219 --> 00:34:15,699 Però això ja no és en el cas de Swift 2. 615 00:34:15,699 --> 00:34:19,400 Vostè vol utilitzar aquesta opció si voleu per concatenar una sèrie de coses 616 00:34:19,400 --> 00:34:23,380 juntament amb una cadena. 617 00:34:23,380 --> 00:34:27,889 >> Així que potser llavors en el nostre discussió de mitjana abans, 618 00:34:27,889 --> 00:34:32,659 fa una mica més de sentit per a nosaltres per ajustar la funció mitjana 619 00:34:32,659 --> 00:34:36,610 ser un doble opcional en lloc que un doble explícit. 620 00:34:36,610 --> 00:34:39,239 Perquè havíem de condició inusual en el qual, 621 00:34:39,239 --> 00:34:41,550 ¿I si en realitat llibre de qualificacions no té valors dins d'ella? 622 00:34:41,550 --> 00:34:44,280 Què li dec la rendibilitat mitjana? 623 00:34:44,280 --> 00:34:46,350 >> Bé, potser en C que hauria fet alguna cosa 624 00:34:46,350 --> 00:34:50,040 com sempre un valor sentinella, com 0.0, o potser un nombre negatiu, 625 00:34:50,040 --> 00:34:53,690 o alguna cosa només representa el fet de que hi havia alguna condició d'error 626 00:34:53,690 --> 00:34:57,910 i que potser en realitat no té la capacitat de calcular aquesta mitjana. 627 00:34:57,910 --> 00:35:05,590 Bé, la bellesa de l'especificació d'un Tipus opcional seria fer això. 628 00:35:05,590 --> 00:35:09,540 I ara estic dient totes aquestes paraules, però això en realitat no utilitza opcionals. 629 00:35:09,540 --> 00:35:12,970 Però anem a veure que en tan sols minut en el qual podem establerts mitjana 630 00:35:12,970 --> 00:35:17,230 ser un tipus de dades opcional de manera que si en realitat retorna algunes dades, a continuació, 631 00:35:17,230 --> 00:35:18,470 tornarem aquestes dades. 632 00:35:18,470 --> 00:35:20,570 Altrament, tornarem nil, dient que aquest 633 00:35:20,570 --> 00:35:22,200 no té còmput significatiu. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Anem a passar a una altra cosa. 636 00:35:28,570 --> 00:35:35,910 Així que des d'aquí, hem estat veient tots aquests exemples en la línia d'ordres. 637 00:35:35,910 --> 00:35:39,470 Però en realitat el que vas que es tracta d'és Xcode. 638 00:35:39,470 --> 00:35:43,720 I una de les coses bones de Xcode és, i específicament en Swift, 639 00:35:43,720 --> 00:35:47,450 és que tenim aquest El va anomenar un parc infantil. 640 00:35:47,450 --> 00:35:51,470 I un parc infantil és no és en absolut una aplicació per iOS. 641 00:35:51,470 --> 00:35:54,751 Però li permet experimentar amb Swift en una manera molt fàcil. 642 00:35:54,751 --> 00:35:56,000 Pot escriure tot el codi. 643 00:35:56,000 --> 00:35:58,140 Està molt bé la sintaxi ressaltada aquí. 644 00:35:58,140 --> 00:36:01,600 Quan es crea un nou arxiu, se us demanarà si voleu crear un parc infantil. 645 00:36:01,600 --> 00:36:08,720 Però el millor de la Zona lúdica és que a la dreta de la finestra, 646 00:36:08,720 --> 00:36:12,020 és el que realment li mostri sortida des del codi. 647 00:36:12,020 --> 00:36:16,110 Així que si em desplaço cap avall, podem veure el que la sortida de diverses línies de codi 648 00:36:16,110 --> 00:36:17,200 en realitat passa a ser. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Així que en aquest cas, anem a canviar de direcció una mica 651 00:36:26,790 --> 00:36:30,960 i parlar d'alguna cosa que és realment important d'aquesta manera d'alt nivell 652 00:36:30,960 --> 00:36:34,020 que Swift opera, i és aquesta idea de tancaments. 653 00:36:34,020 --> 00:36:36,960 I del que has vist aquesta una mica de JavaScript. 654 00:36:36,960 --> 00:36:40,770 Per a aquells de vostès que estan en CS50, tancaments 655 00:36:40,770 --> 00:36:47,240 són molt populars molt bona manera de fer-ho, coses d'alt nivell en les llengües modernes. 656 00:36:47,240 --> 00:36:50,270 Però també és una mica difícil de embolicar el seu cap al voltant de la primera vegada. 657 00:36:50,270 --> 00:36:52,269 Així que si vostè busca en aquest primera vegada, això està bé. 658 00:36:52,269 --> 00:36:56,740 Només cal mirar el codi font i veure si vostè pot resoldre a casa. 659 00:36:56,740 --> 00:37:01,050 >> Així que en aquest cas, diguem que tenim que vulgueu crear una gran quantitat d'exponents 660 00:37:01,050 --> 00:37:04,134 amb algun valor fix. 661 00:37:04,134 --> 00:37:05,800 Així que en aquest cas puc crear una funció. 662 00:37:05,800 --> 00:37:09,270 Vaig a dir-poder de 2 l'únic propòsit en la vida 663 00:37:09,270 --> 00:37:15,770 és prendre alguna entrada i doble ella, i tornar aquest valor. 664 00:37:15,770 --> 00:37:21,210 Noteu que aquí estic acceptar un tipus de dades. 665 00:37:21,210 --> 00:37:23,137 Serà una variable anomenada x. 666 00:37:23,137 --> 00:37:23,970 És de tipus Double. 667 00:37:23,970 --> 00:37:26,190 I jo vaig a tornar un doble aquí. 668 00:37:26,190 --> 00:37:29,100 I jo només vaig a fer un molt, francament, bastant 669 00:37:29,100 --> 00:37:32,650 manera ingènua de duplicar aquest valor. 670 00:37:32,650 --> 00:37:35,600 I et vaig a mostrar per què això és útil en només un segon. 671 00:37:35,600 --> 00:37:40,418 >> Noteu que aquí tenim aquest rang de nou. alguna cosa en 1, punt 672 00:37:40,418 --> 00:37:44,130 dot dot, 2, el que significa que aquest bucle s'executarà dues vegades. 673 00:37:44,130 --> 00:37:46,480 Però això representa una variable fictícia. 674 00:37:46,480 --> 00:37:49,650 Significa que no estic realment va a estar usant aquesta variable en qualsevol lloc 675 00:37:49,650 --> 00:37:51,070 dins d'aquest bucle. 676 00:37:51,070 --> 00:37:55,380 Només vull aquesta línia de codi per executar dues vegades, 677 00:37:55,380 --> 00:37:58,980 sense necessitat de conèixer el valor d'aquest rang. 678 00:37:58,980 --> 00:38:02,570 >> Així que en aquest cas m'estic quedant resultat X vegades dues vegades, que essencialment 679 00:38:02,570 --> 00:38:06,560 vol dir que jo estic quadrant aquest valor. 680 00:38:06,560 --> 00:38:10,230 I això passa a treballar com esperaríem. 681 00:38:10,230 --> 00:38:16,410 Potència de 2, passant un valor de 2.0 ens dóna una potència de 4. 682 00:38:16,410 --> 00:38:18,810 3.2 obres per 10.24. 683 00:38:18,810 --> 00:38:22,660 >> Ara podem fer un de semblant cosa pel poder de 3. 684 00:38:22,660 --> 00:38:25,330 Però ara canviar només la gamma. 685 00:38:25,330 --> 00:38:28,840 Per variable fictícia en 1 a 3, multiplica 3 vegades, 686 00:38:28,840 --> 00:38:29,830 i fer el mateix. 687 00:38:29,830 --> 00:38:32,240 >> Així que això podria sentir una mica artificial. 688 00:38:32,240 --> 00:38:34,270 Però hi ha una important cosa aquí que 689 00:38:34,270 --> 00:38:37,770 és que mirant a aquests dues funcions, hi ha 690 00:38:37,770 --> 00:38:43,600 només una cosa que és diferent, que és aquest valor en la gamma. 691 00:38:43,600 --> 00:38:46,910 Tota la resta en aquests dos funcions, poder de 3 i la potència de 2, 692 00:38:46,910 --> 00:38:50,440 són, de fet, idèntics perquè funcionen de la mateixa manera. 693 00:38:50,440 --> 00:38:53,460 >> Així que en aquest punt, una mica campana d'alarma ha d'anar fora. 694 00:38:53,460 --> 00:38:56,200 Esperem que el que estàs dient, ja saps, això se sent una mica 695 00:38:56,200 --> 00:38:59,250 com la duplicació d'esforços. 696 00:38:59,250 --> 00:39:02,950 Potser hi ha una forma en què ho faria ser capaç d'encapsular tot això 697 00:39:02,950 --> 00:39:06,630 i proporcionar una funció de o crear una funció que 698 00:39:06,630 --> 00:39:11,550 fa exactament el que vull sense necessitat d'escriure-ho explícitament. 699 00:39:11,550 --> 00:39:15,732 I això és el que el poder d'un tancament ens permet fer. 700 00:39:15,732 --> 00:39:16,940 Així que anem a fer una ullada a això. 701 00:39:16,940 --> 00:39:18,700 I vaig a passar un parell minut en això, perquè aquest 702 00:39:18,700 --> 00:39:20,310 és molt important per a Swift. 703 00:39:20,310 --> 00:39:22,900 Veiem això tot el temps. 704 00:39:22,900 --> 00:39:24,550 Anem a definir una funció. 705 00:39:24,550 --> 00:39:26,380 Serà anomenat powerof. 706 00:39:26,380 --> 00:39:29,470 Es va a acceptar una paràmetre anomenat i de tipus int. 707 00:39:29,470 --> 00:39:32,220 Però fer una ullada a el tipus de retorn. 708 00:39:32,220 --> 00:39:38,730 El tipus de retorn és, en parèntesi, doble fletxa doble. 709 00:39:38,730 --> 00:39:43,370 El que vol dir que aquesta funció, powerof aquesta funció, 710 00:39:43,370 --> 00:39:46,550 està tornant una funció. 711 00:39:46,550 --> 00:39:50,845 Això està acceptant una doble i el retorn d'una doble. 712 00:39:50,845 --> 00:39:53,720 Així que pot sonar una mica boig, però anem a desplaçar-se cap avall una mica 713 00:39:53,720 --> 00:39:55,060 i mira a veure què passa. 714 00:39:55,060 --> 00:39:57,910 Estem dins d'aquesta funció powerof. 715 00:39:57,910 --> 00:40:00,760 Estem creant una nova funció anomenada exponenciador, 716 00:40:00,760 --> 00:40:02,900 però no importa el que és. 717 00:40:02,900 --> 00:40:06,410 >> Tingueu en compte que això no té un valor d'entrada de x. 718 00:40:06,410 --> 00:40:09,910 I que està prenent en una doble i el retorn d'una doble. 719 00:40:09,910 --> 00:40:16,320 I aquest és el mateix codi que ens va veure anteriorment, excepte que el valor de 2 720 00:40:16,320 --> 00:40:20,060 o el valor de 3, que límit superior d'aquest rang, 721 00:40:20,060 --> 00:40:23,210 ha estat substituït amb aquest valor de i, que 722 00:40:23,210 --> 00:40:27,230 va ser el paràmetre inicial de la nostra funció powerof. 723 00:40:27,230 --> 00:40:31,700 I en aquest punt, tornar exponenciador. 724 00:40:31,700 --> 00:40:33,345 Estem tornant a la funció. 725 00:40:33,345 --> 00:40:36,300 726 00:40:36,300 --> 00:40:39,550 >> És una cosa així com una mica de bufat ment. 727 00:40:39,550 --> 00:40:44,360 Però imaginem el que succeeix quan truco a aquesta funció powerof 728 00:40:44,360 --> 00:40:47,610 i passar-hi una cert valor com 2. 729 00:40:47,610 --> 00:40:50,020 El que això significa és que Ara tinc el valor 730 00:40:50,020 --> 00:40:55,130 2 per a I, el que significa que aquest valor i en aquesta funció exponenciador 731 00:40:55,130 --> 00:40:56,410 serà el valor 2. 732 00:40:56,410 --> 00:41:01,290 Però vaig a tornar aquest funció exponenciador. 733 00:41:01,290 --> 00:41:05,900 >> Així que noti el Swift diu que han creat en aquest cas. 734 00:41:05,900 --> 00:41:10,550 deixi plaça està una definició, és una funció que accepta un doble 735 00:41:10,550 --> 00:41:12,610 i retorna un doble. 736 00:41:12,610 --> 00:41:16,590 He creat una funció cosa que els quadrats 737 00:41:16,590 --> 00:41:19,782 l'ús d'aquest mecanisme d'aquí. 738 00:41:19,782 --> 00:41:22,490 I realment el que està passant és que torna aquesta funció 739 00:41:22,490 --> 00:41:26,390 exponenciador, però aquest valor i s'embolica dins d'ella. 740 00:41:26,390 --> 00:41:31,080 I pel que ara cada vegada que utilitzo aquest variable o aquesta constant anomenada 741 00:41:31,080 --> 00:41:35,180 quadrat, que es va a comportar-se com una funció. 742 00:41:35,180 --> 00:41:39,960 I perquè pugui després trucar a aquesta variable de la mateixa manera que jo anomenaria una funció, 743 00:41:39,960 --> 00:41:43,830 i passar-hi un nombre, com en aquest cas 3. 744 00:41:43,830 --> 00:41:45,910 I jo llavors quadrar aquest valor. 745 00:41:45,910 --> 00:41:53,340 Així que 3 al quadrat serà llavors convertir-9, com es pot veure aquí. 746 00:41:53,340 --> 00:41:56,530 >> Realment una bogeria, però això ara em permet l'oportunitat 747 00:41:56,530 --> 00:41:59,040 per crear altres funcions powerof. 748 00:41:59,040 --> 00:42:03,680 Igual que el que puc dir, està bé, així que ara vull per crear una nova funció, powerof (3), 749 00:42:03,680 --> 00:42:06,290 i emmagatzemar que en una anomenat cub constant. 750 00:42:06,290 --> 00:42:10,220 I ara el cub serà un funció separada que després 751 00:42:10,220 --> 00:42:14,800 tenir algun valor com a entrada i galleda que valor com podem veure a la línia de fons 752 00:42:14,800 --> 00:42:16,420 aquí. 753 00:42:16,420 --> 00:42:18,590 cúbica de 2 va donar lloc a 8. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Esperem que les coses bastant ordenada. 756 00:42:22,680 --> 00:42:25,920 Vostè mai ha vist això abans. 757 00:42:25,920 --> 00:42:29,990 Us animo a mirar en els tancaments i investigar això una mica més. 758 00:42:29,990 --> 00:42:33,570 És una cosa realment poderós veiem una gran quantitat en JavaScript i alguns altres idiomes. 759 00:42:33,570 --> 00:42:37,160 És realment vital per la comprensió d'APIs, així 760 00:42:37,160 --> 00:42:38,620 que arribarem a en tan sols uns segons. 761 00:42:38,620 --> 00:42:39,456 Sí? 762 00:42:39,456 --> 00:42:43,740 >> AUDIÈNCIA: En fer powerof (2), entre parèntesis, i després 763 00:42:43,740 --> 00:42:48,764 un altre parèntesi, un altre input-- que està bàsicament la substitució de la plaça. 764 00:42:48,764 --> 00:42:50,930 DONEN AMRMENDARIZ: Així que mira en l'última línia aquí. 765 00:42:50,930 --> 00:42:55,930 En realitat, és totalment possible fer que l'encadenament com vostè suggereix. 766 00:42:55,930 --> 00:43:00,990 Així powerof (5) significa que anem tenir una exponenciador de 5 aquí. 767 00:43:00,990 --> 00:43:04,160 Així que aquest és essencialment serà el el mateix que 4 a la cinquena potència, 768 00:43:04,160 --> 00:43:07,200 perquè hem creat un exponentiating funcionar a la cinquena potència, 769 00:43:07,200 --> 00:43:09,920 i estem passant a funcioni el valor 4. 770 00:43:09,920 --> 00:43:12,619 I tenim que el valor que esperem, 1024. 771 00:43:12,619 --> 00:43:14,785 AUDIÈNCIA: I no és un nomenar, pel que fa més fàcil 772 00:43:14,785 --> 00:43:16,570 llegir, la plaça que sigui. 773 00:43:16,570 --> 00:43:17,903 >> DONEN AMRMENDARIZ: Correcte, exactament. 774 00:43:17,903 --> 00:43:21,120 Així que abans jo només vaig posar en una constant aquí, així 775 00:43:21,120 --> 00:43:23,808 que fa que sigui fàcil d'usar aquest nom. 776 00:43:23,808 --> 00:43:24,308 Sí? 777 00:43:24,308 --> 00:43:26,942 >> AUDIÈNCIA: En aquest context, powerof, és part 778 00:43:26,942 --> 00:43:30,774 del llenguatge de programació a diferència de la forma en què 779 00:43:30,774 --> 00:43:33,952 pensar en powerof en [inaudible]? 780 00:43:33,952 --> 00:43:35,660 DONEN AMRMENDARIZ: Així en aquest cas, powerof 781 00:43:35,660 --> 00:43:39,280 és simplement el nom de la funció que he definit aquí. 782 00:43:39,280 --> 00:43:41,801 Així que no és inherent al llenguatge mateix, 783 00:43:41,801 --> 00:43:43,550 però en canvi, és només una funció que té 784 00:43:43,550 --> 00:43:45,628 aquest nom perquè li dono aquest nom. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 Alguna altra pregunta? 787 00:43:51,920 --> 00:43:52,800 Tot bé. 788 00:43:52,800 --> 00:43:54,750 >> Ara això és genial. 789 00:43:54,750 --> 00:43:58,170 Però no vas a veure un gran quantitat de funcions de tancament que 790 00:43:58,170 --> 00:44:03,440 són com aquest on es defineix, a l'interior d'una funció, una altra funció. 791 00:44:03,440 --> 00:44:04,320 I vostè pot fer-ho. 792 00:44:04,320 --> 00:44:06,430 Però no és la classe de realment necessari, no? 793 00:44:06,430 --> 00:44:09,189 Igual que per què em defineixo aquest funció anomenada exponenciador 794 00:44:09,189 --> 00:44:10,480 i immediatament després tornar-lo. 795 00:44:10,480 --> 00:44:15,220 Per què no puc fer-ho jo sol immediatament tornar aquesta funció? 796 00:44:15,220 --> 00:44:18,890 >> I de fet, això és precisament la idea darrere d'un concepte anomenat 797 00:44:18,890 --> 00:44:22,410 funcions anònimes, en les funcions anònimes en realitat no 798 00:44:22,410 --> 00:44:25,270 tenir un nom, ja que no cal tenir un. 799 00:44:25,270 --> 00:44:28,700 I així, en aquest cas, 7B, podem trobar exactament això. 800 00:44:28,700 --> 00:44:31,470 És tot el mateix codi, fa exactament el mateix, 801 00:44:31,470 --> 00:44:35,570 però ara hem canviat lleugerament per que aquesta funció powerof immediatament 802 00:44:35,570 --> 00:44:37,750 retorna una funció. 803 00:44:37,750 --> 00:44:44,150 Tingueu en compte que després de la tornada, hi ha un claudàtor obert. 804 00:44:44,150 --> 00:44:46,410 Està esperant aquesta entrada doble. 805 00:44:46,410 --> 00:44:48,560 S'espera que la producció doble. 806 00:44:48,560 --> 00:44:52,175 I després la paraula clau en separa el propi codi. 807 00:44:52,175 --> 00:44:53,550 Així que aquesta és una funció anònima. 808 00:44:53,550 --> 00:44:57,030 En realitat, no té nom, mentre que abans que fos anomenat exponenciador. 809 00:44:57,030 --> 00:45:00,229 Però com hem vist, realment no es referia a exponenciador 810 00:45:00,229 --> 00:45:01,270 fora d'aquesta funció. 811 00:45:01,270 --> 00:45:02,470 Així que no importava. 812 00:45:02,470 --> 00:45:06,300 Així que aquesta funció anònima és així cridada perquè és sense nom, 813 00:45:06,300 --> 00:45:09,107 però se segueix utilitzant en el context d'aquest codi. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> Els propers dos que jo sóc va a continuar amb sort 816 00:45:16,079 --> 00:45:17,370 bufa la seva ment una mica. 817 00:45:17,370 --> 00:45:20,410 Podem simplificar això encara més. 818 00:45:20,410 --> 00:45:24,490 Perquè de la mateixa manera que astutament es va assenyalar anteriorment, 819 00:45:24,490 --> 00:45:29,100 potser que sabem, per inferir d'aquest codi, el que 820 00:45:29,100 --> 00:45:31,750 la sortida d'aquest codi va ser. 821 00:45:31,750 --> 00:45:38,180 I de fet, en aquesta funció anònima, De fet podem inferir els tipus de dades. 822 00:45:38,180 --> 00:45:41,650 >> Així que en aquest, ja no de definir explícitament 823 00:45:41,650 --> 00:45:44,850 el tipus de dades que està sent entrada i sortida d'aquesta funció 824 00:45:44,850 --> 00:45:45,890 per un parell de raons. 825 00:45:45,890 --> 00:45:51,390 Una és que hem definit, cap al prototip de la funció envoltant, 826 00:45:51,390 --> 00:45:55,770 quin tipus de dades d'aquest anònims funció hauria entrada i sortida. 827 00:45:55,770 --> 00:45:57,900 I de l'altra, ens pot inferir a partir del codi 828 00:45:57,900 --> 00:46:01,930 aquí baix que estem acceptant d'entrada que és de tipus doble 829 00:46:01,930 --> 00:46:03,670 i el retorn d'una doble. 830 00:46:03,670 --> 00:46:07,890 >> Cal notar que aquí no tenim forma explícita definit els noms de els arguments 831 00:46:07,890 --> 00:46:11,220 que aquesta funció està acceptant. 832 00:46:11,220 --> 00:46:16,180 I així veiem que podem fer referència a aquests paràmetres amb $ 0, $ 1, 833 00:46:16,180 --> 00:46:20,140 així successivament i així successivament, depenent de el nombre d'aquest paràmetre utilitzat 834 00:46:20,140 --> 00:46:20,850 en aquesta funció. 835 00:46:20,850 --> 00:46:23,370 836 00:46:23,370 --> 00:46:29,740 >> Això és una cosa que es va a veure molt és aquest suport arrissat oberta 837 00:46:29,740 --> 00:46:32,797 seguit d'una definició $ 0, i després alguna operació, 838 00:46:32,797 --> 00:46:34,130 i després una clau tancada. 839 00:46:34,130 --> 00:46:38,630 Aquesta és una funció anònima que realitza aquesta operació. 840 00:46:38,630 --> 00:46:42,940 Té aquest paràmetre, on és tipus és inferit. 841 00:46:42,940 --> 00:46:44,860 Aquest primer paràmetre és 0 $. 842 00:46:44,860 --> 00:46:49,010 I alguns operació és succeint en aquest $ 0. 843 00:46:49,010 --> 00:46:52,100 >> AUDIÈNCIA: Llavors el signe de dòlar significa paràmetre bàsicament, 844 00:46:52,100 --> 00:46:53,429 i 0 vol dir que el primer? 845 00:46:53,429 --> 00:46:54,720 DONEN ARMENDARIZ: Això és correcte. 846 00:46:54,720 --> 00:46:59,100 Així que el signe del dòlar significa, bàsicament, paràmetre, i 0 vol dir la primera. 847 00:46:59,100 --> 00:47:02,760 Però funciona específicament en aquest cas en el qual no he anomenat 848 00:47:02,760 --> 00:47:07,940 els arguments en la meva funció anònima. 849 00:47:07,940 --> 00:47:11,119 >> AUDIÈNCIA: El Perl o alguna cosa tenen aquest signe del dòlar, dòlar 0 allà? 850 00:47:11,119 --> 00:47:12,702 DONEN ARMENDARIZ: ¿Qui, ho sento? 851 00:47:12,702 --> 00:47:15,360 AUDIÈNCIA: Té Perl aquest dòlar 0, dòlar 1-- 852 00:47:15,360 --> 00:47:17,318 DONEN ARMENDARIZ: No estic molt familiaritzat amb Perl, 853 00:47:17,318 --> 00:47:21,340 però PHP el que defineix les variables basat en signes de dòlar. 854 00:47:21,340 --> 00:47:26,120 I pot haver alguns idiomes que tenen característiques com això. 855 00:47:26,120 --> 00:47:28,240 De fet, Swift demana prestat un gran quantitat de característiques d'aquest tipus 856 00:47:28,240 --> 00:47:29,489 d'un munt d'altres llengües. 857 00:47:29,489 --> 00:47:32,380 Veiem indicis de Python en ella. 858 00:47:32,380 --> 00:47:35,800 Aquesta definició de tipus sembla provenir de OCaml. 859 00:47:35,800 --> 00:47:38,932 I tenim només un munt de coses d'un munt de diferents idiomes. 860 00:47:38,932 --> 00:47:40,640 Aquest és un dels més agradable coses de Swift 861 00:47:40,640 --> 00:47:43,390 és que es necessita una gran quantitat dels millors idees d'un munt d'idiomes 862 00:47:43,390 --> 00:47:47,229 i tots ells junts calçadors en una llengua super. 863 00:47:47,229 --> 00:47:49,520 De fet, si em permets continuarà bufant la seva ment, 864 00:47:49,520 --> 00:47:51,000 pel que hem estat fent tot això. 865 00:47:51,000 --> 00:47:56,690 Potser podem simplificar això una mica poc a adonar-se que, per descomptat, 866 00:47:56,690 --> 00:48:02,120 Swift té un exponentiating funció incorporada. 867 00:48:02,120 --> 00:48:04,660 Si importo Darwin, que és només la biblioteca que 868 00:48:04,660 --> 00:48:09,680 compta amb aquesta funció anomenada presoner de guerra, ara Puc simplificar el meu poder de la funció 869 00:48:09,680 --> 00:48:11,830 ser el següent. 870 00:48:11,830 --> 00:48:15,860 Es va a tornar aquesta funció anònima. 871 00:48:15,860 --> 00:48:17,950 >> Però mira el fàcil és això ara. 872 00:48:17,950 --> 00:48:22,780 Aquesta és una funció anònima que està acceptant un cert tipus de dades, 873 00:48:22,780 --> 00:48:26,600 i que va a ser un argument específicament, 874 00:48:26,600 --> 00:48:29,320 referenciat en $ 0 que va és de tipus doble. 875 00:48:29,320 --> 00:48:32,680 Es va a tornar un tipus doble. 876 00:48:32,680 --> 00:48:35,760 Però la sentència return ara és implícit. 877 00:48:35,760 --> 00:48:39,990 >> I és aquest estil exacte que és molt, molt freqüent en Swift, 878 00:48:39,990 --> 00:48:40,790 per tot arreu. 879 00:48:40,790 --> 00:48:43,190 Anem a veure això tot el temps en Swift. 880 00:48:43,190 --> 00:48:46,150 Així que estic mostrant que tot això que a causa d'aquesta sintaxi. 881 00:48:46,150 --> 00:48:49,070 Això és molt comú per veure, el que significa que 882 00:48:49,070 --> 00:48:51,420 és una funció anònima que està realitzant 883 00:48:51,420 --> 00:48:54,640 alguna operació en aquests arguments. 884 00:48:54,640 --> 00:48:56,940 I hi ha un rendiment implícit. 885 00:48:56,940 --> 00:49:01,850 Per tant, és absolutament la mateixa cosa per a nosaltres dir això, aquí mateix. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> A causa que aquest arrissat suport és una funció, 888 00:49:08,150 --> 00:49:10,480 estem realitzar aquesta operació en el primer argument. 889 00:49:10,480 --> 00:49:12,170 Anem a tornar això. 890 00:49:12,170 --> 00:49:14,815 Però aquest retorn exterior és tornar tota aquesta funció, 891 00:49:14,815 --> 00:49:19,855 que tota funció anònima que acabem de crear. 892 00:49:19,855 --> 00:49:21,689 Alguna altra pregunta? 893 00:49:21,689 --> 00:49:23,980 Molt bé, no sé si que vostès estan preparats per això, 894 00:49:23,980 --> 00:49:27,455 però podem anar encara més boig amb Swift. 895 00:49:27,455 --> 00:49:28,560 Estàs preparat? 896 00:49:28,560 --> 00:49:29,930 OK, això és genial. 897 00:49:29,930 --> 00:49:35,310 >> Ara realment tenim la capacitat que, en Swift, a causa de la forma modular 898 00:49:35,310 --> 00:49:39,650 i com basat protocol que és, a definir els nostres propis operadors maleïts. 899 00:49:39,650 --> 00:49:44,060 Com en aquest cas, no teníem operador de exponentiation-- així, 900 00:49:44,060 --> 00:49:47,990 per a la realització de poders d'alguna cosa. 901 00:49:47,990 --> 00:49:53,632 Però puc, en Swift, definir un nou operador que fa precisament això. 902 00:49:53,632 --> 00:49:55,590 Així que en aquest cas no hi ha un munt de sintaxi aquí. 903 00:49:55,590 --> 00:49:59,980 I em permetré que vostè miri a casa quan ens fixem en això. 904 00:49:59,980 --> 00:50:06,890 Però estem definint aquest infix operador, **, que llavors ens permetrà, 905 00:50:06,890 --> 00:50:09,840 mitjançant la definició del que Funció ** realitat 906 00:50:09,840 --> 00:50:15,010 no, a acceptar una mà esquerra costat i una mà dreta, 907 00:50:15,010 --> 00:50:21,190 i després per tornar l'exponent d'aquest a mà esquerra a la mà dreta. 908 00:50:21,190 --> 00:50:24,850 >> I ara, de cop i volta, em han creat un nou numerador. 909 00:50:24,850 --> 00:50:29,490 Així ** 2 mar significa 2 a la tercera potència. 910 00:50:29,490 --> 00:50:34,420 [MENT SANA QUE BUFA] Aquest per si t'ha de fer ser com, 911 00:50:34,420 --> 00:50:37,960 OK, cargol C. vaig Swift tot el camí. 912 00:50:37,960 --> 00:50:38,740 Això es fantàstic. 913 00:50:38,740 --> 00:50:40,140 Això és bastant fantàstic. 914 00:50:40,140 --> 00:50:42,240 >> Encara que aquest és un gran exemple. 915 00:50:42,240 --> 00:50:45,570 Però jo mai tinc un cop fora d'aquest exemple realitat 916 00:50:45,570 --> 00:50:46,800 definit meu propi operador. 917 00:50:46,800 --> 00:50:49,710 Però tot i això, mostra una Gran part del poder de Swift 918 00:50:49,710 --> 00:50:54,050 i per què això és en realitat realment molt cool. 919 00:50:54,050 --> 00:50:55,832 OK, no? 920 00:50:55,832 --> 00:50:57,790 AUDIÈNCIA: Si vostè és la definició del seu propi operador, 921 00:50:57,790 --> 00:51:02,940 Com saps que no ho fa per accident tractar de crear un operador que és 922 00:51:02,940 --> 00:51:06,040 en algun lloc de C, igual que amagat en algun lloc de Swift, 923 00:51:06,040 --> 00:51:12,210 com un fosc que pot no haver vist abans. 924 00:51:12,210 --> 00:51:15,050 >> DONEN ARMENDARIZ: Així que si vostè està tractant per definir els seus propis operadors, 925 00:51:15,050 --> 00:51:20,970 hi ha el risc de definir un sobre un operador existent. 926 00:51:20,970 --> 00:51:24,870 Això va en un nivell de detall que Jo no crec que tinguem temps per repassar. 927 00:51:24,870 --> 00:51:27,620 Però aquest és un risc. 928 00:51:27,620 --> 00:51:31,320 I això és, de fet, la raó per la Jo no utilitzar el símbol d'intercalació, que 929 00:51:31,320 --> 00:51:36,210 quan estem escrivint sense electricitat, en general utilitzar abril poc cursor 5 o alguna cosa 930 00:51:36,210 --> 00:51:40,560 així, just quan estem Gchatting amics o el que sigui. 931 00:51:40,560 --> 00:51:43,660 Però en aquest cas, que en realitat hauria causat una col·lisió. 932 00:51:43,660 --> 00:51:46,450 I així vaig evitar només perquè Em va passar a conèixer en aquest cas 933 00:51:46,450 --> 00:51:50,430 que això causar que la col·lisió. 934 00:51:50,430 --> 00:51:52,270 >> Tot bé. 935 00:51:52,270 --> 00:51:55,080 Ara, lamentablement, per els últims set minuts, 936 00:51:55,080 --> 00:51:57,410 He de seguir bufat les seves ments una mica. 937 00:51:57,410 --> 00:52:00,230 Així que permeteu-me que li mostri algunes altres coses també. 938 00:52:00,230 --> 00:52:03,710 >> Li hem mostrat aquesta idea de tenir aquestes funcions anònimes, 939 00:52:03,710 --> 00:52:07,040 aquests tancaments que li permeten classe de passar funcions voltant. 940 00:52:07,040 --> 00:52:08,100 Vostè pot tornar-los. 941 00:52:08,100 --> 00:52:09,490 Vostè pot manipular-los. 942 00:52:09,490 --> 00:52:11,790 Vostè pot fer tot tipus de coses boges. 943 00:52:11,790 --> 00:52:14,850 >> Però una altra cosa que passa a ser útil 944 00:52:14,850 --> 00:52:19,740 és la capacitat de, en oposició de tornar aquestes funcions 945 00:52:19,740 --> 00:52:25,146 en una funció, per passar d'una funció com un paràmetre a una altra funció. 946 00:52:25,146 --> 00:52:30,430 Vostè podria estar pensant bé per què a la Terra anava jo a voler fer una cosa així? 947 00:52:30,430 --> 00:52:33,660 >> Bé, diguem que vull prendre aquest operador que 948 00:52:33,660 --> 00:52:40,260 treballat tan dur per crear i aplicar a un munt de diferents nombres 949 00:52:40,260 --> 00:52:41,770 en una matriu. 950 00:52:41,770 --> 00:52:46,700 Així que en aquest cas tinc una sèrie de integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 I vull duplicar totes. 952 00:52:48,080 --> 00:52:50,430 La forma en què ho faria normalment fer-ho és simplement escriure 953 00:52:50,430 --> 00:52:53,440 un bucle simple perquè itera sobre totes elles 954 00:52:53,440 --> 00:52:57,140 i dur a terme algun tipus de operació quadrat sobre ells, 955 00:52:57,140 --> 00:53:02,700 introduir els nous valors en una nova variables, o millor dit, una nova matriu aquí. 956 00:53:02,700 --> 00:53:07,370 I el valor de la sortida de resultat és llavors tots els arrays, 957 00:53:07,370 --> 00:53:10,200 o més bé tots aquells elements d'ara al quadrat. 958 00:53:10,200 --> 00:53:12,680 >> I podríem fer el mateix cosa per cubicar ella, 959 00:53:12,680 --> 00:53:15,360 però una mica d'alarma ha d'anar fora 960 00:53:15,360 --> 00:53:17,360 dient que potser hi ha d'alguna manera que ho faríem 961 00:53:17,360 --> 00:53:19,860 ser capaç de simplificar això una mica. 962 00:53:19,860 --> 00:53:21,130 I de fet no ho és. 963 00:53:21,130 --> 00:53:25,320 ¿I si poguéssim crear una funció que ens permet 964 00:53:25,320 --> 00:53:28,350 a acceptar, com un depredador, una funció? 965 00:53:28,350 --> 00:53:30,350 Així que en aquest cas, prendre una mirar a aquests arguments. 966 00:53:30,350 --> 00:53:33,220 Anem a acceptar una llista de dobles. 967 00:53:33,220 --> 00:53:35,030 I després anem per acceptar una funció 968 00:53:35,030 --> 00:53:40,990 en una variable anomenada f que està passant prendre un doble i retornar una doble. 969 00:53:40,990 --> 00:53:43,320 I tota la sortida de tota aquesta funció 970 00:53:43,320 --> 00:53:47,310 denominat mapeador va tornar una matriu anomenada doble. 971 00:53:47,310 --> 00:53:52,380 >> El que això després em permetria fer és iterar sobre aquesta llista 972 00:53:52,380 --> 00:53:56,350 i fer el mateix, però ara aplicar aquesta funció en cada 973 00:53:56,350 --> 00:53:58,970 dels valors individuals en aquesta llista. 974 00:53:58,970 --> 00:54:00,750 Així que no se sap molt bé el que és f. 975 00:54:00,750 --> 00:54:02,010 No importa a mi. 976 00:54:02,010 --> 00:54:06,530 Però fins el temps que sigui necessari en un doble, realitza alguna operació sobre el mateix, 977 00:54:06,530 --> 00:54:08,640 i després retorna un Doble, jo llavors 978 00:54:08,640 --> 00:54:13,415 capaç d'assignar aquesta funció a través de cada element de la llista. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> I aquest tipus de programació és anomenades funcions d'ordre superior, 981 00:54:20,930 --> 00:54:24,440 on estem passant funcions voltant com a paràmetres 982 00:54:24,440 --> 00:54:26,430 i fer coses amb les funcions. 983 00:54:26,430 --> 00:54:29,640 És com prendre tots aquests les idees que hem après en CS50 984 00:54:29,640 --> 00:54:31,390 i portar-los espècie de al següent nivell. 985 00:54:31,390 --> 00:54:34,140 I això és tot material estil CS51. 986 00:54:34,140 --> 00:54:37,080 I així anirem a fons més en les classes així. 987 00:54:37,080 --> 00:54:38,930 >> Però això és també important aquí perquè 988 00:54:38,930 --> 00:54:42,010 veure una gran quantitat de funcions que s'utilitzen en Swift 989 00:54:42,010 --> 00:54:45,590 que essencialment fa això, en el qual tenim 990 00:54:45,590 --> 00:54:48,300 alguns números, algunes matriu de nombres. 991 00:54:48,300 --> 00:54:50,850 Anem a passar que matriu en la nostra assignador. 992 00:54:50,850 --> 00:54:55,770 I també anem a passar alguna funció, que 993 00:54:55,770 --> 00:54:57,950 que ja hem definit aquí. 994 00:54:57,950 --> 00:54:59,690 Serà quadrada. 995 00:54:59,690 --> 00:55:02,220 I anem a continuació, quadrar tots els números 996 00:55:02,220 --> 00:55:04,710 i emmagatzemar que en aquest resultat aquí. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Així que aquest cas hem definit la nostra funció pròpia crida mapeador. 999 00:55:11,000 --> 00:55:15,370 Però aquesta cosa exacta és, de fet, integrat en Swift. 1000 00:55:15,370 --> 00:55:18,960 Hi ha una varietat de funcions criden mapa. 1001 00:55:18,960 --> 00:55:21,520 Hi ha una funció de mapa, hi ha una funció de reduir, 1002 00:55:21,520 --> 00:55:25,630 i hi ha una funció de filtre, que essencialment aplicar funcions 1003 00:55:25,630 --> 00:55:30,782 per a cada element en un llista de modificar d'alguna manera. 1004 00:55:30,782 --> 00:55:34,510 >> AUDIÈNCIA: Així que ja està transformant les dades en un altre format 1005 00:55:34,510 --> 00:55:36,134 a través d'un function-- 1006 00:55:36,134 --> 00:55:37,050 DONEN ARMENDARIZ: Correcte. 1007 00:55:37,050 --> 00:55:39,420 Sí, de manera que la funció que estem acceptant 1008 00:55:39,420 --> 00:55:41,790 està transformant les dades d'alguna manera. 1009 00:55:41,790 --> 00:55:44,700 En aquest cas, estàvem bé quadratura, o ens cubicació ella, 1010 00:55:44,700 --> 00:55:50,060 o en realitat, podríem fer cap operació en ell en absolut. 1011 00:55:50,060 --> 00:55:54,150 >> Però m'ho dius a mi mostrar a continuació com aquesta es va a veure a la pràctica. 1012 00:55:54,150 --> 00:55:56,681 I de nou, estic corrent un poc de temps. així que no estic 1013 00:55:56,681 --> 00:55:59,430 serà capaç de passar per sobre de tot del codi font aquí en detall. 1014 00:55:59,430 --> 00:56:00,721 Però m'animo a fer això. 1015 00:56:00,721 --> 00:56:03,850 Anem a publicar tan aviat com possible després d'aquesta xerrada. 1016 00:56:03,850 --> 00:56:07,610 >> Però si vostè pren una ullada a això, assumir que tenim una llista de nombres, 1017 00:56:07,610 --> 00:56:10,260 una sèrie de nombres en aquest variable anomenada nombres. 1018 00:56:10,260 --> 00:56:16,670 Llavors volem realitzar aquesta operació de filtre en aquests números. 1019 00:56:16,670 --> 00:56:19,730 Així filtre és un major funció perquè 1020 00:56:19,730 --> 00:56:24,660 accepta una matriu i també una funció. 1021 00:56:24,660 --> 00:56:28,760 I en cada element en aquesta matriu, que exerceixi aquesta funció. 1022 00:56:28,760 --> 00:56:31,990 >> Si que els retorns de funció cert, manté aquest element. 1023 00:56:31,990 --> 00:56:36,100 Si aquesta funció retorna false, es llença a les escombraries aquest element. 1024 00:56:36,100 --> 00:56:40,480 I llavors es retorna una llista a continuació, que es compon tot 1025 00:56:40,480 --> 00:56:44,360 dels elements que s'han filtrat. 1026 00:56:44,360 --> 00:56:47,150 >> Així que en altres paraules, es tracta de la mateixa idea, el llibre de qualificacions. 1027 00:56:47,150 --> 00:56:50,800 Podríem tenir una varietat de graus en aquest valor es diu nombres. 1028 00:56:50,800 --> 00:56:55,590 Podria ser 100, i 70, i 40, així successivament i així successivament. 1029 00:56:55,590 --> 00:56:59,110 El que això fa és el filtre previ avís que aquest és que el sucre sintàctica 1030 00:56:59,110 --> 00:57:01,310 per una funció anònima. 1031 00:57:01,310 --> 00:57:05,980 Aquesta és una funció anònima dient que el paràmetre que estic acceptant 1032 00:57:05,980 --> 00:57:09,690 serà, si és més gran que 70, 1033 00:57:09,690 --> 00:57:15,837 llavors això va a tornar true, el que significa que que el tema es mantindrà en aquest filtre. 1034 00:57:15,837 --> 00:57:17,920 Així que serem una mica més concreta sobre això. 1035 00:57:17,920 --> 00:57:25,760 Si tinc aquesta sèrie de nombres i consta de 100, 70 i 40, 1036 00:57:25,760 --> 00:57:29,730 Realitzo aquest filtre operació en cada un d'aquests. 1037 00:57:29,730 --> 00:57:33,270 Així que primer és aquest valor de 100. 1038 00:57:33,270 --> 00:57:36,770 100 major o igual a 70 que és veritat, que 1039 00:57:36,770 --> 00:57:41,950 vol dir que es manté en 100 aquesta nova còpia d'aquesta matriu. 1040 00:57:41,950 --> 00:57:44,290 70 també passa. 1041 00:57:44,290 --> 00:57:46,020 Però 40 no. 1042 00:57:46,020 --> 00:57:54,290 Així que el que es retorna en passingCount és la matriu d'elements 100 i 70-- 1043 00:57:54,290 --> 00:57:57,410 100, coma, 70. 1044 00:57:57,410 --> 00:57:59,870 Aquests van ser els dos únics elements que es van mantenir. 1045 00:57:59,870 --> 00:58:03,740 I així, la raó per la qual ràpidament va passar per una gran quantitat d'aquest tipus d'alt ordre 1046 00:58:03,740 --> 00:58:08,680 les coses són perquè això és tan comú El que vas a veure en Swift bastant 1047 00:58:08,680 --> 00:58:16,810 amb freqüència, està realitzant una operació usant aquesta sintaxi funció anònima. 1048 00:58:16,810 --> 00:58:18,450 >> Hi ha algunes coses interessants. 1049 00:58:18,450 --> 00:58:24,730 Els switches són realment de gran abast en Swift, Em refereixo només a la babalà, boig poderós. 1050 00:58:24,730 --> 00:58:28,250 Vostè pot utilitzar l'interruptor, i en realitat es pot aplicar 1051 00:58:28,250 --> 00:58:33,160 als rangs, el que és una bogeria, i fer coses de luxe així. 1052 00:58:33,160 --> 00:58:37,540 >> Però en els últims minuts, Vull saltar per davant bastant lluny 1053 00:58:37,540 --> 00:58:46,940 i li mostrarà un exemple específic de com podem crear en iOS utilitzant Swift. 1054 00:58:46,940 --> 00:58:49,040 Així que quan vostè està fent això, vostè haurà de prendre 1055 00:58:49,040 --> 00:58:51,990 una mirada at-- d'Apple documentació, que 1056 00:58:51,990 --> 00:58:56,084 tenir un munt de molt bons tutorials per a la creació de la seva primera aplicació. 1057 00:58:56,084 --> 00:58:58,250 I m'animo a fer que a causa de que et porten 1058 00:58:58,250 --> 00:59:04,110 a través de tots els passos del que exactament a feu clic a per crear una aplicació de iOS. 1059 00:59:04,110 --> 00:59:07,290 >> Però aquí tenim aquesta aplicació per iOS. 1060 00:59:07,290 --> 00:59:10,960 I és una aplicació molt simple en realitat. 1061 00:59:10,960 --> 00:59:13,840 Si em quedo això, deixa mostrar del que sembla. 1062 00:59:13,840 --> 00:59:19,480 Tot el que fa bàsicament és que tira de la Internet un arxiu JSON 1063 00:59:19,480 --> 00:59:22,300 que he emmagatzemat al servidor. 1064 00:59:22,300 --> 00:59:26,310 I aquest fitxer JSON defineix imatges que permeten 1065 00:59:26,310 --> 00:59:31,680 jo llavors recórrer, en el meu aplicació, imatges del meu servidor web. 1066 00:59:31,680 --> 00:59:32,880 >> Així que tinc aquí getNextImage. 1067 00:59:32,880 --> 00:59:37,100 Es carrega una imatge de la internet, i després ho mostra a la pantalla. 1068 00:59:37,100 --> 00:59:38,200 >> Així que és bastant simple. 1069 00:59:38,200 --> 00:59:41,550 Però l'objectiu aquí és mostrar que la forma en què pot combinar coses 1070 00:59:41,550 --> 00:59:47,820 des de les últimes setmanes de CS50 en una aplicació real iOS. 1071 00:59:47,820 --> 00:59:53,140 En altres paraules, potser un dels coses que vostè voldrà fer 1072 00:59:53,140 --> 00:59:56,340 és tenir una aplicació iOS que pot tirar de dades d'Internet 1073 00:59:56,340 --> 00:59:59,070 i mostrar a l'usuari certa informació. 1074 00:59:59,070 --> 01:00:03,130 És totalment el punt d'aquest codi font aquí. 1075 01:00:03,130 --> 01:00:07,890 >> Així que hi ha molt a dir sobre com fer desenvolupament real iOS. 1076 01:00:07,890 --> 01:00:12,860 Hi ha un munt de sintaxi boja que no hem vist encara prou 1077 01:00:12,860 --> 01:00:15,580 com una classe, el que una classe és en realitat. 1078 01:00:15,580 --> 01:00:19,470 Podem ignorar en gran mesura que, de moment. 1079 01:00:19,470 --> 01:00:23,250 >> Però notem que hem continguda dins d'aquest una varietat de coses 1080 01:00:23,250 --> 01:00:27,720 que ja hem vist com funcions que tenen noms específics. 1081 01:00:27,720 --> 01:00:32,650 I quan donem els Funcions dels noms correctes 1082 01:00:32,650 --> 01:00:36,530 que s'espera per iOS, de fet això se sent una mica màgic. 1083 01:00:36,530 --> 01:00:40,300 Però quan es crea un aplicació iOS, hi ha 1084 01:00:40,300 --> 01:00:47,590 són noms de les funcions específiques que són cridats pel propi telèfon 1085 01:00:47,590 --> 01:00:52,440 ja que l'aplicació es carrega de provar per crear el procés que en realitat 1086 01:00:52,440 --> 01:00:54,787 s'executa l'aplicació. 1087 01:00:54,787 --> 01:00:58,120 Així que de nou, hi ha un munt de coses que jo han de passar per alt aquí perquè puguem 1088 01:00:58,120 --> 01:01:00,570 parlar d'això específicament. 1089 01:01:00,570 --> 01:01:06,050 Però m'animo a mirar potser un altre seminari iOS, però també alguns 1090 01:01:06,050 --> 01:01:09,290 del tutorials en línia de fer un treball molt millor de descriure 1091 01:01:09,290 --> 01:01:11,030 la informació específica. 1092 01:01:11,030 --> 01:01:15,760 >> Però podem veure un parell de coses que són interessants des del codi aquí. 1093 01:01:15,760 --> 01:01:17,950 Recordeu que tenim si les declaracions. 1094 01:01:17,950 --> 01:01:20,400 Per cert, una important cosa sobre si les declaracions 1095 01:01:20,400 --> 01:01:24,860 és que els parèntesis al voltant del Expressió booleana són opcionals. 1096 01:01:24,860 --> 01:01:30,800 Però les claus no són opcionals, no importa que tan poques o moltes línies de codi 1097 01:01:30,800 --> 01:01:32,360 que té en una sentència if. 1098 01:01:32,360 --> 01:01:38,670 No es pot tenir un if sense claus en Swift. 1099 01:01:38,670 --> 01:01:41,000 >> I això és, així, una mena de ximple. 1100 01:01:41,000 --> 01:01:43,910 Però hi ha raons històriques per a això. 1101 01:01:43,910 --> 01:01:46,180 Se suposa que per salvar de tu mateix. 1102 01:01:46,180 --> 01:01:49,899 Així per exemple, no es pot eliminar els claudàtors al voltant de que 1103 01:01:49,899 --> 01:01:50,440 if. 1104 01:01:50,440 --> 01:01:52,730 Aquests són, de fet, necessària. 1105 01:01:52,730 --> 01:01:54,480 Així que us animo a fer una ullada a això. 1106 01:01:54,480 --> 01:01:56,230 Però hi ha una més construeixo que vull 1107 01:01:56,230 --> 01:02:02,640 per mostrar-li sobre Swift que és nou a Swift 2.0 en comparació 1108 01:02:02,640 --> 01:02:08,460 a les versions anteriors de Swift, que és el següent. 1109 01:02:08,460 --> 01:02:11,620 Anem a veure on el vaig posar aquí? 1110 01:02:11,620 --> 01:02:16,630 >> Així que en aquesta funció anomenada fetchJSON, aquesta funció 1111 01:02:16,630 --> 01:02:23,450 és responsable de llençar que JSON presentar des d'una URL, que la casualitat 1112 01:02:23,450 --> 01:02:26,310 que s'executa en el meu CS50 IDE. 1113 01:02:26,310 --> 01:02:28,580 Acabo de començar Apache, posar el meu arxiu JSON allà, 1114 01:02:28,580 --> 01:02:32,110 i sóc capaç després a tirar d'aquest dades d'Internet utilitzant 1115 01:02:32,110 --> 01:02:36,430 aquesta funció i aquest URL, que és proporcionada pel telèfon. 1116 01:02:36,430 --> 01:02:40,490 Està proporcionat per una biblioteca que s'utilitza quan 1117 01:02:40,490 --> 01:02:43,140 que està fent alguns iOS desenvolupament d'aplicacions. 1118 01:02:43,140 --> 01:02:49,690 >> Cal notar aquí que existeix aquest inusual construcció sintàctica diu guàrdia. 1119 01:02:49,690 --> 01:02:53,530 I en realitat tot això és en Swift és una manera de verificar 1120 01:02:53,530 --> 01:02:56,870 que hi ha coses que tenen han complert abans 1121 01:02:56,870 --> 01:03:00,000 procedir amb la resta de la funció. 1122 01:03:00,000 --> 01:03:04,260 Així que podria tenir, usant aquest tipus opcional, 1123 01:03:04,260 --> 01:03:10,530 Jo podria haver trobat l'adreça URL executar aquesta funció NSURL 1124 01:03:10,530 --> 01:03:16,640 i emmagatzemar en un URL que constant, i després de comprovar 1125 01:03:16,640 --> 01:03:20,820 per veure si l'URL va ser nul·la, ja que anava a tornar un tipus opcional. 1126 01:03:20,820 --> 01:03:25,660 I si era nul·la, llavors jo imprimir un error i després tornar. 1127 01:03:25,660 --> 01:03:29,970 >> Però en canvi, el que permet a la guàrdia nosaltres fem és això mateix, 1128 01:03:29,970 --> 01:03:34,550 però assegureu-vos que està realment el cas que URL 1129 01:03:34,550 --> 01:03:38,020 s'ha establert correctament NSURL. 1130 01:03:38,020 --> 01:03:41,810 I si ho és, llavors salta sobre això, i 1131 01:03:41,810 --> 01:03:46,110 li permetrà continuar amb URL haver estat adequadament definit. 1132 01:03:46,110 --> 01:03:48,830 Però si és el cas que url no es defineix correctament, 1133 01:03:48,830 --> 01:03:52,550 si aquesta funció retorna un error o alguna altra cosa inesperada 1134 01:03:52,550 --> 01:03:58,030 que realment passa, aquesta construcció guàrdia ens permet llavors la sortida que l'error 1135 01:03:58,030 --> 01:04:00,390 i tornar immediatament. 1136 01:04:00,390 --> 01:04:00,890 Sí? 1137 01:04:00,890 --> 01:04:04,839 >> AUDIÈNCIA: Així que és una cosa de com un si a continuació, si no? 1138 01:04:04,839 --> 01:04:07,130 DONEN ARMENDARIZ: És una espècie de com un si a continuació, una altra cosa, sí, 1139 01:04:07,130 --> 01:04:14,200 excepte que aquesta url és llavors definit per a tot per sota d'aquest. 1140 01:04:14,200 --> 01:04:20,420 Si passa això guàrdia, llavors realment s'omple de dades 1141 01:04:20,420 --> 01:04:29,500 i utilitzables en els restants codi font en la seva funció. 1142 01:04:29,500 --> 01:04:33,790 Així que sospito que va a començar a veure aquesta guàrdia també. 1143 01:04:33,790 --> 01:04:36,670 I ser conscients. 1144 01:04:36,670 --> 01:04:46,270 >> Així que mirant un parell d'una altra coses, això d'aquí és el que, 1145 01:04:46,270 --> 01:04:53,377 Què et sembla, només es basa en el que estàvem parlant d'abans? 1146 01:04:53,377 --> 01:04:56,650 >> AUDIÈNCIA: Crec que va a executar en la llista? 1147 01:04:56,650 --> 01:04:59,100 >> DONEN ARMENDARIZ: Així que és a prop. 1148 01:04:59,100 --> 01:05:02,360 Aquesta és una funció que estem definint. 1149 01:05:02,360 --> 01:05:07,240 I estem introduint aquesta funció com a argument per a aquesta funció aquí. 1150 01:05:07,240 --> 01:05:09,120 >> AUDIÈNCIA: [inaudible] si no és nul. 1151 01:05:09,120 --> 01:05:11,470 Així que és a la llista, ¿no? 1152 01:05:11,470 --> 01:05:15,450 >> DONEN ARMENDARIZ: Si l'error no és nul·la, de manera que és-- així que he de desplaçar-se. 1153 01:05:15,450 --> 01:05:18,060 Bé, anem a veure, no puc realment desplaçar-se a la dreta aquí. 1154 01:05:18,060 --> 01:05:23,161 error és un argument que s'està passat a aquesta funció anònima. 1155 01:05:23,161 --> 01:05:24,410 Aquesta és una funció anònima. 1156 01:05:24,410 --> 01:05:25,480 No té nom. 1157 01:05:25,480 --> 01:05:29,850 Però estem acceptant aquests tres arguments, dades, resposta i error. 1158 01:05:29,850 --> 01:05:33,590 I va tornar sense efecte, de manera que no va a tornar res. 1159 01:05:33,590 --> 01:05:37,910 I aquest és el contingut d'aquesta funció. 1160 01:05:37,910 --> 01:05:41,961 I després tenim l'accés dins d'aquest la funció de cada un d'aquests arguments. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Així que és un remolí recorregut pel llenguatge. 1163 01:05:48,679 --> 01:05:50,470 Però espero que amb això, espero que vostè pren 1164 01:05:50,470 --> 01:05:54,490 una ullada a alguns dels tutorials específic per al desenvolupament de iOS amb Swift, 1165 01:05:54,490 --> 01:05:57,481 sobretot si vas a Desenvolupador page-- web d'Apple 1166 01:05:57,481 --> 01:05:59,980 tenen un munt de molt bona tutorials perquè pugui començar. 1167 01:05:59,980 --> 01:06:05,010 Però esperem que només aquesta hora de parlar sobre la sintaxi en si ha donat 1168 01:06:05,010 --> 01:06:08,760 prou com per començar amb això. 1169 01:06:08,760 --> 01:06:12,950 >> Posarem tot d'aquesta font codi en la pàgina web seminari 1170 01:06:12,950 --> 01:06:17,800 tan aviat com sigui possible, i també les diapositives pel que té una referència per a tots aquells. 1171 01:06:17,800 --> 01:06:20,530 Però la bona sort amb els seus projectes. 1172 01:06:20,530 --> 01:06:23,640 I moltes gràcies a tots per haver vingut. 1173 01:06:23,640 --> 01:06:26,990 >> [Aplaudiments] 1174 01:06:26,990 --> 01:06:28,026