1 00:00:00,000 --> 00:00:03,332 >> [Muziek] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DAN AMRMENDARIZ: Iedereen, van harte welkom om de CS50 seminar, 4 00:00:09,590 --> 00:00:11,690 iOS App Development met Swift. 5 00:00:11,690 --> 00:00:15,690 Ik ben Dan Armendariz, en ik ben een leermeester informatica hier op Harvard. 6 00:00:15,690 --> 00:00:21,510 >> En het volgende uur gaat worden een wervelwind tour van zoveel spullen 7 00:00:21,510 --> 00:00:25,160 over dit onderwerp als we kunnen passen. 8 00:00:25,160 --> 00:00:29,170 Ik zal alle van de broncode dat je vandaag zult zien online. 9 00:00:29,170 --> 00:00:31,990 We zouden niet in staat zijn om daadwerkelijk te gaan over alles 10 00:00:31,990 --> 00:00:34,810 dat ben ik, dat ik ben toont u in dit uur. 11 00:00:34,810 --> 00:00:37,580 Maar minstens hopelijk door middel van het commentaar van de broncode, 12 00:00:37,580 --> 00:00:40,830 zul je in staat om te proberen te achterhalen wat precies gebeurt voor die dingen 13 00:00:40,830 --> 00:00:42,950 dat we niet helemaal krijgen. 14 00:00:42,950 --> 00:00:46,970 >> Kortom, de structuur van talk van vandaag ziet er als volgt. 15 00:00:46,970 --> 00:00:52,820 We zullen beginnen te doen een aantal fundamentele syntax met de Swift taal, 16 00:00:52,820 --> 00:00:56,290 gaan in enkele van de meer geavanceerde syntaxis van de Swift taal. 17 00:00:56,290 --> 00:00:59,560 Omdat de taal is echt modern en het 18 00:00:59,560 --> 00:01:02,110 heeft veel hoog niveau kenmerken, dingen die we niet hebben 19 00:01:02,110 --> 00:01:06,600 gezien in C heel CS50, of zelfs een aantal van de andere talen 20 00:01:06,600 --> 00:01:09,310 dat we begonnen met behulp van in CS50 zoals PHP, 21 00:01:09,310 --> 00:01:12,670 dus ik ga moeten proberen om introduceren ook een aantal onderwerpen die 22 00:01:12,670 --> 00:01:18,580 zijn aan hogere programmeertalen dat je niet kunt zien in de diepte in CS50, 23 00:01:18,580 --> 00:01:21,380 maar je zal later zien in informatica klassen. 24 00:01:21,380 --> 00:01:25,290 Dus het gaat om een ​​te zijn opeengepakte uur. 25 00:01:25,290 --> 00:01:28,897 En aarzel niet om me te laten weten als je vragen hebt. 26 00:01:28,897 --> 00:01:30,730 Dus als je geïnteresseerd bent in het doen van de ontwikkeling 27 00:01:30,730 --> 00:01:34,442 met Swift, of eigenlijk elke iOS app ontwikkeling, 28 00:01:34,442 --> 00:01:35,900 er zijn een paar eisen. 29 00:01:35,900 --> 00:01:39,940 Allereerst moet je gebruiken MAC, die in de voorbeelden 30 00:01:39,940 --> 00:01:43,880 dat we gaan worden met behulp van vandaag, een relatief nieuwe versie van OS 31 00:01:43,880 --> 00:01:46,580 X. In dit geval ga ik hardlopen X 10.5. 32 00:01:46,580 --> 00:01:48,600 Je kan worden uitgevoerd 10,11 als je wilt. 33 00:01:48,600 --> 00:01:52,430 Maar alles wat je gaat zie betrekt Xcode 7 en later, 34 00:01:52,430 --> 00:01:56,271 die heeft de nieuwste versie van Swift, dat is Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Dit is eigenlijk een vrij belangrijk onderscheid. 36 00:01:58,270 --> 00:02:01,510 Een groot deel van de syntaxis vrij sterk veranderd 37 00:02:01,510 --> 00:02:05,890 in sommige gevallen uit Swift 1,0, die vorig jaar werd uitgebracht, 38 00:02:05,890 --> 00:02:08,514 Swift 2,0, waarbij kwam net uit dit najaar. 39 00:02:08,514 --> 00:02:09,889 Dus we gaan Swift 2.0 laten zien. 40 00:02:09,889 --> 00:02:13,020 Veel van de dingen die u zoeken naar online 41 00:02:13,020 --> 00:02:18,040 wanneer je probeert om extra krijgen informatie over een verscheidenheid van dingen, 42 00:02:18,040 --> 00:02:20,710 wilt u misschien expliciet zoeken naar Swift 2 43 00:02:20,710 --> 00:02:24,950 in plaats van gewoon oud Swift te maken ervoor dat je de juiste syntax. 44 00:02:24,950 --> 00:02:26,920 >> In feite is dit algemeen waar. 45 00:02:26,920 --> 00:02:31,210 Er is een snelle hoeveelheid ontwikkeling gebeurt in de Swift taal 46 00:02:31,210 --> 00:02:35,110 Sinds Apple vrijgegeven, denk ik wat, het is een beetje meer dan een jaar 47 00:02:35,110 --> 00:02:36,370 nu. 48 00:02:36,370 --> 00:02:39,080 En dingen zijn veranderd dramatisch in die tijd. 49 00:02:39,080 --> 00:02:42,160 En dus niet worden gefrustreerd of, wanneer u op zoek bent rond 50 00:02:42,160 --> 00:02:48,310 voor onderwerpen op Swift of hoe te bereiken iets met behulp van enkele voorbeeldcode 51 00:02:48,310 --> 00:02:51,210 of iets dat niet eigenlijk werken aan Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Zorg ervoor dat u op zoek bent specifiek voor die versie 53 00:02:53,790 --> 00:02:58,690 om te proberen om de effecten van de verschillende te minimaliseren versies en dat soort dingen. 54 00:02:58,690 --> 00:03:02,470 >> Ik zal proberen te wijzen op slechts enkele dingen die verschillende oudere versies. 55 00:03:02,470 --> 00:03:03,970 Maar het is iets om op te letten. 56 00:03:03,970 --> 00:03:06,770 Dat is waarschijnlijk gaat worden een van de grootste kopzorgen 57 00:03:06,770 --> 00:03:11,010 dat je zal hebben met de Swift is het vinden Bijvoorbeeld code die ouder is, zelfs alleen 58 00:03:11,010 --> 00:03:14,050 met een paar maanden, probeert te gebruiken het in uw moderne project. 59 00:03:14,050 --> 00:03:15,430 En het gewoon gewoon niet werkt. 60 00:03:15,430 --> 00:03:18,530 Je krijgt compiler fouten, syntax fouten, allerlei gekke dingen. 61 00:03:18,530 --> 00:03:21,580 Dus gewoon geduldig met zijn dat, en je zal hopelijk 62 00:03:21,580 --> 00:03:24,200 hebben een aardige ervaring met Swift algemeen. 63 00:03:24,200 --> 00:03:28,430 >> Nu kun je eigenlijk join-- en ik hoop we eigenlijk nog steeds van dit jaar-- 64 00:03:28,430 --> 00:03:30,910 CS 50 Apple app development team, dat 65 00:03:30,910 --> 00:03:34,680 kunt u geen apps installeren die u op uw iOS-apparaten. 66 00:03:34,680 --> 00:03:39,190 Dus neem een ​​kijkje op deze URL als u geïnteresseerd in dat te doen zijn. 67 00:03:39,190 --> 00:03:41,450 >> Dus gewoon een paar dingen over Swift zelf. 68 00:03:41,450 --> 00:03:43,580 Het is een gecompileerde taal. 69 00:03:43,580 --> 00:03:45,870 Maar je zult zien dat sommige van de functies die we gebruiken 70 00:03:45,870 --> 00:03:50,650 Laat het ook gebruikt worden in een beetje geïnterpreteerd als een manier zo goed. 71 00:03:50,650 --> 00:03:56,350 >> Een groot deel van de syntax is geleend van C. Het is gebaseerd en geschreven in C. 72 00:03:56,350 --> 00:04:00,400 En dus zullen we zien dat er zijn een heleboel afhaalrestaurants 73 00:04:00,400 --> 00:04:04,450 vanuit uw bestaande kennis van C dat we kunnen poort Swift. 74 00:04:04,450 --> 00:04:07,290 >> Maar er zijn dingen die maken het zeer verschillend van C. 75 00:04:07,290 --> 00:04:08,860 Het is zeer sterk getypt. 76 00:04:08,860 --> 00:04:10,380 Er is automatisch geheugenbeheer. 77 00:04:10,380 --> 00:04:13,170 Je bent niet van plan te hebben om gebruik malloc of vrij overal. 78 00:04:13,170 --> 00:04:15,110 Het is ontworpen voor algemeenheid. 79 00:04:15,110 --> 00:04:19,480 Dus met andere woorden, kunt u deze gebruiken in allerlei contexten van Apple Watch 80 00:04:19,480 --> 00:04:26,290 iPhone helemaal naar OS X, en zelfs sommige servers, zelfs een aantal scripts. 81 00:04:26,290 --> 00:04:28,400 Maar we zullen zien dat de ondersteuning voor scripting 82 00:04:28,400 --> 00:04:31,360 is er nog niet helemaal als het is in andere talen. 83 00:04:31,360 --> 00:04:34,930 Dus de meeste kans dat u zult gebruiken dit exclusief voor ontwikkeling 84 00:04:34,930 --> 00:04:37,060 op je Mac of iPhone. 85 00:04:37,060 --> 00:04:40,150 >> En het heeft veel moderne elementen. 86 00:04:40,150 --> 00:04:43,380 En veel van deze dingen zijn dingen die we zullen proberen om vandaag aan te pakken, 87 00:04:43,380 --> 00:04:47,590 maar ook onze onderwerpen die eerlijk gezegd, kunnen we volledige cursussen besteden. 88 00:04:47,590 --> 00:04:50,140 In feite, CS 51, die aangeboden volgende semester, 89 00:04:50,140 --> 00:04:53,990 richt zich veel over deze onderwerpen die hieronder worden beschreven. 90 00:04:53,990 --> 00:04:56,781 Dus je kunt een hele semester doorbrengen het begrijpen van deze dingen. 91 00:04:56,781 --> 00:04:58,530 Maar we gaan proberen door hen te krijgen 92 00:04:58,530 --> 00:05:00,800 in ieder geval genoeg dat je kan begrijpen wat 93 00:05:00,800 --> 00:05:03,700 er aan de hand als je kijkt bij een Swift-programma 94 00:05:03,700 --> 00:05:07,310 en in staat zijn om je weg te hacken door middel van het voor het uiteindelijke project. 95 00:05:07,310 --> 00:05:10,780 >> Nu een van de beste manieren waarop u kunt krijgen meer informatie over dit 96 00:05:10,780 --> 00:05:14,700 is eerlijk gezegd alleen door Apple verschaft documentatie voor Swift. 97 00:05:14,700 --> 00:05:16,930 Er is veel van API's die beschikbaar zijn. 98 00:05:16,930 --> 00:05:21,170 En dit is een goede thuisbasis voor u om te zoeken naar specifieke dingen die je 99 00:05:21,170 --> 00:05:23,020 wilt doen met een API met iOS. 100 00:05:23,020 --> 00:05:26,350 Als u de camera wilt gebruiken voor Zo kunt u bijvoorbeeld op zoek gaan naar hier, 101 00:05:26,350 --> 00:05:32,540 en ook gebruik maken van Google en Stack Overloop zoals u gewend bent. 102 00:05:32,540 --> 00:05:36,670 >> Heeft u vragen over dit voordat we springen in? 103 00:05:36,670 --> 00:05:37,880 Prima. 104 00:05:37,880 --> 00:05:38,700 Laten we verder gaan. 105 00:05:38,700 --> 00:05:42,620 >> Dus eerst, ik heb een aantal voorbeeld bestanden. 106 00:05:42,620 --> 00:05:46,040 En ik ga proberen te stappen doorheen relatief snel. 107 00:05:46,040 --> 00:05:49,190 Dit is het bestand Hello World voor Swift. 108 00:05:49,190 --> 00:05:51,050 Het is heel simpel. 109 00:05:51,050 --> 00:05:54,360 Er is veel meer reacties dan zijn eigenlijke code. 110 00:05:54,360 --> 00:05:57,100 Let op de werkelijke code is op de bodem op lijn 14. 111 00:05:57,100 --> 00:05:57,980 Het zegt afdrukken. 112 00:05:57,980 --> 00:05:59,820 En dan is het een functie aan te roepen. 113 00:05:59,820 --> 00:06:03,010 We passeren erin een snaar genoemd Hallo CS50. 114 00:06:03,010 --> 00:06:04,750 Merk op dat er geen puntkomma's. 115 00:06:04,750 --> 00:06:07,010 Merk op dat er geen int main. 116 00:06:07,010 --> 00:06:10,392 Er is geen van de cruft dat we hadden met C. 117 00:06:10,392 --> 00:06:15,020 Als we gebruiken Swift op deze wijze die net in een tekstbestand geschreven 118 00:06:15,020 --> 00:06:18,340 en opgeslagen op mijn computer, dan Ik kan het compileren en voer het uit. 119 00:06:18,340 --> 00:06:20,920 >> Merk op dat ik hier ben niet met behulp van de CS50 IDE. 120 00:06:20,920 --> 00:06:24,460 Dit veronderstelt dat ik hardlopen en dat ik ben op OS X, 121 00:06:24,460 --> 00:06:27,870 en dat heb ik Xcode al geïnstalleerd op deze machine, zodat deze 122 00:06:27,870 --> 00:06:29,080 daadwerkelijk functioneren. 123 00:06:29,080 --> 00:06:33,349 Maar dit is gewoon een normaal tekstbestand dat we dan kunnen samenstellen en bewerken. 124 00:06:33,349 --> 00:06:34,890 Dus laten we zien hoe dit werkt. 125 00:06:34,890 --> 00:06:37,430 Wat als ik wil om het te compileren? 126 00:06:37,430 --> 00:06:40,450 swiftc 1.Swift. 127 00:06:40,450 --> 00:06:42,960 Na een moment of twee, is het zal zien dat we nu hebben 128 00:06:42,960 --> 00:06:45,360 Dit gecompileerd in een bestand genaamd 1. 129 00:06:45,360 --> 00:06:51,090 En nu hebben we onze CS50 gedrukt, onze Hello World applicatie plaats. 130 00:06:51,090 --> 00:06:54,690 >> Merkt een ander ding als goed is dat standaard, 131 00:06:54,690 --> 00:07:00,090 we niet hoefden te voeren a / n om een ​​nieuwe lijn te drukken. 132 00:07:00,090 --> 00:07:05,315 Standaard wordt de printfunctie in Swift zal een nieuwe lijn af te drukken voor u. 133 00:07:05,315 --> 00:07:09,284 U kunt een optionele extra passeren parameter om het te vertellen dat niet te doen. 134 00:07:09,284 --> 00:07:10,950 Maar Google voor meer informatie over dat. 135 00:07:10,950 --> 00:07:13,450 Standaard zal het afdrukken lijn te doen. 136 00:07:13,450 --> 00:07:16,420 >> Oké, dus laten we verder gaan dan sommige andere dingen. 137 00:07:16,420 --> 00:07:18,620 Dus hoe kunnen we eigenlijk variabelen definiëren? 138 00:07:18,620 --> 00:07:21,960 We kunnen dat doen is met behulp van een van twee methoden. 139 00:07:21,960 --> 00:07:26,122 En degene die ik wil je vertellen over eerste is dit laten definitie. 140 00:07:26,122 --> 00:07:27,830 En dit is belangrijk omdat effectief 141 00:07:27,830 --> 00:07:30,240 wat we doen is het definiëren van een constante. 142 00:07:30,240 --> 00:07:34,010 We gaan naar een variabel te maken, of liever een constante genaamd naam 143 00:07:34,010 --> 00:07:38,200 bieden om het aantal data-- in casu de string Dan. 144 00:07:38,200 --> 00:07:40,630 Maar door het gebruik van deze verhuurde trefwoord, zeggen wij 145 00:07:40,630 --> 00:07:43,860 dat deze variable-- of weer constant-- genoemd 146 00:07:43,860 --> 00:07:46,220 naam nooit worden veranderd. 147 00:07:46,220 --> 00:07:50,120 Het gaat om het hele onveranderlijk zijn de duur van dit programma 148 00:07:50,120 --> 00:07:53,100 of gehele duur van de context 149 00:07:53,100 --> 00:07:55,390 dat die variabele beschikbaar is. 150 00:07:55,390 --> 00:08:00,096 >> Dit is echt belangrijk dat wanneer heb je een aantal gegevens die niet 151 00:08:00,096 --> 00:08:02,970 zal veranderen in uw programma, en je zult een aantal voorbeelden te zien 152 00:08:02,970 --> 00:08:06,790 over wanneer we willen gebruiken laat ten opzichte van de andere syntaxis, 153 00:08:06,790 --> 00:08:11,040 het is belangrijk dat u gebruik te laten waar mogelijk, omdat dit Waarschuwt 154 00:08:11,040 --> 00:08:13,740 de taal die het niet zal worden gewijzigd, 155 00:08:13,740 --> 00:08:16,590 en het kan daadwerkelijk uit te voeren veel optimalisaties 156 00:08:16,590 --> 00:08:19,560 de snelheid verbeteren de veiligheid van uw programma. 157 00:08:19,560 --> 00:08:24,480 En door veiligheid, bedoel ik niet laten Het ongeluk met gekke fouten 158 00:08:24,480 --> 00:08:27,910 dat we misschien gewend aan het zien in C. 159 00:08:27,910 --> 00:08:32,460 >> Vervolgens kunnen we snaar interpolatie dit kapselen binnen een tekenreeks. 160 00:08:32,460 --> 00:08:35,200 Dus we kunnen zien in deze afdrukken lijn, print hello, 161 00:08:35,200 --> 00:08:38,950 en vervolgens met behulp backslash geopend Parens, en dan de naam van mijn variabele 162 00:08:38,950 --> 00:08:41,809 in dit geval constant, sluit de haakjes. 163 00:08:41,809 --> 00:08:46,400 Ik ben in wezen dan zetten de De inhoud van deze naam variabele genaamd 164 00:08:46,400 --> 00:08:50,240 binnenzijde van de snaar en afdrukken van het resultaat daar. 165 00:08:50,240 --> 00:08:54,070 >> Er is nog een andere wijziging in dit bestand en dat is dat ik heb, aan de top, 166 00:08:54,070 --> 00:08:57,340 in een keet lijn, die eigenlijk gewoon specificeert 167 00:08:57,340 --> 00:09:00,180 dat ik wil het gebruiken Swift tolk, die 168 00:09:00,180 --> 00:09:04,190 betekent dat ik niet meer dit specifieke programma samen te stellen. 169 00:09:04,190 --> 00:09:06,567 Ik kan alleen nog maar het als zijn eigen script. 170 00:09:06,567 --> 00:09:09,400 Maar dat is in dit geval achter de schermen wordt samengesteld en vervolgens 171 00:09:09,400 --> 00:09:10,030 wordt uitgevoerd. 172 00:09:10,030 --> 00:09:13,540 Het is gewoon voor ons onzichtbaar. 173 00:09:13,540 --> 00:09:15,880 >> Oké, dus laten we verder gaan. 174 00:09:15,880 --> 00:09:19,650 Dus er is een beetje van bedrog die net eerder gebeurd. 175 00:09:19,650 --> 00:09:23,230 Ik liet zien dat ik kan een constante definiëren. 176 00:09:23,230 --> 00:09:25,490 En ik kon een aantal gegevens om het te doen te bieden. 177 00:09:25,490 --> 00:09:29,240 Maar in dit geval, merken dat ik niet eigenlijk geeft u het type gegevens 178 00:09:29,240 --> 00:09:29,820 dat is het. 179 00:09:29,820 --> 00:09:32,780 En dat komt omdat de compiler, Swift kan 180 00:09:32,780 --> 00:09:36,910 afleiden van het type gegevens alleen gebaseerd op de gegevens die ik in het zet. 181 00:09:36,910 --> 00:09:41,760 Omdat het weet dat deze evaluatie variabele hier, deze gegevens te rechts 182 00:09:41,760 --> 00:09:43,370 Hier, het weet dat het een tekenreeks. 183 00:09:43,370 --> 00:09:48,690 En dus is deze constante naam is daarom gaan naar een string te zijn ook. 184 00:09:48,690 --> 00:09:52,730 >> Maar we kunnen ook expliciet zijn van het type dat is 185 00:09:52,730 --> 00:09:55,790 gaan we gebruiken voor constanten of variabelen 186 00:09:55,790 --> 00:10:01,590 door het gebruik van deze syntaxis instead-- Laat naam colon String gelijk 187 00:10:01,590 --> 00:10:05,530 Dan, wat in dit geval betekent dat we gaat om een ​​constante genaamd naam definiëren. 188 00:10:05,530 --> 00:10:07,150 Het gaat van het type String zijn. 189 00:10:07,150 --> 00:10:10,550 En de waarde gaat Dan zijn. 190 00:10:10,550 --> 00:10:12,550 Nu andersom die we kunnen variables-- creëren 191 00:10:12,550 --> 00:10:15,549 en deze zijn veranderlijke variabelen, die betekent dat we in feite gaan 192 00:10:15,549 --> 00:10:19,670 om hun inhoud ergens veranderen de duur van de context 193 00:10:19,670 --> 00:10:23,890 dat die variabele wordt defined-- we gebruik maken van de var trefwoord in plaats van te laten. 194 00:10:23,890 --> 00:10:27,400 Maar nogmaals, standaard, tenzij je weet die je nodig hebt om die gegevens te manipuleren, 195 00:10:27,400 --> 00:10:30,510 probeert te gebruiken verhuurd voor prestatieverbeteringen. 196 00:10:30,510 --> 00:10:33,740 >> In dit geval, kan ik dan specificeert het type gegevens 197 00:10:33,740 --> 00:10:37,650 dat we verwachten dat de binnenkant van deze nieuwe variabele genaamd label. 198 00:10:37,650 --> 00:10:38,800 Het gaat om een ​​string te zijn. 199 00:10:38,800 --> 00:10:43,030 En we gaan dan aaneenschakelen twee strings samen, de string hello, 200 00:10:43,030 --> 00:10:48,070 en de tekenreeks voorgesteld door de variabele, of liever de constantenaam. 201 00:10:48,070 --> 00:10:50,660 >> Dus dit is mooi omdat dit is enigszins PHP als in dat we 202 00:10:50,660 --> 00:10:52,250 hebben zeer gemakkelijk tekenreekssamenvoegingsoperator. 203 00:10:52,250 --> 00:10:56,350 We hebben niet automatisch te Gebruik een soort van memory management 204 00:10:56,350 --> 00:11:00,580 het vergroten en doe een soort van grappige dingen daar. 205 00:11:00,580 --> 00:11:05,040 Dit werkt zoals we eigenlijk zou verwachten. 206 00:11:05,040 --> 00:11:09,370 >> Oké, vragen over dit? 207 00:11:09,370 --> 00:11:12,520 >> Nu de andere reden moeten we u de mogelijkheid 208 00:11:12,520 --> 00:11:15,490 om te kunnen bepalen welke datatype variabelen 209 00:11:15,490 --> 00:11:18,170 is want soms doen we niet willen variabelen initialiseren 210 00:11:18,170 --> 00:11:21,080 enkele data in de punt van de definitie. 211 00:11:21,080 --> 00:11:23,500 Dus in dit geval, laten we zeggen dat wil ik beginnen met het invoeren 212 00:11:23,500 --> 00:11:25,040 sommige kwaliteiten in een klas boek. 213 00:11:25,040 --> 00:11:27,530 Nou ik weet dat een van de variabelen die ik wil zijn 214 00:11:27,530 --> 00:11:30,280 gaat een veranderlijk kwaliteit zijn. 215 00:11:30,280 --> 00:11:33,010 En we weten ook dat we wil dat het een integer zijn. 216 00:11:33,010 --> 00:11:36,030 Maar toch misschien doen we niet hebben die rang beschikbaar. 217 00:11:36,030 --> 00:11:39,570 >> In Swift, moet je definieert het type gegevens 218 00:11:39,570 --> 00:11:44,000 die is gekoppeld aan een variabele of een laat constante 219 00:11:44,000 --> 00:11:47,840 voordat je kan eigenlijk gebruiken variabele. 220 00:11:47,840 --> 00:11:51,170 Omdat het sterk getypt, je moet een soort associëren 221 00:11:51,170 --> 00:11:52,890 deze variabelen. 222 00:11:52,890 --> 00:11:56,120 >> Dus in dit geval, als ik heb niet goed geïnitialiseerd de eerste met een bepaalde waarde, 223 00:11:56,120 --> 00:12:00,520 dan moet ik zeggen wat Swift Ik verwacht dat de data type te zijn. 224 00:12:00,520 --> 00:12:02,650 En het gaat om te blijven hetzelfde gegevenstype 225 00:12:02,650 --> 00:12:05,780 in de geschiedenis van dit programma. 226 00:12:05,780 --> 00:12:10,050 >> Nu zou je zo snel in de verleiding Ik heb dit cijfer variabele gecreëerd 227 00:12:10,050 --> 00:12:13,530 en op voorwaarde dat het een geheel getal van 100, nu als ik 228 00:12:13,530 --> 00:12:18,540 willen proberen om aaneenschakelen een string met die integer, 229 00:12:18,540 --> 00:12:21,610 misschien geneigd om nog te gebruiken die string samenvoegingsoperator 230 00:12:21,610 --> 00:12:24,500 alsof we slechts een paar regels voor. 231 00:12:24,500 --> 00:12:26,460 Maar helaas, zal dit eigenlijk niet 232 00:12:26,460 --> 00:12:29,270 werken, want je bent wezen uitvoeren 233 00:12:29,270 --> 00:12:32,380 een bewerking van twee verschillende types. 234 00:12:32,380 --> 00:12:36,856 >> Nu is deze zeer verschillend van andere talen zoals PHP, die zijn echt 235 00:12:36,856 --> 00:12:38,480 loosey goosey met hun soort types. 236 00:12:38,480 --> 00:12:40,030 Ze zijn net als, ja, wat dan ook, kan me niet schelen. 237 00:12:40,030 --> 00:12:42,710 Geef me een type, en misschien zal ik het juiste te doen. 238 00:12:42,710 --> 00:12:46,060 >> In dit geval is Swift zeer streng over de soorten 239 00:12:46,060 --> 00:12:47,350 dat u te maken met. 240 00:12:47,350 --> 00:12:50,700 Deze sommatie exploitant of samenvoegingsoperator 241 00:12:50,700 --> 00:12:54,400 in wezen een paar verschillende mogelijke opties. 242 00:12:54,400 --> 00:12:56,970 U kunt sommatie doen met getallen, of u 243 00:12:56,970 --> 00:13:00,870 kan tekenreekssamenvoegingsoperator doen, en misschien een aantal andere dingen. 244 00:13:00,870 --> 00:13:05,550 Maar als dat de exploitant niet herkent wat op weerszijden daarvan, 245 00:13:05,550 --> 00:13:10,452 of liever de combinatie van deze twee soorten, is niet wat het verwacht, 246 00:13:10,452 --> 00:13:11,910 dan dat het gaat om een ​​storing veroorzaken. 247 00:13:11,910 --> 00:13:16,690 >> Dus in dit geval, wat betekent het om een ​​string plus een integer hebben? 248 00:13:16,690 --> 00:13:18,880 Welnu, in het kader van deze, waarschijnlijk willen we 249 00:13:18,880 --> 00:13:21,990 een tekenreekssamenvoegingsoperator operatie te doen. 250 00:13:21,990 --> 00:13:26,420 Maar natuurlijk de computer niet hebben dat soort van context. 251 00:13:26,420 --> 00:13:29,950 En dus moeten we bieden dat aanvullende informatie 252 00:13:29,950 --> 00:13:32,390 te laten weten wat het is dat we willen doen. 253 00:13:32,390 --> 00:13:36,860 >> Met andere woorden, het feit dat Swift sterk getypt 254 00:13:36,860 --> 00:13:39,520 betekent dat je moet een doen beetje extra werk 255 00:13:39,520 --> 00:13:42,100 om het te krijgen om de werken manier die je zou willen. 256 00:13:42,100 --> 00:13:43,710 Maar als gevolg, is het veiliger. 257 00:13:43,710 --> 00:13:46,290 En als je eenmaal te nemen houdend met die types, 258 00:13:46,290 --> 00:13:49,300 dingen gewoon eerlijk beginnen vrij goed te werken. 259 00:13:49,300 --> 00:13:52,520 >> Dus in dit geval, dan zouden we voeren tekenreekssamenvoegingsoperator 260 00:13:52,520 --> 00:13:56,040 door expliciet gieten de integer naar een string 261 00:13:56,040 --> 00:13:58,490 door verpakken in deze hoofdletter S String functie, 262 00:13:58,490 --> 00:14:03,510 en vervolgens met behulp van de tekenreekssamenvoegingsoperator operator om ons label variabele wijzigen, 263 00:14:03,510 --> 00:14:06,280 en print het uit. 264 00:14:06,280 --> 00:14:08,420 >> Tot dusver, zo goed? 265 00:14:08,420 --> 00:14:12,020 Oké, laten we verder gaan. 266 00:14:12,020 --> 00:14:16,300 >> Nu zijn er diverse data soorten die we kunnen gebruiken in Swift. 267 00:14:16,300 --> 00:14:21,620 Zoals jullie gewend zijn geraakt aan, kunnen we een veranderlijk array te maken. 268 00:14:21,620 --> 00:14:26,140 En die array kan alleen bevat een enkel type. 269 00:14:26,140 --> 00:14:30,360 >> Dus in dit geval, gaan we creëren een veranderlijk arrays van integers, die 270 00:14:30,360 --> 00:14:34,800 we zullen kwaliteiten noemen, en we in staat zullen zijn op te slaan die in dit plein beugel 271 00:14:34,800 --> 00:14:38,650 formaat als u gewend geraakt De in diverse andere talen. 272 00:14:38,650 --> 00:14:41,150 Maar merken dat we hier zijn definiëren van een paar dingen. 273 00:14:41,150 --> 00:14:45,350 rangen is een veranderlijk variable-- we geen gebruik van de laat trefwoord. 274 00:14:45,350 --> 00:14:49,620 Dus dat betekent dat we dan kunnen wijzigen de inhoud van deze array. 275 00:14:49,620 --> 00:14:53,420 Het is van het type Array Int, en we kunnen vertellen dat 276 00:14:53,420 --> 00:14:56,260 op basis van deze vierkante haken here. 277 00:14:56,260 --> 00:14:58,930 >> Nu is een van de leuke dingen hiervan is dat we 278 00:14:58,930 --> 00:15:02,310 hebben toegang tot een veel Extra informatie 279 00:15:02,310 --> 00:15:07,110 over de array alleen met behulp enkele eenvoudige puntnotatie. 280 00:15:07,110 --> 00:15:10,500 Dus bijvoorbeeld, grades.count biedt ons 281 00:15:10,500 --> 00:15:14,820 het aantal items die bestaan ​​in dat array, die we vervolgens toegang vrij 282 00:15:14,820 --> 00:15:19,090 eenvoudig eenvoudig met behulp van die puntnotatie. 283 00:15:19,090 --> 00:15:21,830 >> Als u meer wilt toevoegen items op deze array, 284 00:15:21,830 --> 00:15:27,220 kunt u de PHP-stijl niet waar je gewoon expliciet te definiëren, 285 00:15:27,220 --> 00:15:30,910 bij een bepaalde index, wat waarde dat u wilt invoegen. 286 00:15:30,910 --> 00:15:37,210 Gebruik in plaats daarvan de append werkwijze het matrixtype 287 00:15:37,210 --> 00:15:40,920 op die post, 95 toevoegen, aan deze lijst. 288 00:15:40,920 --> 00:15:45,990 >> Dus nu deze array heeft de volgende contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 En nu hebben we toegevoegd 95 dat ook. 290 00:15:49,270 --> 00:15:51,830 >> Er zijn andere manieren kunnen we de dingen toevoegen. 291 00:15:51,830 --> 00:15:55,030 Je kunt eigenlijk gebruiken een sommatie-operator, 292 00:15:55,030 --> 00:15:59,200 die zal worden geïnterpreteerd als een scala append operatie. 293 00:15:59,200 --> 00:16:04,680 En u kunt dan nog toevoegen matrix, waarvan de inhoud 70 en 80, 294 00:16:04,680 --> 00:16:05,560 die matrix. 295 00:16:05,560 --> 00:16:08,250 Dus nu hebben we de inhoud van deze variabele 296 00:16:08,250 --> 00:16:17,220 grades-- 100, 0, 90, 85, 95, 70, en 80. 297 00:16:17,220 --> 00:16:21,850 Dit is gewoon een leuke kleine syntactische suiker die Swift biedt voor ons. 298 00:16:21,850 --> 00:16:23,850 >> Dus als we willen de som kwaliteiten, we zijn misschien 299 00:16:23,850 --> 00:16:27,340 gaat te willen herhalen op elk punt in deze lus. 300 00:16:27,340 --> 00:16:32,150 En we hebben, in Swift, de notie van een lus zoals je zou verwachten. 301 00:16:32,150 --> 00:16:35,350 Maar de manier waarop we aanduiden een bereik is iets anders. 302 00:16:35,350 --> 00:16:37,790 Dus in dit geval, Kortom alles, zullen we 303 00:16:37,790 --> 00:16:40,650 gaat om een ​​tijdelijke maken variabele genoemd bedrag in orde voor ons 304 00:16:40,650 --> 00:16:42,580 deze telling handhaven. 305 00:16:42,580 --> 00:16:44,430 >> En let ons voor lus constructie hier. 306 00:16:44,430 --> 00:16:46,820 Voor index 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Dus deze constructie, 0 .. 00:17:01,860 zeggen dat we gaan creëren een bereik van gehele getallen van 0 tot 310 00:17:01,860 --> 00:17:05,750 om maar exclusief grades.count. 311 00:17:05,750 --> 00:17:09,577 Zo zal dit 0, 1, 2, 3, 4, 5, tot maar velen 312 00:17:09,577 --> 00:17:10,410 voordat grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Dit is dus anders dan hoe we zou doorgaans voor loops 314 00:17:14,160 --> 00:17:18,569 waar u enkele index zou hebben variabele, stel deze gelijk is aan 0 op het eerste, 315 00:17:18,569 --> 00:17:25,480 en integreren dan is dat tot enkele waarde lager dan het aantal items 316 00:17:25,480 --> 00:17:27,140 in die array. 317 00:17:27,140 --> 00:17:29,820 >> Dus er is een modificatie dit eigenlijk 318 00:17:29,820 --> 00:17:35,010 die ons in staat stelt om heel gemakkelijk set verschillende reeksen. 319 00:17:35,010 --> 00:17:40,570 Als je dit bereik te veranderen drie puntjes, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 Dit vertegenwoordigt het bereik van 0 om grades.count inclusive, 321 00:17:45,120 --> 00:17:49,260 betekent dat dat nummer ook vervolgens opgenomen in dat bereik. 322 00:17:49,260 --> 00:17:52,110 >> Maar dit is erg handig deze exacte dingen, 323 00:17:52,110 --> 00:17:54,590 wanneer we moeten presteren iteraties dan loop 324 00:17:54,590 --> 00:17:59,630 omdat die indexen nul geïndexeerd, zoals we hebben gezien in andere talen 325 00:17:59,630 --> 00:18:02,360 ook. 326 00:18:02,360 --> 00:18:05,210 Voor vragen over deze lus? 327 00:18:05,210 --> 00:18:10,660 >> Dus er is impliciete definitie deze index variabele 328 00:18:10,660 --> 00:18:14,350 waarvan de waarde begint bij 0 en blijft bij elke lus iteratie 329 00:18:14,350 --> 00:18:17,950 te verhogen met 1 tot op een punt dat is gelijk aan grades.count, 330 00:18:17,950 --> 00:18:20,380 op welk punt, de lus afgebroken. 331 00:18:20,380 --> 00:18:23,730 >> Merk op dat in onze reeks interpolatie hier, 332 00:18:23,730 --> 00:18:26,910 kunnen we eigenlijk voeren enkele eenvoudige manipulaties die waarden. 333 00:18:26,910 --> 00:18:31,230 Dus index plus 1 ook daadwerkelijk het uitvoeren van een optelling van die waarde 334 00:18:31,230 --> 00:18:34,780 omdat index naar dit geval een geheel getal. 335 00:18:34,780 --> 00:18:37,810 En op dat moment, het zal vervolgens worden omgezet in een string 336 00:18:37,810 --> 00:18:42,230 en geïnterpoleerd in deze string hier, en afgedrukt als we zouden verwachten. . 337 00:18:42,230 --> 00:18:44,520 >> En het leuke de arrays hier 338 00:18:44,520 --> 00:18:50,730 dat wij ook in staat om ophalen waarden en instelwaarden 339 00:18:50,730 --> 00:18:54,080 met behulp van het plein haakjesnotering als we hebben gezien in andere talen. 340 00:18:54,080 --> 00:18:57,130 341 00:18:57,130 --> 00:19:01,030 >> Oké, zo van hier, nu zijn we berekenen onze som van al onze kwaliteiten. 342 00:19:01,030 --> 00:19:02,780 Nu soort van de volgende logische stap zou zijn 343 00:19:02,780 --> 00:19:07,580 om een ​​deling te doen om uit te vinden het gemiddelde van deze cijfers. 344 00:19:07,580 --> 00:19:10,150 Maar iets belangrijks hier gebeurt die 345 00:19:10,150 --> 00:19:15,020 dat dit bedrag misschien een integer. 346 00:19:15,020 --> 00:19:18,020 Maar we moeten een aantal uit te voeren soort van dubbele divisie. 347 00:19:18,020 --> 00:19:20,600 En dit gaat worden uiterst belangrijk wanneer 348 00:19:20,600 --> 00:19:24,140 we willen deze operatie uit te voeren, want wat we zeggen 349 00:19:24,140 --> 00:19:28,430 is dat we nodig hebben om daadwerkelijk voeren divisie op twee doubles. 350 00:19:28,430 --> 00:19:31,370 En nogmaals, omdat Swift is sterk getypt, 351 00:19:31,370 --> 00:19:36,760 We moeten expliciet alle vastgestelde items om doubles voordat we eigenlijk 352 00:19:36,760 --> 00:19:38,300 voeren die operatie. 353 00:19:38,300 --> 00:19:40,550 >> Dus om voor ons te voeren dubbele divisie, 354 00:19:40,550 --> 00:19:43,730 het is niet voldoende voor slechts een van deze items zijn een double. 355 00:19:43,730 --> 00:19:46,400 Beiden hebben een te zijn dubbele opdat swift 356 00:19:46,400 --> 00:19:50,860 om zeker te zijn dat dit is wat we willen doen. 357 00:19:50,860 --> 00:19:54,360 Dus we zullen dan expliciet typecast de som die we hierboven hebben berekend 358 00:19:54,360 --> 00:19:58,970 en de telling van de rangen te dubbelen, en voer dat de werking en op te slaan 359 00:19:58,970 --> 00:20:02,390 dat in deze nieuwe variabele, of liever Deze nieuwe constante genaamd gemiddeld 360 00:20:02,390 --> 00:20:06,810 die zullen moeten wat voor soort, je je voorstellen? 361 00:20:06,810 --> 00:20:07,587 Dubbel, ja. 362 00:20:07,587 --> 00:20:09,420 Dus in dit geval, we niet hoeft te specificeren 363 00:20:09,420 --> 00:20:13,450 omdat het kan worden afgeleid uit de bediening wat voor soort data gemiddelde 364 00:20:13,450 --> 00:20:14,730 zal zijn. 365 00:20:14,730 --> 00:20:19,025 En Swift is over het algemeen vrij goed over de mogelijkheid om de types afleiden. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Wilt u dit te zien lopen, of kan ik verder gaan? 368 00:20:24,200 --> 00:20:25,640 Ik wil om door te gaan. 369 00:20:25,640 --> 00:20:28,130 Heeft u vragen over een van deze? 370 00:20:28,130 --> 00:20:28,630 Grote. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Nu gaan we om te beginnen te bereiken de goede stuff-- definiëren functies, 373 00:20:35,010 --> 00:20:39,090 en een paar andere soorten die zijn uniek voor Swift dat u niet 374 00:20:39,090 --> 00:20:41,620 gezien in andere talen tot op dit punt, 375 00:20:41,620 --> 00:20:46,290 maar zij aanwezig zijn in andere talen die je later zou kunnen vinden. 376 00:20:46,290 --> 00:20:48,210 Dus eerst als je wilt definiëren van een functie, 377 00:20:48,210 --> 00:20:52,170 definieer je het met het funky woord functie, en dan de naam van de functie, 378 00:20:52,170 --> 00:20:56,710 en daarna tussen haakjes, de argumenten dat u wilt dat de functie te aanvaarden. 379 00:20:56,710 --> 00:21:00,280 De argumenten moeten ook specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 moet het type gegevens aangeven dat zij zijn, tenzij ze kunnen worden afgeleid. 381 00:21:05,010 --> 00:21:07,500 En we zullen dat er weinig te zien waarschuwing in slechts een klein beetje. 382 00:21:07,500 --> 00:21:09,920 >> Dus in dit geval hebben we een functie genaamd printGradeCount. 383 00:21:09,920 --> 00:21:12,840 We gaan naar een accepteren variable-- of liever in casu 384 00:21:12,840 --> 00:21:14,450 een constant-- genaamd cijferlijst. 385 00:21:14,450 --> 00:21:18,517 En het gaat te zijn typt array van integers. 386 00:21:18,517 --> 00:21:20,600 Nu is er iets dat is echt belangrijk hier 387 00:21:20,600 --> 00:21:21,849 dat ik wil dat je begrijpt. 388 00:21:21,849 --> 00:21:27,560 Dat is dat de standaard, deze argumenten dat zijn input voor deze functie worden 389 00:21:27,560 --> 00:21:34,380 gedefinieerd met een impliciete laat trefwoord, wat betekent dat ik dit niet kan wijzigen 390 00:21:34,380 --> 00:21:39,850 cijferlijst variabele hier. 391 00:21:39,850 --> 00:21:43,360 En dat soort zinvol, omdat je het passeren van gegevens in. 392 00:21:43,360 --> 00:21:45,860 En je misschien niet wilt te worden veranderd onder je. 393 00:21:45,860 --> 00:21:50,800 Het is mogelijk om expliciet te vermelden dat dit een variabel door de invoering 394 00:21:50,800 --> 00:21:52,070 de var trefwoord hier. 395 00:21:52,070 --> 00:21:56,832 Maar dat is een gotcha dat we hebben merkten mensen hebben gedaan in het verleden 396 00:21:56,832 --> 00:21:59,790 is dat ze aangenomen dat het gaat een variabele wanneer, in feite 397 00:21:59,790 --> 00:22:02,640 een constante is. 398 00:22:02,640 --> 00:22:07,340 >> Oké, dus even dan, in dit geval, we zijn niet het opgeven van elk type return. 399 00:22:07,340 --> 00:22:09,460 Wij laten u zien hoe dat te doen dat in slechts een moment. 400 00:22:09,460 --> 00:22:12,340 Maar merken dat we hier hebben gewoon een simpele als voorwaarde. 401 00:22:12,340 --> 00:22:14,560 Als de cijferlijst is lege, die in dit geval 402 00:22:14,560 --> 00:22:19,310 is slechts het bezit van deze integer array, dan printen we iets. 403 00:22:19,310 --> 00:22:23,100 Anders iets anders doen we. 404 00:22:23,100 --> 00:22:25,000 >> Vrij eenvoudig tot nu toe denk ik. 405 00:22:25,000 --> 00:22:27,960 Maar stop me als je vragen hebt. 406 00:22:27,960 --> 00:22:33,350 >> Nu deze functie, gemiddelde, neemt ook sommige argumenten, of liever één argument, 407 00:22:33,350 --> 00:22:37,507 dat is de cijferlijst, en deze keer gaat om een ​​dubbele soort terugkeren. 408 00:22:37,507 --> 00:22:39,340 Omdat het berekenen het gemiddelde en het 409 00:22:39,340 --> 00:22:45,010 gaat eigenlijk terug dat berekende gemiddelde van de oproepende lijn. 410 00:22:45,010 --> 00:22:50,070 >> In dit geval geven wij de terug soort na een pijl. 411 00:22:50,070 --> 00:22:53,260 En dit zou voelen beetje vreemd op het eerste. 412 00:22:53,260 --> 00:22:55,610 Je hebt gewend gegroeid het instellen van de terugkeer 413 00:22:55,610 --> 00:22:57,720 Typ voor de naam van de functie. 414 00:22:57,720 --> 00:23:00,310 Maar als je van deze op het gebied van wiskunde, 415 00:23:00,310 --> 00:23:03,320 zoals wanneer je wiskunde die een functie definieert, 416 00:23:03,320 --> 00:23:06,807 u een functie met een aantal hebben inputs en produceert een output. 417 00:23:06,807 --> 00:23:08,890 En dat is precies wat Dit wordt verondersteld te bootsen. 418 00:23:08,890 --> 00:23:12,460 En er zijn een paar andere talen die hebben soortgelijke syntax als goed, 419 00:23:12,460 --> 00:23:15,674 maar waarschijnlijk niemand die je hebt gezien in de CS50. 420 00:23:15,674 --> 00:23:17,090 Maar nog steeds niet worden verward door het. 421 00:23:17,090 --> 00:23:21,650 De pijl geeft aan wat er gaande is te worden geretourneerd in dit geval. 422 00:23:21,650 --> 00:23:23,650 OK, dus hoe gaan we om dit gemiddelde te berekenen? 423 00:23:23,650 --> 00:23:25,649 Nou, als de cijferlijst leeg is, nou dan zijn we 424 00:23:25,649 --> 00:23:30,731 gaat die misschien terug 0, een redelijke manier om dit te behandelen. 425 00:23:30,731 --> 00:23:32,980 Ik weet het niet, laten we komen terug naar die in een klein beetje. 426 00:23:32,980 --> 00:23:34,688 Dit is misschien niet echt zijn een redelijke manier 427 00:23:34,688 --> 00:23:38,310 gemiddeld indien berekenen we hebben een lege cijferlijst. 428 00:23:38,310 --> 00:23:41,260 >> Dan zullen we alleen het uitvoeren van onze sommatie. 429 00:23:41,260 --> 00:23:43,900 Merk op dat we hier eigenlijk een alternatieve versie van een 430 00:23:43,900 --> 00:23:49,190 lus, waardoor we herhalen over elke enkel item in een array 431 00:23:49,190 --> 00:23:53,630 en leg elk element tot zijn variabel. 432 00:23:53,630 --> 00:23:56,200 Onder vermelding van rang cijferlijst, wat we zeggen 433 00:23:56,200 --> 00:24:00,560 is dat we gaan impliciet maak een nieuwe constante genaamd 434 00:24:00,560 --> 00:24:05,180 kwaliteit dat gaat vertegenwoordigen elk uniek punt in de cijferlijst 435 00:24:05,180 --> 00:24:06,769 elke keer dat de lus herhaalt. 436 00:24:06,769 --> 00:24:08,560 Dus de eerste keer dat Het wordt gerund, rang zal 437 00:24:08,560 --> 00:24:09,800 zijn het eerste item in de cijferlijst. 438 00:24:09,800 --> 00:24:12,300 De tweede keer dat het zal de tweede punt, enzovoort, enzovoort 439 00:24:12,300 --> 00:24:15,970 tot cijferlijst heeft zelf uitgeput van elementen. 440 00:24:15,970 --> 00:24:20,390 Dan zullen we in staat zijn om dat te vatten graad in onze sommatie variabele 441 00:24:20,390 --> 00:24:22,570 en terug te keren onze gemiddelde zoals we eerder hebben gezien. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, nog vragen? 444 00:24:26,950 --> 00:24:27,699 Ja? 445 00:24:27,699 --> 00:24:28,990 Publiek: Ik heb twee vragen. 446 00:24:28,990 --> 00:24:33,586 Nummer één, hypothetisch, kan je integer draaien op deze? 447 00:24:33,586 --> 00:24:35,604 Hoeft niet te zijn een dubbel, is dat juist? 448 00:24:35,604 --> 00:24:37,520 DAN AMRMENDARIZ: Kunt u herhalen die vraag? 449 00:24:37,520 --> 00:24:39,587 Publiek: Kan ik integer als het gemiddelde? 450 00:24:39,587 --> 00:24:41,670 DAN AMRMENDARIZ: Kunt u doen integer als een gemiddelde? 451 00:24:41,670 --> 00:24:45,015 Dus terug een integer gemiddelde in plaats van een dubbele? 452 00:24:45,015 --> 00:24:48,204 >> Publiek: Return-- u dat recht nu hieronder. 453 00:24:48,204 --> 00:24:49,870 DAN AMRMENDARIZ: Right here, terug 0.0? 454 00:24:49,870 --> 00:24:51,790 Publiek: Ja, gewoon terug 0. 455 00:24:51,790 --> 00:24:56,590 Zo zal ofwel 80 of 85, maar 85,2. 456 00:24:56,590 --> 00:24:59,465 >> DAN AMRMENDARIZ: Dus in dat geval, dus er is een paar verschillende manieren 457 00:24:59,465 --> 00:25:00,090 te beantwoorden. 458 00:25:00,090 --> 00:25:02,760 Laat me ze te beantwoorden in orde. 459 00:25:02,760 --> 00:25:06,740 Dus als ik alleen deze terugkeer 0, een 0 is een geheel getal. 460 00:25:06,740 --> 00:25:09,730 En dus dat zal leiden tot een het type fout in dit geval 461 00:25:09,730 --> 00:25:13,210 omdat het verwacht een double maar dan terug een integer. 462 00:25:13,210 --> 00:25:16,770 Als ik wil een integer terug, dat kan ik. 463 00:25:16,770 --> 00:25:20,450 Ik kan het type return instellen naar int, hier terugkeren 0, 464 00:25:20,450 --> 00:25:22,047 en niet uit te voeren dubbele divisie. 465 00:25:22,047 --> 00:25:23,880 Maar dan zouden we zijn doet integer divisie. 466 00:25:23,880 --> 00:25:27,080 En zo zouden we dan niet de gemiddelde dat we misschien zou verwachten. 467 00:25:27,080 --> 00:25:29,210 Maar ja we kunnen wijzigen de soorten op die manier. 468 00:25:29,210 --> 00:25:32,598 >> Publiek: En ten tweede, je hebben een dubbel aan de bovenkant. 469 00:25:32,598 --> 00:25:35,502 Maar beneden, als je doen terugkeren Double Double, 470 00:25:35,502 --> 00:25:38,280 dat is al automatisch terugkerende Double-formaat. 471 00:25:38,280 --> 00:25:42,278 Waarom heb je nog nodig hebt om het te definiëren met pijl op de top met een dubbele? 472 00:25:42,278 --> 00:25:45,010 >> DAN AMRMENDARIZ: So in geval dit onderdeel 473 00:25:45,010 --> 00:25:50,580 van the-- dus om de vraag te herhalen, omdat het impliciete van de terugkeer 474 00:25:50,580 --> 00:25:56,030 types hier, wat voor soort dit eigenlijk is, moeten we expliciet met Swift te zijn 475 00:25:56,030 --> 00:25:59,970 over wat we willen terug uit deze functie 476 00:25:59,970 --> 00:26:02,690 zodat wanneer voert typen controleren, kan het ervoor zorgen dat 477 00:26:02,690 --> 00:26:05,850 dat wat we eigenlijk hebben geschreven beneden daadwerkelijk voldoet aan die. 478 00:26:05,850 --> 00:26:10,225 Dus het is een beetje als een cheque met jezelf soort situaties. 479 00:26:10,225 --> 00:26:11,050 Maar daar zijn-- 480 00:26:11,050 --> 00:26:12,560 >> PUBLIEK: [onverstaanbaar] arrow? 481 00:26:12,560 --> 00:26:19,490 >> DAN AMRMENDARIZ: Er zijn gevallen waarin kunnen we aangeven dat we kunnen impliciet 482 00:26:19,490 --> 00:26:21,550 stelt u het rendement. 483 00:26:21,550 --> 00:26:23,940 Maar in dit geval, ik niet dat zou werken. 484 00:26:23,940 --> 00:26:26,190 Er is een aantal andere syntax dat zullen we later zien. 485 00:26:26,190 --> 00:26:30,320 486 00:26:30,320 --> 00:26:35,280 >> Oké, dus deze bron code is een beetje anders 487 00:26:35,280 --> 00:26:41,839 want dit ontleedt argumenten uit de functie die we bellen. 488 00:26:41,839 --> 00:26:44,130 Laat me zien hoe het werkt voordat we daadwerkelijk gaan 489 00:26:44,130 --> 00:26:48,050 een aantal interessante dingen dat gebeurt in Swift. 490 00:26:48,050 --> 00:26:51,870 >> Dus in dit geval, als ik dit run gewoon code, merken dat wat het doet 491 00:26:51,870 --> 00:26:54,900 is-- terwijl het soort geeft me een rare fout. 492 00:26:54,900 --> 00:26:59,730 Ik moet het langs een paar integers als een command line argument. 493 00:26:59,730 --> 00:27:06,220 Dus laten we zien, 150 en 80, en druk op enter om uit te vinden wat het eigenlijk doet. 494 00:27:06,220 --> 00:27:09,890 Het accepteren van elk deze waarden integers. 495 00:27:09,890 --> 00:27:12,040 Het invoeren van hen in een cijferlijst. 496 00:27:12,040 --> 00:27:14,470 En dan is het uitvoeren van dat de gemiddelde berekening 497 00:27:14,470 --> 00:27:16,650 en het uitvoeren van dat als we zouden verwachten. 498 00:27:16,650 --> 00:27:19,950 >> Maar natuurlijk is er iets aan de hand Op deze verwerpen iets 499 00:27:19,950 --> 00:27:23,300 iets een integer. 500 00:27:23,300 --> 00:27:27,300 Zoals je misschien herinneren van toen we waren omgaan met command line argumenten 501 00:27:27,300 --> 00:27:32,640 in C en andere talen, de allereerste 0-ste artikel op dat opdrachtregelargument 502 00:27:32,640 --> 00:27:35,774 lijst is de naam van het commando dat wij daadwerkelijk zijn uitgevoerd. 503 00:27:35,774 --> 00:27:38,690 Dus in dit geval, ik ben gewoon looping alle command line argumenten van. 504 00:27:38,690 --> 00:27:41,650 Maar ik ben niet te doen een soort van buitensporige controleer dan slaan dat eerste. 505 00:27:41,650 --> 00:27:45,920 Ik ben gewoon expliciet of impliciet ik ben controleren welke van deze types 506 00:27:45,920 --> 00:27:49,900 zijn gehele getallen voordat ik eigenlijk het uitvoeren van deze berekening. 507 00:27:49,900 --> 00:27:52,420 >> En dat is in wezen wat er gebeurt hier. 508 00:27:52,420 --> 00:27:55,860 Voor elk argument in de argumenten van het proces, 509 00:27:55,860 --> 00:27:59,210 Ik ga wat controle uit te voeren. 510 00:27:59,210 --> 00:28:01,970 En in dit geval, ga ik om te proberen om de eerste bekeerling 511 00:28:01,970 --> 00:28:07,620 dat argument in een integer door het uitvoeren van een expliciete typecast, 512 00:28:07,620 --> 00:28:12,310 omdat het van inputs, een string en in feite een geheel getal. 513 00:28:12,310 --> 00:28:18,140 >> Maar dit is een soort van een rare syntax, Als laten cijfer gelijk Int (argument). 514 00:28:18,140 --> 00:28:21,120 Wat er daadwerkelijk gebeurt Hier is uiterst 515 00:28:21,120 --> 00:28:24,390 belangrijk om je met behulp van Swift. 516 00:28:24,390 --> 00:28:27,610 Deze wordt gebruikt om het riep een optionele type. 517 00:28:27,610 --> 00:28:34,790 >> Dus deze functie Int (argument), keert niet alleen een integer, maar keert terug 518 00:28:34,790 --> 00:28:37,470 wat heet een optionele integer. 519 00:28:37,470 --> 00:28:41,200 En dus dit is een soort van een soort bovenop een soort. 520 00:28:41,200 --> 00:28:45,900 U kunt soort voorstellen als het is terug te keren als een pakket. 521 00:28:45,900 --> 00:28:47,750 En als je die open pakket, het ofwel 522 00:28:47,750 --> 00:28:53,930 heeft een integer, welke het gevolg is, of het heeft absoluut niets in het helemaal. 523 00:28:53,930 --> 00:28:58,140 Dit is bruikbaar als een foutcontrole mechanisme, omdat in dit geval 524 00:28:58,140 --> 00:29:02,080 we kunnen vinden, dit was conversie succesvol? 525 00:29:02,080 --> 00:29:05,810 Zo ja, dan is het in feite naar een geheel getal binnen. 526 00:29:05,810 --> 00:29:08,750 Anders gaat om sommige hebben waarde die we nihil, zullen noemen die 527 00:29:08,750 --> 00:29:10,920 representeert geen integer helemaal. 528 00:29:10,920 --> 00:29:13,270 Het is echt vertegenwoordiger van niets. 529 00:29:13,270 --> 00:29:18,130 >> En dus dit als de bouw laat ons toe om dat pakket uitpakken, 530 00:29:18,130 --> 00:29:19,850 dat optionele binding. 531 00:29:19,850 --> 00:29:25,560 En als we in staat zijn om uit te pakken, dat verpakken en vind een integer binnen, 532 00:29:25,560 --> 00:29:27,720 dan wat we zeggen hier is dat we zullen dan 533 00:29:27,720 --> 00:29:33,090 toestaan ​​dat de in te stellen waarde in deze constante genaamd leerjaar. 534 00:29:33,090 --> 00:29:36,590 En dit gedeelte van de if-statement, het bovenste gedeelte van de if 535 00:29:36,590 --> 00:29:40,390 zal lopen, omdat dat uitpakken was succesvol. 536 00:29:40,390 --> 00:29:43,290 >> Als het gewoon zo gebeurt het dat Er is een fout opgetreden misschien 537 00:29:43,290 --> 00:29:47,040 in deze expliciete conversie een string naar een integer, misschien 538 00:29:47,040 --> 00:29:49,160 Het is de waarde ABC bijvoorbeeld. 539 00:29:49,160 --> 00:29:52,120 En dat is eigenlijk niet van plan converteren naar een integer. 540 00:29:52,120 --> 00:29:55,520 Dan zal het nihil terug, die geen geheel getal. 541 00:29:55,520 --> 00:29:57,570 En dit als statement goed dan mislukken. 542 00:29:57,570 --> 00:30:01,930 graad zal niet bestaan, want het geen integer inhoud. 543 00:30:01,930 --> 00:30:06,391 En het zal dit anders blok in plaats lopen. 544 00:30:06,391 --> 00:30:06,890 Ja? 545 00:30:06,890 --> 00:30:09,652 >> Publiek: Nil is N-I-L? 546 00:30:09,652 --> 00:30:11,110 DAN AMRMENDARIZ: nihil is N-I-L, ja. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Dus dit is misschien een van de moeilijkste dingen over Swift, 549 00:30:20,310 --> 00:30:23,690 vooral als je in het onkruid op een iOS-app 550 00:30:23,690 --> 00:30:27,442 en je bent eigenlijk probeert wat de ontwikkeling is er te doen. 551 00:30:27,442 --> 00:30:29,400 Het gaat te schreeuwen naar je over optionele. 552 00:30:29,400 --> 00:30:33,050 Het zal moeten vragen u voor vraagtekens en uitroeptekens. 553 00:30:33,050 --> 00:30:37,100 Maar zodra je erachter out-- als je wijden enige tijd uitzoeken 554 00:30:37,100 --> 00:30:41,990 Wat is er aan de hand met optionele types, je bespaart jezelf een hoop hoofdpijn 555 00:30:41,990 --> 00:30:46,040 als je probeert te schrijf een app in Swift. 556 00:30:46,040 --> 00:30:47,660 >> Het is eigenlijk een zeer krachtige functie. 557 00:30:47,660 --> 00:30:49,826 En je moet gewoon neem mijn woord voor het voor nu. 558 00:30:49,826 --> 00:30:52,620 Maar we zullen zien deze constructie en enkele anderen het leuk vinden 559 00:30:52,620 --> 00:30:56,740 in andere broncode die laten wij u zien in slechts een klein beetje. 560 00:30:56,740 --> 00:31:00,440 >> Zijn er aanvankelijk vragen hier? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Dus de belangrijkste afhaalrestaurant is dat een optionele type is een soort van metatype. 563 00:31:08,690 --> 00:31:12,500 Het ofwel heeft een waarde, en zo ja, dan 564 00:31:12,500 --> 00:31:18,110 zullen misschien hebben die waarde geassocieerd met het, of het heeft geen enkele waarde, 565 00:31:18,110 --> 00:31:19,620 en wordt vertegenwoordigd door nul. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 De rest van dit misschien wel zoals je zou verwachten. 568 00:31:28,870 --> 00:31:32,900 >> Dus laten we het opvoeren van de moeilijkheidsgraad nog maar eens. 569 00:31:32,900 --> 00:31:37,070 En deze keer, laten we eens een kijkje bij enkele andere soorten gegevens die werkelijk bestaan. 570 00:31:37,070 --> 00:31:41,290 Een daarvan is woordenboeken, wat zeer vergelijkbaar met Python woordenboeken. 571 00:31:41,290 --> 00:31:48,270 Het is enigszins vergelijkbaar met een hashtabel in C. Het is in wezen een mapping sleutels 572 00:31:48,270 --> 00:31:49,820 waar de sleutels kunnen worden strings. 573 00:31:49,820 --> 00:31:52,670 En als je omhoog kijkt die sleutels, deze toetsen zal een waarde hebben. 574 00:31:52,670 --> 00:31:56,020 Dus het is niet echt een array, maar in plaats daarvan, nauwer verbonden 575 00:31:56,020 --> 00:31:58,810 een hash kaart of een hash tabel. 576 00:31:58,810 --> 00:32:02,420 >> Laten we eens kijken hoe dit wordt verondersteld om daadwerkelijk te werken voordat we 577 00:32:02,420 --> 00:32:05,210 gaan in de broncode zelf. 578 00:32:05,210 --> 00:32:07,680 Als ik dit run gewoon, niets gebeurt echt. 579 00:32:07,680 --> 00:32:12,430 Het is me te vertellen dat ik verwacht enkele parameters van het volgende type. 580 00:32:12,430 --> 00:32:16,050 Dus ik ga om te voorzien het enige probleem set namen, 581 00:32:16,050 --> 00:32:18,490 zo pset0, misschien heb ik 100. 582 00:32:18,490 --> 00:32:20,790 En pset1, ik heb een 5. 583 00:32:20,790 --> 00:32:24,630 En dan op het examen, ik deed echt goed en kreeg 30. 584 00:32:24,630 --> 00:32:27,180 En oei, ik raakte een ruimte hier. 585 00:32:27,180 --> 00:32:30,940 >> Als ik druk op Enter, kunt u zien Het voert enkele berekening. 586 00:32:30,940 --> 00:32:33,740 Het zegt cijferlijst is drie rangen, pset1, pset0, examen. 587 00:32:33,740 --> 00:32:36,120 En de cijferlijst heeft Deze specifieke gemiddelde. 588 00:32:36,120 --> 00:32:38,370 Dus nogmaals, we werken met deze cijferlijst idee, 589 00:32:38,370 --> 00:32:44,650 maar we gaan verder itereren de complexiteit van onze functie. 590 00:32:44,650 --> 00:32:47,650 >> Dus bij het begin, we zijn gewoon gaan naar een functie te creëren die 591 00:32:47,650 --> 00:32:49,390 is verantwoordelijk voor het drukken van het gebruik. 592 00:32:49,390 --> 00:32:51,920 En er is deze afrit functie die zal gewoon 593 00:32:51,920 --> 00:32:53,710 geforceerd stoppen de applicatie. 594 00:32:53,710 --> 00:32:56,530 Dit is niet iets dat je zal gebruiken in iOS app. 595 00:32:56,530 --> 00:32:59,750 Dit is enkel, in casu met een command line argument. 596 00:32:59,750 --> 00:33:01,990 Volgende we beginnen te bewegen in de richting van Xcode. 597 00:33:01,990 --> 00:33:07,760 Maar dit is specifiek voor een opdracht lijnstijl programma in Swift. 598 00:33:07,760 --> 00:33:11,490 >> Laten we eens een kijkje bij enkele van interessante dingen hier. 599 00:33:11,490 --> 00:33:15,150 Laten we eens kijken, maar een paar interessante dingen te misschien noemen 600 00:33:15,150 --> 00:33:19,930 dat in mijn functie van afdrukken van het aantal rangen, 601 00:33:19,930 --> 00:33:26,090 je zou kunnen herinneren dat ik had die lijst van items-- pset1, pset0 en examen. 602 00:33:26,090 --> 00:33:29,130 Je kunt eigenlijk snel en dit gemakkelijk doen 603 00:33:29,130 --> 00:33:34,490 Door de puntenboek, die een woordenboek die sleutels en waarden heeft. 604 00:33:34,490 --> 00:33:38,730 Zoek alle van de belangrijkste is via de stip sleutels methode hier, 605 00:33:38,730 --> 00:33:43,180 en gebruik dan deze joinWithSeparator, die vervolgens nemen van de sleutels 606 00:33:43,180 --> 00:33:48,590 dat we hadden ingetypt, pset1-- of sorry, pset0, pset1 en exam-- 607 00:33:48,590 --> 00:33:53,030 en aaneenschakelen ze samen met behulp van een komma en een spatie 608 00:33:53,030 --> 00:33:55,400 een lange reeks maken. 609 00:33:55,400 --> 00:34:00,190 Deze join operatie is gewoon fenomenaal bruikbaar in verschillende contexten. 610 00:34:00,190 --> 00:34:03,450 En zo is dit joinWithSeparator. 611 00:34:03,450 --> 00:34:06,939 >> En dit is een ding dat is veranderd van Swift 1 tot Swift 2. 612 00:34:06,939 --> 00:34:08,730 Vroeger was er een te zijn Python style-- als je 613 00:34:08,730 --> 00:34:13,219 vertrouwd met Python-- een Python stijl join methode op strings. 614 00:34:13,219 --> 00:34:15,699 Maar dat is niet meer Voor in Swift 2. 615 00:34:15,699 --> 00:34:19,400 Je wilt om dit te gebruiken als je wilt om een ​​array van dingen samenvoegen 616 00:34:19,400 --> 00:34:23,380 samen met een koord. 617 00:34:23,380 --> 00:34:27,889 >> Dus misschien dan in onze bespreking gemiddelde vóór, 618 00:34:27,889 --> 00:34:32,659 maakt het een beetje meer zin voor ons om de gemiddelde functie in te stellen 619 00:34:32,659 --> 00:34:36,610 eerder een optionele dubbele zijn dan alleen een expliciete dubbele. 620 00:34:36,610 --> 00:34:39,239 Omdat we dat ongewone aandoening waarbij, 621 00:34:39,239 --> 00:34:41,550 wat als cijferlijst eigenlijk geen waarden binnen het? 622 00:34:41,550 --> 00:34:44,280 Wat moet de gemiddelde rendement? 623 00:34:44,280 --> 00:34:46,350 >> Nou misschien in C u zou iets hebben gedaan 624 00:34:46,350 --> 00:34:50,040 als voorwaarde een sentinel waarde, zoals 0.0, of misschien een negatief getal, 625 00:34:50,040 --> 00:34:53,690 of iets gewoon vertegenwoordigt het feit dat er een fout 626 00:34:53,690 --> 00:34:57,910 en je misschien niet eigenlijk de mogelijkheid om dit gemiddelde te berekenen. 627 00:34:57,910 --> 00:35:05,590 Nou, de schoonheid van het opgeven van een optionele soort zou zijn om dat te doen. 628 00:35:05,590 --> 00:35:09,540 En ik ben nu zeg al deze woorden, maar dit eigenlijk niet optionals gebruiken. 629 00:35:09,540 --> 00:35:12,970 Maar we zullen zien dat in slechts minuten waar we gemiddeld kunt instellen 630 00:35:12,970 --> 00:35:17,230 een optionele soort gegevens, zodat zijn als het daadwerkelijk terugkeert sommige gegevens, dan 631 00:35:17,230 --> 00:35:18,470 zullen we die gegevens terug. 632 00:35:18,470 --> 00:35:20,570 Anders zullen we terugkeren nihil, zegt dat dit 633 00:35:20,570 --> 00:35:22,200 geen logische berekening. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Laten we gaan naar iets anders. 636 00:35:28,570 --> 00:35:35,910 Dus vanaf hier, hebben we gekeken naar al deze voorbeelden in de opdrachtregel. 637 00:35:35,910 --> 00:35:39,470 Maar echt wat je gaat te behandelen is Xcode. 638 00:35:39,470 --> 00:35:43,720 En een van de leuke dingen over Xcode is, en in het bijzonder in Swift, 639 00:35:43,720 --> 00:35:47,450 is dat we dit ding heet een speeltuin. 640 00:35:47,450 --> 00:35:51,470 En een speeltuin is helemaal niet een iOS-app. 641 00:35:51,470 --> 00:35:54,751 Maar het laat je om te experimenteren met Swift in een zeer eenvoudige manier. 642 00:35:54,751 --> 00:35:56,000 U kunt al uw code in te typen. 643 00:35:56,000 --> 00:35:58,140 Het is mooi hier syntax gemarkeerd. 644 00:35:58,140 --> 00:36:01,600 Wanneer u een nieuw bestand te maken, zal het vragen als je wilt een speeltuin maken. 645 00:36:01,600 --> 00:36:08,720 Maar het leuke van de Playground is dat aan de rechterkant van uw raam, 646 00:36:08,720 --> 00:36:12,020 doet het eigenlijk laten zien output van de code. 647 00:36:12,020 --> 00:36:16,110 Dus als ik naar beneden scrollen, kunnen we wat zien de productie van verschillende regels code 648 00:36:16,110 --> 00:36:17,200 eigenlijk gebeurt te zijn. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Dus in dit geval, gaan we richting veranderen gewoon een beetje 651 00:36:26,790 --> 00:36:30,960 en praten over iets dat echt belangrijk om dit hoge niveau manier 652 00:36:30,960 --> 00:36:34,020 dat Swift opereert, en het is dit idee van sluitingen. 653 00:36:34,020 --> 00:36:36,960 En je hebt waarschijnlijk dit gezien een beetje in JavaScript. 654 00:36:36,960 --> 00:36:40,770 Voor degenen onder u die zijn in CS50, sluitingen 655 00:36:40,770 --> 00:36:47,240 zijn erg populair, zeer goede manier van doen hoog niveau zaken in de moderne talen. 656 00:36:47,240 --> 00:36:50,270 Maar het is ook een soort van moeilijk te wikkel je hoofd rond de eerste keer. 657 00:36:50,270 --> 00:36:52,269 Dus als u op zoek naar dit eerste keer, dat is OK. 658 00:36:52,269 --> 00:36:56,740 Kijk maar naar de broncode en zien als je kan het uitzoeken thuis. 659 00:36:56,740 --> 00:37:01,050 >> Dus in dit geval, laten we zeggen dat we willen veel exponenten creëren 660 00:37:01,050 --> 00:37:04,134 met enige vaste waarde. 661 00:37:04,134 --> 00:37:05,800 Dus in dit geval kan ik een functie te creëren. 662 00:37:05,800 --> 00:37:09,270 Ik ga noemen macht van 2 wiens enige doel in het leven 663 00:37:09,270 --> 00:37:15,770 is om wat input en dubbele nemen het, en terug te keren die waarde. 664 00:37:15,770 --> 00:37:21,210 Merk op dat hier ben ik aanvaarden één type data. 665 00:37:21,210 --> 00:37:23,137 Het gaat om een ​​variabele genaamd x zijn. 666 00:37:23,137 --> 00:37:23,970 Het is van het type Double. 667 00:37:23,970 --> 00:37:26,190 En ik ga een dubbele hier terugkeren. 668 00:37:26,190 --> 00:37:29,100 En ik ga gewoon doen een zeer, eerlijk gezegd, vrij 669 00:37:29,100 --> 00:37:32,650 naïeve manier van een verdubbeling van deze waarde. 670 00:37:32,650 --> 00:37:35,600 En ik zal je laten zien waarom dit is nuttig in slechts een seconde. 671 00:37:35,600 --> 00:37:40,418 >> Merk op dat hier hebben we dit gamma weer. iets in 1, punt 672 00:37:40,418 --> 00:37:44,130 dot dot, 2, waardoor deze lus zal twee keer draaien. 673 00:37:44,130 --> 00:37:46,480 Maar dit is een dummy variabele. 674 00:37:46,480 --> 00:37:49,650 Het betekent dat ik ben niet echt van plan om gebruiken die variabele overal 675 00:37:49,650 --> 00:37:51,070 binnenkant van deze lus. 676 00:37:51,070 --> 00:37:55,380 Ik wil deze lijn code twee keer draaien, 677 00:37:55,380 --> 00:37:58,980 zonder te weten de waarde van dat bereik. 678 00:37:58,980 --> 00:38:02,570 >> Dus in dit geval ben ik rennen resultaat x keer tweemaal, die in wezen 679 00:38:02,570 --> 00:38:06,560 betekent dat ik de kwadratuur van deze waarde. 680 00:38:06,560 --> 00:38:10,230 En dit gebeurt werken als we zouden verwachten. 681 00:38:10,230 --> 00:38:16,410 Power of 2, passeren de waarde 2,0 geeft ons een vermogen van 4. 682 00:38:16,410 --> 00:38:18,810 3,2 werken voor 10,24. 683 00:38:18,810 --> 00:38:22,660 >> Nu kunnen we een soortgelijke doen ding voor de macht van 3. 684 00:38:22,660 --> 00:38:25,330 Maar nu verandert alleen het bereik. 685 00:38:25,330 --> 00:38:28,840 Voor dummy variabele 1 tot 3, vermenigvuldig 3 keer, 686 00:38:28,840 --> 00:38:29,830 en doe hetzelfde. 687 00:38:29,830 --> 00:38:32,240 >> Dus dit misschien het gevoel een beetje gekunsteld. 688 00:38:32,240 --> 00:38:34,270 Maar er is een belangrijke ding hier die 689 00:38:34,270 --> 00:38:37,770 dat kijken naar deze twee functies, is er 690 00:38:37,770 --> 00:38:43,600 maar één ding is dat anders, dat deze waarde in het gebied. 691 00:38:43,600 --> 00:38:46,910 Alles over deze twee functies vermogen van 3 en macht van 2, 692 00:38:46,910 --> 00:38:50,440 in feite identiek omdat zij werken op dezelfde wijze. 693 00:38:50,440 --> 00:38:53,460 >> Dus op dit punt, een beetje alarmbel moeten afgaan. 694 00:38:53,460 --> 00:38:56,200 Hopelijk wat je zegt, je weet wel, dit voelt een beetje 695 00:38:56,200 --> 00:38:59,250 zoals dubbel werk. 696 00:38:59,250 --> 00:39:02,950 Misschien is er een manier die ik zou doen in staat zijn om dit alles te kapselen 697 00:39:02,950 --> 00:39:06,630 en een functie of maak een functie die 698 00:39:06,630 --> 00:39:11,550 doet precies wat ik wil, zonder hoeven te typen expliciet. 699 00:39:11,550 --> 00:39:15,732 En dit is wat de kracht van een sluiting stelt ons in staat te doen. 700 00:39:15,732 --> 00:39:16,940 Dus laten we eens een kijkje op deze. 701 00:39:16,940 --> 00:39:18,700 En ik zal een paar te besteden minuten op deze, omdat deze 702 00:39:18,700 --> 00:39:20,310 is erg belangrijk voor Swift. 703 00:39:20,310 --> 00:39:22,900 We zien dit de hele tijd. 704 00:39:22,900 --> 00:39:24,550 We gaan naar een functie te definiëren. 705 00:39:24,550 --> 00:39:26,380 Het zal worden genoemd powerof. 706 00:39:26,380 --> 00:39:29,470 Het gaat om een ​​accepteren parameter genaamd y van het type Int. 707 00:39:29,470 --> 00:39:32,220 Maar een kijkje nemen op de return type. 708 00:39:32,220 --> 00:39:38,730 De return type is, in haakjes, dubbele pijl Double. 709 00:39:38,730 --> 00:39:43,370 Wat betekent dat deze functie, deze functie powerof, 710 00:39:43,370 --> 00:39:46,550 terugkeert van een functie. 711 00:39:46,550 --> 00:39:50,845 Dat is het aanvaarden van een tweepersoonskamer en het terugsturen van een dubbel. 712 00:39:50,845 --> 00:39:53,720 Dus dat klinkt misschien soort gek, maar laten we naar beneden scrollen een beetje 713 00:39:53,720 --> 00:39:55,060 en kijken om te zien wat er gebeurt. 714 00:39:55,060 --> 00:39:57,910 We zijn in deze functie powerof. 715 00:39:57,910 --> 00:40:00,760 We zijn het creëren van een nieuwe functie genaamd exponentiator, 716 00:40:00,760 --> 00:40:02,900 maar het maakt niet uit wat het is. 717 00:40:02,900 --> 00:40:06,410 >> Merk op dat dit een invoerwaarde van x. 718 00:40:06,410 --> 00:40:09,910 En het neemt in een tweepersoonskamer en het terugsturen van een dubbel. 719 00:40:09,910 --> 00:40:16,320 Dit is dezelfde code die we zagen hierboven, behalve dat de waarde van 2 720 00:40:16,320 --> 00:40:20,060 of de waarde van 3, die bovengrens in dat gebied, 721 00:40:20,060 --> 00:40:23,210 is vervangen door deze waarde van y, waarbij 722 00:40:23,210 --> 00:40:27,230 was de eerste parameter onze powerof functie. 723 00:40:27,230 --> 00:40:31,700 En op dit punt, we terug exponentiator. 724 00:40:31,700 --> 00:40:33,345 We zijn terug van de functie. 725 00:40:33,345 --> 00:40:36,300 726 00:40:36,300 --> 00:40:39,550 >> Het is net zoiets als een kleine geest waait. 727 00:40:39,550 --> 00:40:44,360 Maar laten we eens voorstellen wat er gebeurt als ik bel deze functie powerof 728 00:40:44,360 --> 00:40:47,610 en overgaan in het wat waarde als 2. 729 00:40:47,610 --> 00:40:50,020 Wat dit betekent is dat Ik heb nu de waarde 730 00:40:50,020 --> 00:40:55,130 2 for y, hetgeen betekent dat deze waarde y in deze functie exponentiator 731 00:40:55,130 --> 00:40:56,410 zal die waarde 2 zijn. 732 00:40:56,410 --> 00:41:01,290 Maar ik ben terug dit exponentiator functie. 733 00:41:01,290 --> 00:41:05,900 >> Dus let op wat Swift zegt dat ik gecreëerd in dit geval. 734 00:41:05,900 --> 00:41:10,550 Laat plein is een definitie, het is een functie die een dubbele aanvaardt 735 00:41:10,550 --> 00:41:12,610 en geeft een dubbel. 736 00:41:12,610 --> 00:41:16,590 Ik heb een functie gecreëerd dat pleinen iets 737 00:41:16,590 --> 00:41:19,782 met behulp van dit mechanisme hier. 738 00:41:19,782 --> 00:41:22,490 En echt wat er gebeurt is dat terugkeert functie 739 00:41:22,490 --> 00:41:26,390 exponentiator, maar deze waarde y is verpakt erin. 740 00:41:26,390 --> 00:41:31,080 En dus nu elke keer als ik dit gebruiken variabele of deze constante genoemd 741 00:41:31,080 --> 00:41:35,180 vierkant, het gaat het te gedragen als een functie. 742 00:41:35,180 --> 00:41:39,960 En zo kan ik dan bellen die variabele als ik zou een functie aan te roepen, 743 00:41:39,960 --> 00:41:43,830 en overgaan in het een nummer, zoals in dit geval 3. 744 00:41:43,830 --> 00:41:45,910 En ik zal dan vierkant deze waarde. 745 00:41:45,910 --> 00:41:53,340 Dus 3 kwadraat Vervolgens 9 geworden, zoals we hier kunnen zien. 746 00:41:53,340 --> 00:41:56,530 >> Echt gek, maar dit nu laat me de kans 747 00:41:56,530 --> 00:41:59,040 andere powerof functies te creëren. 748 00:41:59,040 --> 00:42:03,680 Zoals ik kan zeggen, OK, en nu wil ik een nieuwe functie maakt, powerof (3), 749 00:42:03,680 --> 00:42:06,290 en opslaan die in een constante genoemd kubus. 750 00:42:06,290 --> 00:42:10,220 En nu kubus gaat om een ​​te zijn aparte functie die zal dan 751 00:42:10,220 --> 00:42:14,800 neem wat waarde als input en kubus die waarde zoals we kunnen zien in de onderste regel 752 00:42:14,800 --> 00:42:16,420 hier. 753 00:42:16,420 --> 00:42:18,590 blokje 2 zal leiden tot 8. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Hopelijk mooie leuke dingen. 756 00:42:22,680 --> 00:42:25,920 Je hebt nog nooit eerder gezien. 757 00:42:25,920 --> 00:42:29,990 Ik moedig u te kijken naar sluitingen en onderzoeken dit een beetje meer. 758 00:42:29,990 --> 00:42:33,570 Het is echt krachtig spul zien we veel in JavaScript en enkele andere talen. 759 00:42:33,570 --> 00:42:37,160 Het is echt belangrijk om het begrijpen van API's en 760 00:42:37,160 --> 00:42:38,620 dat we zullen krijgen in slechts een seconde. 761 00:42:38,620 --> 00:42:39,456 Ja? 762 00:42:39,456 --> 00:42:43,740 >> Publiek: Als je dat doet powerof (2), haakjes, en dan 763 00:42:43,740 --> 00:42:48,764 een haakje, een andere input-- u bent in principe vervangen van het plein. 764 00:42:48,764 --> 00:42:50,930 DAN AMRMENDARIZ: Dus kijk op het allerlaatste lijn hier. 765 00:42:50,930 --> 00:42:55,930 Het is eigenlijk volledig mogelijk dat doen chaining als u voorgesteld. 766 00:42:55,930 --> 00:43:00,990 Dus powerof (5) betekent dat we gaan een exponentiator van 5 hebben hier. 767 00:43:00,990 --> 00:43:04,160 Dus dit is in wezen gaat het worden 4 hetzelfde als de vijfde macht, 768 00:43:04,160 --> 00:43:07,200 want we hebben een exponentiating gemaakt functie om de vijfde macht, 769 00:43:07,200 --> 00:43:09,920 en we passeren in die functie de waarde 4. 770 00:43:09,920 --> 00:43:12,619 En krijgen we die waarde dat wij verwachten, 1024. 771 00:43:12,619 --> 00:43:14,785 Publiek: En het is niet een te noemen, dus het maakt het makkelijker 772 00:43:14,785 --> 00:43:16,570 om te lezen, het plein wat dan ook. 773 00:43:16,570 --> 00:43:17,903 >> DAN AMRMENDARIZ: Juist, precies. 774 00:43:17,903 --> 00:43:21,120 Dus voordat ik het net in een constante hier dus 775 00:43:21,120 --> 00:43:23,808 dat maakte het gemakkelijk om die naam te gebruiken. 776 00:43:23,808 --> 00:43:24,308 Ja? 777 00:43:24,308 --> 00:43:26,942 >> PUBLIEK: In deze context powerof, het is een deel 778 00:43:26,942 --> 00:43:30,774 van de programmeertaal in tegenstelling tot de manier waarop u 779 00:43:30,774 --> 00:43:33,952 denk aan powerof in [onverstaanbaar]? 780 00:43:33,952 --> 00:43:35,660 DAN AMRMENDARIZ: So in dit geval powerof 781 00:43:35,660 --> 00:43:39,280 eenvoudigweg de naam van de functie die ik gedefinieerd hier. 782 00:43:39,280 --> 00:43:41,801 Dus het is niet inherent de taal zelf, 783 00:43:41,801 --> 00:43:43,550 maar in plaats daarvan, het is gewoon een functie heeft 784 00:43:43,550 --> 00:43:45,628 die naam omdat ik geef het die naam. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 Een andere vragen? 787 00:43:51,920 --> 00:43:52,800 Prima. 788 00:43:52,800 --> 00:43:54,750 >> Nu is dit geweldig. 789 00:43:54,750 --> 00:43:58,170 Maar je bent niet van plan om een ​​te zien Veel sluiting functies 790 00:43:58,170 --> 00:44:03,440 zijn als dit waar u definieert, binnen van één functie, andere functie. 791 00:44:03,440 --> 00:44:04,320 En je kunt het doen. 792 00:44:04,320 --> 00:44:06,430 Maar het is een soort van niet echt nodig, toch? 793 00:44:06,430 --> 00:44:09,189 Net waarom heb ik dit te definiëren functie genaamd exponentiator 794 00:44:09,189 --> 00:44:10,480 en dan onmiddellijk terug. 795 00:44:10,480 --> 00:44:15,220 Waarom niet meteen kan ik gewoon deze functie terug te keren? 796 00:44:15,220 --> 00:44:18,890 >> En in feite is dit precies het idee achter een concept genaamd 797 00:44:18,890 --> 00:44:22,410 anonieme functies, waarbij anonieme functies niet echt 798 00:44:22,410 --> 00:44:25,270 een naam, omdat ze niet nodig om een ​​te hebben. 799 00:44:25,270 --> 00:44:28,700 Dus in dit geval, 7B, kunnen we precies dat te vinden. 800 00:44:28,700 --> 00:44:31,470 Het is allemaal dezelfde code, doet precies hetzelfde, 801 00:44:31,470 --> 00:44:35,570 maar nu hebben we het veranderd een beetje, zodat dat deze powerof functie onmiddellijk 802 00:44:35,570 --> 00:44:37,750 retourneert een functie. 803 00:44:37,750 --> 00:44:44,150 Merk op dat na terugkeer, er is een open accolade. 804 00:44:44,150 --> 00:44:46,410 Het wordt verwacht dat deze ingang Double. 805 00:44:46,410 --> 00:44:48,560 Het wordt verwacht dat de output Double. 806 00:44:48,560 --> 00:44:52,175 En dan de in trefwoord scheidt de code zelf. 807 00:44:52,175 --> 00:44:53,550 Dus dit is een anonieme functie. 808 00:44:53,550 --> 00:44:57,030 Het heeft niet echt een naam, terwijl voordat het exponentiator werd genoemd. 809 00:44:57,030 --> 00:45:00,229 Maar zoals we zagen, gewoon echt niet verwijzen naar exponentiator 810 00:45:00,229 --> 00:45:01,270 buiten die functie. 811 00:45:01,270 --> 00:45:02,470 Dus het deed er niet toe. 812 00:45:02,470 --> 00:45:06,300 Dus deze anonieme functie is zo genoemd omdat het is naamloos, 813 00:45:06,300 --> 00:45:09,107 maar het is nog steeds gebruikt In het kader van deze code. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> De komende paar die ik ben zal hopelijk blijven 816 00:45:16,079 --> 00:45:17,370 blazen je geest een beetje. 817 00:45:17,370 --> 00:45:20,410 We kunnen dit nog eenvoudiger. 818 00:45:20,410 --> 00:45:24,490 Want als scherpzinnig was wees eerder, 819 00:45:24,490 --> 00:45:29,100 misschien zijn we eigenlijk weten, door afleiden van deze code, wat 820 00:45:29,100 --> 00:45:31,750 de output van deze code gaat worden. 821 00:45:31,750 --> 00:45:38,180 En inderdaad, in deze anonieme functie, We kunnen in feite afleiden van de soorten gegevens. 822 00:45:38,180 --> 00:45:41,650 >> Dus in dit ene, we niet langer moeten expliciet te definiëren 823 00:45:41,650 --> 00:45:44,850 het soort gegevens dat wordt input en output van deze functie 824 00:45:44,850 --> 00:45:45,890 voor een paar redenen. 825 00:45:45,890 --> 00:45:51,390 Een daarvan is dat we hebben gedefinieerd, op naar de prototype van de omhullende functie, 826 00:45:51,390 --> 00:45:55,770 wat voor soort data deze anonieme functie moet input en output. 827 00:45:55,770 --> 00:45:57,900 En de andere, we kan afleiden uit de code 828 00:45:57,900 --> 00:46:01,930 hier beneden dat we het accepteren input die is van het type Double 829 00:46:01,930 --> 00:46:03,670 en het terugsturen van een dubbel. 830 00:46:03,670 --> 00:46:07,890 >> Merk op dat hier hebben we niet expliciet gedefinieerd de namen van de argumenten 831 00:46:07,890 --> 00:46:11,220 dat deze functie accepteert. 832 00:46:11,220 --> 00:46:16,180 En zo zien we dat we kunnen verwijzen naar die parameters met behulp van $ 0, $ 1, 833 00:46:16,180 --> 00:46:20,140 enzovoort, enzovoort, naargelang het aantal van die parameter gebruikt 834 00:46:20,140 --> 00:46:20,850 in deze functie. 835 00:46:20,850 --> 00:46:23,370 836 00:46:23,370 --> 00:46:29,740 >> Dit is iets dat je gaat te zien van een kavel is deze open accolade 837 00:46:29,740 --> 00:46:32,797 definition gevolgd door een $ 0, en vervolgens een bepaalde handeling, 838 00:46:32,797 --> 00:46:34,130 en dan een gesloten accolade. 839 00:46:34,130 --> 00:46:38,630 Dat is een anonieme functie dat voert deze bewerking. 840 00:46:38,630 --> 00:46:42,940 Het heeft deze parameter waar de het type is afgeleid. 841 00:46:42,940 --> 00:46:44,860 Die eerste parameter is $ 0. 842 00:46:44,860 --> 00:46:49,010 En enkele operatie is gebeurt op dat $ 0. 843 00:46:49,010 --> 00:46:52,100 >> Publiek: Dus het dollarteken betekent parameter principe, 844 00:46:52,100 --> 00:46:53,429 en 0 betekent de eerste? 845 00:46:53,429 --> 00:46:54,720 DAN Armendáriz: Dat is juist. 846 00:46:54,720 --> 00:46:59,100 Dus de dollar teken betekent in feite parameter en 0: de eerste. 847 00:46:59,100 --> 00:47:02,760 Maar het werkt specifiek dit geval heb ik niet genoemd 848 00:47:02,760 --> 00:47:07,940 de argumenten in mijn anonieme functie. 849 00:47:07,940 --> 00:47:11,119 >> PUBLIEK: Heeft Perl of iets hebben Dit dollar teken, dollar 0 daar? 850 00:47:11,119 --> 00:47:12,702 DAN Armendáriz: Doet die, het spijt me? 851 00:47:12,702 --> 00:47:15,360 PUBLIEK: Heeft Perl hebben Dit dollar 0, dollar 1-- 852 00:47:15,360 --> 00:47:17,318 DAN Armendáriz: Ik ben niet te vertrouwd met Perl, 853 00:47:17,318 --> 00:47:21,340 maar PHP wat definieert variabelen gebaseerd op dollar tekens. 854 00:47:21,340 --> 00:47:26,120 En er kunnen sommige talen dat functies als deze. 855 00:47:26,120 --> 00:47:28,240 In feite, Swift leent een Veel functies, zoals deze 856 00:47:28,240 --> 00:47:29,489 van een heleboel andere talen. 857 00:47:29,489 --> 00:47:32,380 We zien hints van Python in. 858 00:47:32,380 --> 00:47:35,800 Deze definitie van het type lijkt te komen uit OCaml. 859 00:47:35,800 --> 00:47:38,932 En we hebben net een hele hoop spullen uit veel verschillende talen. 860 00:47:38,932 --> 00:47:40,640 Dat is een van de leuke dingen over Swift 861 00:47:40,640 --> 00:47:43,390 is dat het een groot deel van de beste ideeën van een bos van talen 862 00:47:43,390 --> 00:47:47,229 en schoenlepels ze allemaal samen in een super taal. 863 00:47:47,229 --> 00:47:49,520 In feite, als je me laten blijven blazen je geest, 864 00:47:49,520 --> 00:47:51,000 dus we hebben dit allemaal te doen. 865 00:47:51,000 --> 00:47:56,690 We kunnen misschien is dit een beetje te vereenvoudigen bits door te beseffen dat, uiteraard, 866 00:47:56,690 --> 00:48:02,120 Swift heeft een exponentiating functie ingebouwd. 867 00:48:02,120 --> 00:48:04,660 Als ik importeer Darwin, die is gewoon de bibliotheek 868 00:48:04,660 --> 00:48:09,680 beschikt over deze functie genaamd pow, nu Ik kan mijn macht van functie te vereenvoudigen 869 00:48:09,680 --> 00:48:11,830 de volgende zijn. 870 00:48:11,830 --> 00:48:15,860 Het gaat om terug te keren Deze anonieme functie. 871 00:48:15,860 --> 00:48:17,950 >> Maar kijk eens hoe eenvoudig dit is nu. 872 00:48:17,950 --> 00:48:22,780 Dit is een anonieme functie accepteert een soort van data, 873 00:48:22,780 --> 00:48:26,600 en het gaat om één te zijn argument in het bijzonder, 874 00:48:26,600 --> 00:48:29,320 verwezen naar $ 0, dat is van het type Double. 875 00:48:29,320 --> 00:48:32,680 Het gaat om een ​​soort dubbel terug. 876 00:48:32,680 --> 00:48:35,760 Maar de return statement is nu impliciet. 877 00:48:35,760 --> 00:48:39,990 >> En het is precies deze stijl die is zeer, zeer overwegend in Swift, 878 00:48:39,990 --> 00:48:40,790 overal. 879 00:48:40,790 --> 00:48:43,190 We gaan om dit te zien de hele tijd in Swift. 880 00:48:43,190 --> 00:48:46,150 Dus ik ben met alle van dit u als gevolg van deze syntaxis. 881 00:48:46,150 --> 00:48:49,070 Dit is heel gebruikelijk te zien, hetgeen betekent 882 00:48:49,070 --> 00:48:51,420 is een anonieme functie die presteert 883 00:48:51,420 --> 00:48:54,640 enkele operatie op deze argumenten. 884 00:48:54,640 --> 00:48:56,940 En er is een impliciete rendement. 885 00:48:56,940 --> 00:49:01,850 Dus het is absoluut hetzelfde voor ons om dit te zeggen, hier. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> Omdat deze curly bracket is een functie, 888 00:49:08,150 --> 00:49:10,480 we zijn het uitvoeren van deze operatie Op het eerste argument. 889 00:49:10,480 --> 00:49:12,170 We gaan terug te keren dat. 890 00:49:12,170 --> 00:49:14,815 Maar deze uiterlijke terugkeer is terugkeren dat hele functie, 891 00:49:14,815 --> 00:49:19,855 dat hele anonieme functie dat we net hebben gemaakt. 892 00:49:19,855 --> 00:49:21,689 Een andere vragen? 893 00:49:21,689 --> 00:49:23,980 Oké, ik weet niet of jullie zijn er klaar voor, 894 00:49:23,980 --> 00:49:27,455 maar we kunnen nog gekker gaan met Swift. 895 00:49:27,455 --> 00:49:28,560 Ben je klaar? 896 00:49:28,560 --> 00:49:29,930 OK, dit is geweldig. 897 00:49:29,930 --> 00:49:35,310 >> Nu hebben we eigenlijk de mogelijkheid tot in Swift, want hoe modulaire 898 00:49:35,310 --> 00:49:39,650 en hoe het protocol gebaseerd is, om definiëren onze eigen freaking operators. 899 00:49:39,650 --> 00:49:44,060 Zoals in dit geval, hadden we geen operator voor goed exponentiation--, 900 00:49:44,060 --> 00:49:47,990 voor het uitvoeren van bevoegdheden van iets. 901 00:49:47,990 --> 00:49:53,632 Maar ik kan, in Swift, definieert u een nieuwe operator die precies dat doet. 902 00:49:53,632 --> 00:49:55,590 Dus in dit geval is er een stelletje syntax hier. 903 00:49:55,590 --> 00:49:59,980 En ik zal u toestaan ​​om naar te kijken thuis als je kijkt naar dit. 904 00:49:59,980 --> 00:50:06,890 Maar we zijn het definiëren van deze infix exploitant, **, die dan ons toelaten, 905 00:50:06,890 --> 00:50:09,840 door te definiëren wat dat functie ** eigenlijk 906 00:50:09,840 --> 00:50:15,010 doet, om een ​​linkerhand accepteren zijde en een rechterhand, 907 00:50:15,010 --> 00:50:21,190 en vervolgens de exponent van die terugkeer linkerkant naar de rechterkant. 908 00:50:21,190 --> 00:50:24,850 >> En nu ineens I een nieuwe teller hebt gemaakt. 909 00:50:24,850 --> 00:50:29,490 So 2 ** 3 betekent 2 met de derde macht. 910 00:50:29,490 --> 00:50:34,420 [Geest waait SOUND] Dit door zelf moet je zijn als, 911 00:50:34,420 --> 00:50:37,960 OK, schroef C. Ik ga Swift helemaal. 912 00:50:37,960 --> 00:50:38,740 Dit is geweldig. 913 00:50:38,740 --> 00:50:40,140 Dit is vrij fantastisch. 914 00:50:40,140 --> 00:50:42,240 >> Maar dit is een goed voorbeeld. 915 00:50:42,240 --> 00:50:45,570 Maar ik heb nooit een keer buiten van dit voorbeeld eigenlijk 916 00:50:45,570 --> 00:50:46,800 gedefinieerd mijn eigen operator. 917 00:50:46,800 --> 00:50:49,710 Maar toch, het toont een Veel van de macht van de Swift 918 00:50:49,710 --> 00:50:54,050 en waarom dit is eigenlijk echt heel cool. 919 00:50:54,050 --> 00:50:55,832 Oké, ja? 920 00:50:55,832 --> 00:50:57,790 Publiek: Als je definiëren van uw eigen operator, 921 00:50:57,790 --> 00:51:02,940 hoe weet je dat je per ongeluk niet proberen en te zorgen voor een operator die is 922 00:51:02,940 --> 00:51:06,040 ergens in C, zoals ergens verborgen in Swift, 923 00:51:06,040 --> 00:51:12,210 als een obscure die u misschien niet eerder hebben gezien. 924 00:51:12,210 --> 00:51:15,050 >> DAN Armendáriz: Dus als je probeert om uw eigen exploitanten te definiëren, 925 00:51:15,050 --> 00:51:20,970 is er het risico definiëren één over een bestaande operator. 926 00:51:20,970 --> 00:51:24,870 Dat gaat in een mate van detail die Ik denk niet dat we de tijd hebben om over te gaan. 927 00:51:24,870 --> 00:51:27,620 Dat gevaar. 928 00:51:27,620 --> 00:51:31,320 En dat is in feite de reden waarom Ik heb het dakje symbool, niet gebruiken die 929 00:51:31,320 --> 00:51:36,210 als we het typen van de macht, we meestal Gebruik 4 kleine dakje 5 ofzo 930 00:51:36,210 --> 00:51:40,560 als dat, net als we Gchatting vrienden of wat dan ook. 931 00:51:40,560 --> 00:51:43,660 Maar in dat geval, dat eigenlijk zou een aanrijding hebben veroorzaakt. 932 00:51:43,660 --> 00:51:46,450 En zo vermeed ik het alleen maar omdat Ik toevallig te weten in dit geval 933 00:51:46,450 --> 00:51:50,430 dat zou veroorzaken dat de botsing. 934 00:51:50,430 --> 00:51:52,270 >> Prima. 935 00:51:52,270 --> 00:51:55,080 Nu helaas voor de laatste zeven minuten, 936 00:51:55,080 --> 00:51:57,410 Ik moet blazen houden je geest een beetje. 937 00:51:57,410 --> 00:52:00,230 Dus staat u mij om te laten zien een aantal andere dingen ook. 938 00:52:00,230 --> 00:52:03,710 >> We hebben u zien dit idee van het hebben van deze anonieme functies, 939 00:52:03,710 --> 00:52:07,040 deze sluitingen die u in staat te stellen soort passeren functies rond. 940 00:52:07,040 --> 00:52:08,100 Je kunt ze terugkeren. 941 00:52:08,100 --> 00:52:09,490 Je kunt ze manipuleren. 942 00:52:09,490 --> 00:52:11,790 U kunt allerlei gekke dingen te doen. 943 00:52:11,790 --> 00:52:14,850 >> Maar een ander ding dat toevallig nuttig 944 00:52:14,850 --> 00:52:19,740 is de mogelijkheid om, in tegenstelling om terug te keren die functies 945 00:52:19,740 --> 00:52:25,146 in een functie, een functie doorgeven als een parameter aan een andere functie. 946 00:52:25,146 --> 00:52:30,430 Je zou ook kunnen denken waarom op aarde zou ik zoiets doen? 947 00:52:30,430 --> 00:52:33,660 >> Nou, laten we zeggen dat ik wil om deze operator te nemen dat ik 948 00:52:33,660 --> 00:52:40,260 werkte zo hard te maken en toe te passen het aan een heleboel verschillende nummers 949 00:52:40,260 --> 00:52:41,770 in een matrix. 950 00:52:41,770 --> 00:52:46,700 Dus in dit geval heb ik een array van integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 En ik wil ze allemaal te verdubbelen. 952 00:52:48,080 --> 00:52:50,430 De manier waarop we zouden in het algemeen doen is om gewoon te schrijven 953 00:52:50,430 --> 00:52:53,440 een eenvoudige lus die doorloopt ze allemaal 954 00:52:53,440 --> 00:52:57,140 en het uitvoeren van een soort van vierkante werking over hen, 955 00:52:57,140 --> 00:53:02,700 invoeren die nieuwe waarden in een nieuw variabele of eerder een nieuwe array here. 956 00:53:02,700 --> 00:53:07,370 En de waarde van de uitgang van Hierdoor is dan al deze arrays, 957 00:53:07,370 --> 00:53:10,200 of liever al die elementen nu kwadraat. 958 00:53:10,200 --> 00:53:12,680 >> En we konden het zelfde doen ding voor cubing het, 959 00:53:12,680 --> 00:53:15,360 maar een beetje alarmbel zou moeten gaan off 960 00:53:15,360 --> 00:53:17,360 zeggen dat er misschien een manier die we zouden 961 00:53:17,360 --> 00:53:19,860 in staat zijn om dit te vereenvoudigen een beetje. 962 00:53:19,860 --> 00:53:21,130 En in feite is er. 963 00:53:21,130 --> 00:53:25,320 Wat als we konden creëren een functie die ons in staat stelt 964 00:53:25,320 --> 00:53:28,350 te accepteren, als een roofdier, een functie? 965 00:53:28,350 --> 00:53:30,350 Dus in dit geval, neem een kijken naar deze argumenten. 966 00:53:30,350 --> 00:53:33,220 We gaan een lijst van dubbelspel te accepteren. 967 00:53:33,220 --> 00:53:35,030 En dan gaan we een functie accepteren 968 00:53:35,030 --> 00:53:40,990 in een variabele met de naam f dat gaat een dubbele nemen en terug te keren een Double. 969 00:53:40,990 --> 00:53:43,320 En de volledige output van deze gehele functie 970 00:53:43,320 --> 00:53:47,310 genaamd Mapper gaat terug een array genaamd dubbel. 971 00:53:47,310 --> 00:53:52,380 >> Wat dit dan zou mij toe doen is om te herhalen over die lijst 972 00:53:52,380 --> 00:53:56,350 en doe hetzelfde, maar nu die functie toe te passen op elke 973 00:53:56,350 --> 00:53:58,970 van de individuele waarden in die lijst. 974 00:53:58,970 --> 00:54:00,750 Dus ik weet niet echt wat f. 975 00:54:00,750 --> 00:54:02,010 Het maakt niet uit voor mij. 976 00:54:02,010 --> 00:54:06,530 Maar zolang het duurt in een dubbel, voert enkele operatie op het, 977 00:54:06,530 --> 00:54:08,640 en dan geeft een Dubbele, zou ik dan 978 00:54:08,640 --> 00:54:13,415 in staat om die functie in kaart over elk element van de lijst. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> En dit soort programmering riep hogere orde functies, 981 00:54:20,930 --> 00:54:24,440 waar we passeren functies rond als parameters 982 00:54:24,440 --> 00:54:26,430 en dingen te doen met de functies. 983 00:54:26,430 --> 00:54:29,640 Het is een beetje zoals het nemen van al deze ideeën die we hebben geleerd in CS50 984 00:54:29,640 --> 00:54:31,390 en hen sorteren van naar het volgende niveau. 985 00:54:31,390 --> 00:54:34,140 En dit is allemaal CS51 stijl spullen. 986 00:54:34,140 --> 00:54:37,080 En dus gaan we in de diepte meer in klassen als dat. 987 00:54:37,080 --> 00:54:38,930 >> Maar dit is ook belangrijk hier omdat we 988 00:54:38,930 --> 00:54:42,010 zie veel functies die worden gebruikt in Swift 989 00:54:42,010 --> 00:54:45,590 die in wezen doet dit, waar we 990 00:54:45,590 --> 00:54:48,300 sommige nummers, sommige matrix van getallen. 991 00:54:48,300 --> 00:54:50,850 We gaan voorbij dat serie in onze mapper. 992 00:54:50,850 --> 00:54:55,770 En we gaan ook passeren een functie die 993 00:54:55,770 --> 00:54:57,950 we hebben hier al gedefinieerd up. 994 00:54:57,950 --> 00:54:59,690 Het gaat om vierkant te zijn. 995 00:54:59,690 --> 00:55:02,220 En we gaan dan vierkant al die nummers 996 00:55:02,220 --> 00:55:04,710 en slaan die op dit resultaat here. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Dus dit geval hebben we ons gedefinieerd eigen functie genaamd mapper. 999 00:55:11,000 --> 00:55:15,370 Maar precies dit ding is, in feite ingebouwd in Swift. 1000 00:55:15,370 --> 00:55:18,960 Er zijn diverse functies genaamd kaart. 1001 00:55:18,960 --> 00:55:21,520 Er is een kaart functie, er is een vermindering van de functie, 1002 00:55:21,520 --> 00:55:25,630 en er is een filter-functie, die in wezen gelden functies 1003 00:55:25,630 --> 00:55:30,782 aan elk element in een lijst om ze aan te passen op een bepaalde manier. 1004 00:55:30,782 --> 00:55:34,510 >> Publiek: Dus omdat je transformeren Gegevens in een ander formaat 1005 00:55:34,510 --> 00:55:36,134 door middel van een function-- 1006 00:55:36,134 --> 00:55:37,050 DAN Armendáriz: Recht. 1007 00:55:37,050 --> 00:55:39,420 Ja, dus de functie dat we het accepteren 1008 00:55:39,420 --> 00:55:41,790 is het transformeren van de gegevens op een bepaalde manier. 1009 00:55:41,790 --> 00:55:44,700 In dit geval waren we ofwel kwadratuur, of we waren cubing het, 1010 00:55:44,700 --> 00:55:50,060 of eigenlijk, kunnen we uit te voeren geen bediening op het helemaal. 1011 00:55:50,060 --> 00:55:54,150 >> Maar laat me je dan laten zien hoe deze eruit komt te zien in de praktijk. 1012 00:55:54,150 --> 00:55:56,681 En nogmaals, ik ben het draaien van een beetje tijd. dus ik ben niet 1013 00:55:56,681 --> 00:55:59,430 zal zijn om over te gaan allemaal in staat van de broncode hier in detail. 1014 00:55:59,430 --> 00:56:00,721 Maar ik moedig u aan om dat te doen. 1015 00:56:00,721 --> 00:56:03,850 We zullen het zo snel plaatsen mogelijk na dit gesprek. 1016 00:56:03,850 --> 00:56:07,610 >> Maar als je een kijkje nemen op deze, veronderstellen dat we een lijst van nummers, 1017 00:56:07,610 --> 00:56:10,260 blok getallen in deze variabele gebelde nummers. 1018 00:56:10,260 --> 00:56:16,670 Dan willen we dit uit te voeren filter operatie op die nummers. 1019 00:56:16,670 --> 00:56:19,730 Dus filter een hogere Om functie die 1020 00:56:19,730 --> 00:56:24,660 accepteert een matrix en een functie. 1021 00:56:24,660 --> 00:56:28,760 En elk element, dat array, zij die hoedanigheid. 1022 00:56:28,760 --> 00:56:31,990 >> Als die functie terugkeert waar is, houdt dat punt. 1023 00:56:31,990 --> 00:56:36,100 Als die functie geeft false, werpt dat punt weg. 1024 00:56:36,100 --> 00:56:40,480 En dan is een lijst terug dat wordt dan al 1025 00:56:40,480 --> 00:56:44,360 van die items die zijn gefilterd. 1026 00:56:44,360 --> 00:56:47,150 >> Dus andere woorden, dit hetzelfde idee, de cijferlijst. 1027 00:56:47,150 --> 00:56:50,800 We kunnen verschillende soorten hebben op deze nummers waarde genoemd. 1028 00:56:50,800 --> 00:56:55,590 Zou kunnen zijn 100 en 70, en 40, enzovoort, enzovoort. 1029 00:56:55,590 --> 00:56:59,110 Wat dit filter doet is kennisgeving dat dit dat syntactische suiker 1030 00:56:59,110 --> 00:57:01,310 voor een anonieme functie. 1031 00:57:01,310 --> 00:57:05,980 Dit is een anonieme functie te zeggen dat de parameter die ik keur 1032 00:57:05,980 --> 00:57:09,690 gaat worden, als het groter dan 70, 1033 00:57:09,690 --> 00:57:15,837 dan is dit waar terug, waardoor dat punt zal in dit filter worden gehouden. 1034 00:57:15,837 --> 00:57:17,920 Dus laten we een beetje concreter over. 1035 00:57:17,920 --> 00:57:25,760 Als ik deze reeks getallen en bestaat uit 100, 70 en 40, 1036 00:57:25,760 --> 00:57:29,730 Ik dit filter uit te voeren operatie op elk van deze. 1037 00:57:29,730 --> 00:57:33,270 Zodat eerste is deze waarde van 100. 1038 00:57:33,270 --> 00:57:36,770 100 groter of gelijk 70 geldt dat 1039 00:57:36,770 --> 00:57:41,950 betekent dat 100 wordt bewaard in dit nieuwe exemplaar van deze array. 1040 00:57:41,950 --> 00:57:44,290 70 gaat ook. 1041 00:57:44,290 --> 00:57:46,020 Maar 40 niet. 1042 00:57:46,020 --> 00:57:54,290 Dus wat is teruggekeerd in passingCount is de matrix van elementen 100 en 70-- 1043 00:57:54,290 --> 00:57:57,410 100, komma, 70. 1044 00:57:57,410 --> 00:57:59,870 Dat waren de enige twee items werden gehouden. 1045 00:57:59,870 --> 00:58:03,740 En dus is de reden dat ik ging snel door veel van dit soort hoge orde 1046 00:58:03,740 --> 00:58:08,680 dingen zijn want dit is dat de gemeenschappelijke ding dat je mooi in Swift zullen zien 1047 00:58:08,680 --> 00:58:16,810 vaak is het uitvoeren van een operatie Met deze anonieme functie syntax. 1048 00:58:16,810 --> 00:58:18,450 >> Er is een aantal leuke dingen. 1049 00:58:18,450 --> 00:58:24,730 Switches zijn echt krachtig in Swift, Ik bedoel, net als een gek, gek krachtig. 1050 00:58:24,730 --> 00:58:28,250 U kunt gebruik maken van switch, en je kunt ze eigenlijk van toepassing 1051 00:58:28,250 --> 00:58:33,160 te bereiken, dat is een soort van gek, en doe chique dat soort dingen. 1052 00:58:33,160 --> 00:58:37,540 >> Maar in de laatste paar minuten, Ik wil vooruit overslaan heel ver 1053 00:58:37,540 --> 00:58:46,940 en laten u een specifiek voorbeeld van hoe we kunnen creëren in iOS app met Swift. 1054 00:58:46,940 --> 00:58:49,040 Dus als je aan het doen bent deze, moet je nemen 1055 00:58:49,040 --> 00:58:51,990 een blik at-- op Apple's documentatie, zij 1056 00:58:51,990 --> 00:58:56,084 hebben veel echt goede tutorials voor het maken van uw eerste aanvraag. 1057 00:58:56,084 --> 00:58:58,250 En ik moedig u te doen dat, omdat ze je mee 1058 00:58:58,250 --> 00:59:04,110 alle stappen van wat precies Klik op een iOS-applicatie te maken. 1059 00:59:04,110 --> 00:59:07,290 >> Maar hier hebben we deze iOS-app. 1060 00:59:07,290 --> 00:59:10,960 En het is een vrij eenvoudige applicatie echt. 1061 00:59:10,960 --> 00:59:13,840 Als ik dit run, laat me zien je hoe het eruit ziet. 1062 00:59:13,840 --> 00:59:19,480 Alles wat het wezen doet is het trekt van het internet een JSON-bestand 1063 00:59:19,480 --> 00:59:22,300 die ik heb opgeslagen op een server. 1064 00:59:22,300 --> 00:59:26,310 En dat JSON bestand definieert beelden die het mogelijk maken 1065 00:59:26,310 --> 00:59:31,680 ik vervolgens doorlopen, op mijn app, beelden van mijn web-server. 1066 00:59:31,680 --> 00:59:32,880 >> Dus ik heb hier getNextImage. 1067 00:59:32,880 --> 00:59:37,100 Het laadt een afbeelding van het internet, en toont vervolgens op het scherm. 1068 00:59:37,100 --> 00:59:38,200 >> Dus het is vrij eenvoudig. 1069 00:59:38,200 --> 00:59:41,550 Maar het doel is hier om te laten zien hoe kunnen we de dingen combineren 1070 00:59:41,550 --> 00:59:47,820 van de laatste paar weken van de CS50 in een werkelijke iOS-applicatie. 1071 00:59:47,820 --> 00:59:53,140 Met andere woorden, misschien één van de dingen die je wilt doen 1072 00:59:53,140 --> 00:59:56,340 is om een ​​iOS-applicatie die kan gegevens te trekken van het internet 1073 00:59:56,340 --> 00:59:59,070 en wat informatie geven de gebruiker. 1074 00:59:59,070 --> 01:00:03,130 Dat volledig het punt van deze broncode hier. 1075 01:00:03,130 --> 01:00:07,890 >> Dus er is veel te zeggen over hoe werkelijke iOS ontwikkeling doen. 1076 01:00:07,890 --> 01:00:12,860 Er is een heleboel gekke syntaxis dat we nog niet helemaal hebben gezien 1077 01:00:12,860 --> 01:00:15,580 als een klasse, wat een klasse eigenlijk is. 1078 01:00:15,580 --> 01:00:19,470 We kunnen grotendeels negeren dat voor het moment. 1079 01:00:19,470 --> 01:00:23,250 >> Maar merken dat we hebben bevat binnen die een aantal dingen 1080 01:00:23,250 --> 01:00:27,720 dat we al hebben gezien, zoals functies die specifieke namen te hebben. 1081 01:00:27,720 --> 01:00:32,650 En als we geven die functioneert de juiste namen 1082 01:00:32,650 --> 01:00:36,530 die naar verwachting door de iOS, in feite Dit voelt een beetje magisch. 1083 01:00:36,530 --> 01:00:40,300 Maar als je een te maken iOS-applicatie, is er 1084 01:00:40,300 --> 01:00:47,590 zijn specifieke functie namen die worden opgeroepen door de telefoon zelf 1085 01:00:47,590 --> 01:00:52,440 als de toepassing wordt geladen om te proberen het proces daadwerkelijk creëren 1086 01:00:52,440 --> 01:00:54,787 loopt uw ​​aanvraag. 1087 01:00:54,787 --> 01:00:58,120 Dus nogmaals, er is een heleboel dingen die ik hier hebben dan te verdoezelen om ons 1088 01:00:58,120 --> 01:01:00,570 specifiek over praten. 1089 01:01:00,570 --> 01:01:06,050 Maar ik moedig u te kijken naar misschien de andere iOS seminar, maar ook een aantal 1090 01:01:06,050 --> 01:01:09,290 van de tutorials online die wel een veel betere baan beschrijven 1091 01:01:09,290 --> 01:01:11,030 de specifieke informatie. 1092 01:01:11,030 --> 01:01:15,760 >> Maar we kunnen een paar dingen zien dat zijn interessant uit de code hier. 1093 01:01:15,760 --> 01:01:17,950 Merk op dat we hebben als statements. 1094 01:01:17,950 --> 01:01:20,400 By the way, een belangrijke ding over if-statements 1095 01:01:20,400 --> 01:01:24,860 dat de haakjes rond Boolean expressie zijn optioneel. 1096 01:01:24,860 --> 01:01:30,800 Maar de accolades zijn niet optioneel, maakt niet uit hoe veel of weinig regels code 1097 01:01:30,800 --> 01:01:32,360 je hebt in een if-statement. 1098 01:01:32,360 --> 01:01:38,670 Je kunt niet een if statements hebben zonder accolades in Swift. 1099 01:01:38,670 --> 01:01:41,000 >> En dit is, nou ja, soort dom. 1100 01:01:41,000 --> 01:01:43,910 Maar er is historische redenen voor. 1101 01:01:43,910 --> 01:01:46,180 Het is de bedoeling om je te redden van jezelf. 1102 01:01:46,180 --> 01:01:49,899 Als dit bijvoorbeeld, kun je niet elimineren de accolades rond die 1103 01:01:49,899 --> 01:01:50,440 als statement. 1104 01:01:50,440 --> 01:01:52,730 Deze zijn in feite vereist. 1105 01:01:52,730 --> 01:01:54,480 Dus ik moedig u aan neem een ​​kijkje op deze. 1106 01:01:54,480 --> 01:01:56,230 Maar er is nog een construeren die ik wil 1107 01:01:56,230 --> 01:02:02,640 om te laten zien dat over Swift is nieuw voor Swift 2.0 vergelijking 1108 01:02:02,640 --> 01:02:08,460 oudere versies van Swift, die de volgende is. 1109 01:02:08,460 --> 01:02:11,620 Laten we eens kijken waar heb ik het hier? 1110 01:02:11,620 --> 01:02:16,630 >> Dus in deze functie genaamd fetchJSON, deze functie 1111 01:02:16,630 --> 01:02:23,450 is verantwoordelijk voor het trekken van dat JSON bestand van een URL, die net zo gebeurt 1112 01:02:23,450 --> 01:02:26,310 te draaien op mijn CS50 IDE. 1113 01:02:26,310 --> 01:02:28,580 Ik ben begonnen met Apache, zet mijn JSON bestand daar, 1114 01:02:28,580 --> 01:02:32,110 en ik ben in staat om trek dat gegevens van het internet met behulp van 1115 01:02:32,110 --> 01:02:36,430 deze functie en deze URL, die door de telefoon. 1116 01:02:36,430 --> 01:02:40,490 Het is voorzien van een bibliotheek die u gebruikt wanneer 1117 01:02:40,490 --> 01:02:43,140 je doet een aantal iOS app ontwikkeling. 1118 01:02:43,140 --> 01:02:49,690 >> Merkt hier dat er deze ongewone syntactische constructie genaamd bewaker. 1119 01:02:49,690 --> 01:02:53,530 En echt alles is in Swift is een manier om na te gaan 1120 01:02:53,530 --> 01:02:56,870 dat sommige dingen hebben is voldaan voordat u 1121 01:02:56,870 --> 01:03:00,000 verder met de rest van de functie. 1122 01:03:00,000 --> 01:03:04,260 Dus ik zou kunnen hebben, met behulp van deze optionele soort, 1123 01:03:04,260 --> 01:03:10,530 Ik kon de URL door hebben gevonden het uitvoeren van deze functie NSURL 1124 01:03:10,530 --> 01:03:16,640 en opslaan die in een URL constant, en vervolgens controleren 1125 01:03:16,640 --> 01:03:20,820 om te zien of de URL was nihil, omdat het ging om een ​​optionele soort terugkeren. 1126 01:03:20,820 --> 01:03:25,660 En als het was nihil, dan zou ik afdrukken van een fout en dan terug. 1127 01:03:25,660 --> 01:03:29,970 >> Maar in plaats daarvan, wat guard laat wij doen, is dat zeer ding, 1128 01:03:29,970 --> 01:03:34,550 maar zorg ervoor dat het is inderdaad zo dat URL 1129 01:03:34,550 --> 01:03:38,020 correct is door NSURL ingesteld. 1130 01:03:38,020 --> 01:03:41,810 En zo ja, dan slaat dan dit, en het 1131 01:03:41,810 --> 01:03:46,110 zal u toelaten om verder te gaan met url te zijn correct gedefinieerd zijn. 1132 01:03:46,110 --> 01:03:48,830 Maar als het zo dat url is niet goed gedefinieerd, 1133 01:03:48,830 --> 01:03:52,550 Als deze functie geeft een fout of een andere onverwachte dingen 1134 01:03:52,550 --> 01:03:58,030 eigenlijk gebeurt, deze bewaker construct laat ons toe om vervolgens output die fout 1135 01:03:58,030 --> 01:04:00,390 en onmiddellijk terug te keren. 1136 01:04:00,390 --> 01:04:00,890 Ja? 1137 01:04:00,890 --> 01:04:04,839 >> Publiek: Dus het is een soort van als een als dan anders? 1138 01:04:04,839 --> 01:04:07,130 DAN Armendáriz: Het is een soort van als een als dan anders, ja, 1139 01:04:07,130 --> 01:04:14,200 behalve dat deze URL wordt vervolgens gedefinieerd voor alle onder deze. 1140 01:04:14,200 --> 01:04:20,420 Als het passeert deze bewaker, dan is het daadwerkelijk gevuld met data 1141 01:04:20,420 --> 01:04:29,500 en geschikt voor gebruik in de overblijvende broncode in uw functie. 1142 01:04:29,500 --> 01:04:33,790 Dus ik vermoed dat je gaat beginnen om deze bewaker te zien ook. 1143 01:04:33,790 --> 01:04:36,670 En wees zuinig op. 1144 01:04:36,670 --> 01:04:46,270 >> Dus gewoon kijken naar een paar andere dingen, dit recht hier is wat, 1145 01:04:46,270 --> 01:04:53,377 denk je, maar op basis van wat we hadden het over vroeger? 1146 01:04:53,377 --> 01:04:56,650 >> PUBLIEK: Denk dat het zal draaien in de lijst? 1147 01:04:56,650 --> 01:04:59,100 >> DAN Armendáriz: Dus dat is dichtbij. 1148 01:04:59,100 --> 01:05:02,360 Dit is een functie die we definiëren. 1149 01:05:02,360 --> 01:05:07,240 En we zijn het invoeren van die functie als argument om deze functie hier. 1150 01:05:07,240 --> 01:05:09,120 >> PUBLIEK: [onverstaanbaar], zo niet nihil. 1151 01:05:09,120 --> 01:05:11,470 Dus het is in de lijst, toch? 1152 01:05:11,470 --> 01:05:15,450 >> DAN Armendáriz: Als de fout is niet nul, zodat is-- dus ik moet scrollen. 1153 01:05:15,450 --> 01:05:18,060 Nou, laten we eens kijken, ik kan niet echt Blader naar rechts hier. 1154 01:05:18,060 --> 01:05:23,161 fout is een argument dat wordt doorgegeven aan deze anonieme functie. 1155 01:05:23,161 --> 01:05:24,410 Dit is een anonieme functie. 1156 01:05:24,410 --> 01:05:25,480 Het heeft geen naam. 1157 01:05:25,480 --> 01:05:29,850 Maar we accepteren deze drie argumenten, gegevens, reactie, en opstaan. 1158 01:05:29,850 --> 01:05:33,590 En het gaat leegte terug te keren, zodat het is niet van plan om iets terug te keren. 1159 01:05:33,590 --> 01:05:37,910 En dit is de inhoud van die functie. 1160 01:05:37,910 --> 01:05:41,961 En dan hebben we toegang binnen dat kan aan elk van deze argumenten. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Dus het is een wervelwind tour van de taal. 1163 01:05:48,679 --> 01:05:50,470 Maar ik hoop dat met deze, hopelijk als u 1164 01:05:50,470 --> 01:05:54,490 een kijkje bij enkele van de tutorials specifiek voor iOS ontwikkeling met Swift, 1165 01:05:54,490 --> 01:05:57,481 vooral als je naar Apple's developer web page-- 1166 01:05:57,481 --> 01:05:59,980 ze hebben een veel echt goede tutorials om mee te beginnen. 1167 01:05:59,980 --> 01:06:05,010 Maar hopelijk net dit uur praten over de syntax zichzelf gegeven heeft 1168 01:06:05,010 --> 01:06:08,760 je genoeg aan de slag met dat. 1169 01:06:08,760 --> 01:06:12,950 >> Wij zullen alle van deze bron te posten code op het seminar website 1170 01:06:12,950 --> 01:06:17,800 zo snel mogelijk, en ook de slides dus je hebt een referentie voor al die. 1171 01:06:17,800 --> 01:06:20,530 Maar veel succes met uw projecten. 1172 01:06:20,530 --> 01:06:23,640 En dank u allen hartelijk voor uw komst. 1173 01:06:23,640 --> 01:06:26,990 >> [APPLAUS] 1174 01:06:26,990 --> 01:06:28,026