1 00:00:00,000 --> 00:00:11,270 2 00:00:11,270 --> 00:00:14,340 >> DANIEL Armendáriz: Hej alla, Välkommen till iOS applikationsutveckling 3 00:00:14,340 --> 00:00:15,020 med snabba. 4 00:00:15,020 --> 00:00:15,870 Jag är Dan Armendariz. 5 00:00:15,870 --> 00:00:18,920 Jag är precepter av dator vetenskapen här på skolan 6 00:00:18,920 --> 00:00:21,200 för ingenjörsvetenskap och yrkeshögskola. 7 00:00:21,200 --> 00:00:24,310 Och snabba är faktiskt snäll av ett riktigt snyggt språk. 8 00:00:24,310 --> 00:00:27,190 Och jag har några planer för idag. 9 00:00:27,190 --> 00:00:31,430 Så under nästa timme eller så ska vi att titta på iOS applikationsutveckling själv 10 00:00:31,430 --> 00:00:36,640 använder Xcode och faktiskt skapa något mycket grundläggande, mycket enkla tillämpningar. 11 00:00:36,640 --> 00:00:40,070 Och titta på det sätt som du faktiskt ta dessa program, 12 00:00:40,070 --> 00:00:42,887 och bygga dem, och faktiskt sätta dem på en iOS-enhet. 13 00:00:42,887 --> 00:00:44,970 Några av de saker som Vi kommer inte att titta på 14 00:00:44,970 --> 00:00:47,540 kommer att innehålla saker som faktiskt ta en ansökan 15 00:00:47,540 --> 00:00:48,940 och sätta den på App Store. 16 00:00:48,940 --> 00:00:52,930 Det finns en hel del tutorials på nätet som hjälper dig med denna aspekt av det. 17 00:00:52,930 --> 00:00:56,230 Men också eftersom som del av CS50 får du 18 00:00:56,230 --> 00:00:59,780 att ansluta sig till Apples utveckling laget, CS50 App utvecklingsteam. 19 00:00:59,780 --> 00:01:02,790 Om du inte har gjort det ännu, och du är affiliate CS50, 20 00:01:02,790 --> 00:01:04,810 Jag rekommenderar att du göra det eftersom det 21 00:01:04,810 --> 00:01:08,820 är hur du kan skapa Vissa program i Xcode, 22 00:01:08,820 --> 00:01:11,890 bygga dem, och faktiskt sätta dem på några av dina iOS-enheter 23 00:01:11,890 --> 00:01:14,087 Om du faktiskt har en fysisk iOS-enhet. 24 00:01:14,087 --> 00:01:16,670 Om du inte har ett fysiskt iOS enhet som är mer än bra. 25 00:01:16,670 --> 00:01:19,810 Du kan faktiskt utvecklas för iOS. 26 00:01:19,810 --> 00:01:22,390 Och Xcode har en simulator som låter dig 27 00:01:22,390 --> 00:01:26,570 att se din ansökan åtgärd på din dator. 28 00:01:26,570 --> 00:01:30,440 Men det slags är en snygg sak att faktiskt spela och interagera 29 00:01:30,440 --> 00:01:34,235 med din ansökan på en faktisk enhet. 30 00:01:34,235 --> 00:01:37,360 Så det finns ett par krav faktiskt göra allt detta utveckling. 31 00:01:37,360 --> 00:01:39,151 En av dem är att du måste ha en Mac. 32 00:01:39,151 --> 00:01:44,770 Det måste vara igång 10.9.4 eller senare För att göra utvecklingen med snabba. 33 00:01:44,770 --> 00:01:47,770 >> Du kan använda en tidigare version för att utveckla 34 00:01:47,770 --> 00:01:50,810 med mål C för iOS och Mac. 35 00:01:50,810 --> 00:01:53,990 Men jag rekommenderar, och en hel del av exempel som vi ska se i dag, 36 00:01:53,990 --> 00:01:55,700 använda 10,10 Yosemite. 37 00:01:55,700 --> 00:02:00,910 Så om du ännu inte har uppgraderat, det är en bra ursäkt för att göra det. 38 00:02:00,910 --> 00:02:05,480 Nu Xcode 6.1 är den senaste versionen av den integrerade utvecklingsmiljö 39 00:02:05,480 --> 00:02:08,979 att Apple ger gratis att du kan ladda ner från App Store. 40 00:02:08,979 --> 00:02:11,220 Och jag rekommenderar att du också köra den senaste versionen. 41 00:02:11,220 --> 00:02:14,700 >> Om du råkar köra en tidigare versionen, Xcode 5 och under bara 42 00:02:14,700 --> 00:02:16,741 helt enkelt inte stöder snabba helst. 43 00:02:16,741 --> 00:02:19,490 Och betaversioner av sex, vilket släpptes under sommaren, 44 00:02:19,490 --> 00:02:21,770 gör stödja snabb, men det finns varit ett enormt antal 45 00:02:21,770 --> 00:02:25,220 av förändringar i språket, tillräckligt så att den kod som du är 46 00:02:25,220 --> 00:02:28,320 kommer att titta på och att du kanske hitta på internet 47 00:02:28,320 --> 00:02:33,294 kommer faktiskt inte kompilera ordentligt i dessa tidigare versioner av Xcode. 48 00:02:33,294 --> 00:02:35,460 Så återigen, om du gör ännu inte ha en utvecklarkonto, 49 00:02:35,460 --> 00:02:38,560 Jag rekommenderar att du går till developer.apple.com. 50 00:02:38,560 --> 00:02:42,240 Anmäl dig, skapa ett utvecklarkonto, och gå med i CS50 appen utvecklingsteam. 51 00:02:42,240 --> 00:02:45,530 Det kommer att ge dig en möjlighet att sammanställa dina program 52 00:02:45,530 --> 00:02:47,840 och lägg dem på enheten. 53 00:02:47,840 --> 00:02:49,222 OK, så låt oss komma igång. 54 00:02:49,222 --> 00:02:50,930 Det allra första vi ska göra är 55 00:02:50,930 --> 00:02:55,140 att faktiskt skapa en mycket enkla projekt i Xcode 56 00:02:55,140 --> 00:02:59,530 som gör att du kan göra en ansökan. 57 00:02:59,530 --> 00:03:03,170 >> Så om du ännu inte har Xcode öppen, gå vidare och öppna den 58 00:03:03,170 --> 00:03:04,270 och skapa ett nytt projekt. 59 00:03:04,270 --> 00:03:06,570 En särskild stänkskärm öppnas och ger dig 60 00:03:06,570 --> 00:03:08,800 några alternativ om vad det är som du vill göra. 61 00:03:08,800 --> 00:03:12,170 Bara säga att du vill skapa ett nytt projekt, en ny ansökan. 62 00:03:12,170 --> 00:03:15,650 Detta fönster visas, förutsatt att du använder Xcode 6.1. 63 00:03:15,650 --> 00:03:17,650 Just nu, och för det varaktighet detta seminarium, 64 00:03:17,650 --> 00:03:19,990 vi kommer att använda Enkelvy applikationer, precis 65 00:03:19,990 --> 00:03:22,590 slags ursprunglig ansökan att få dina fötter är våta. 66 00:03:22,590 --> 00:03:25,200 Och du kan filial ut på egen hand därifrån. 67 00:03:25,200 --> 00:03:27,660 >> Klicka på Nästa på denna punkt. 68 00:03:27,660 --> 00:03:30,796 Nu här finns det ett par saker att du kanske vill komma in. 69 00:03:30,796 --> 00:03:32,670 Produktnamnet är namn på ditt projekt. 70 00:03:32,670 --> 00:03:34,859 I det här fallet, jag är bara kommer att kalla det Seminar1 71 00:03:34,859 --> 00:03:36,150 eftersom det är vårt första exempel. 72 00:03:36,150 --> 00:03:38,290 Organisation namn, i detta fall är bara mitt namn. 73 00:03:38,290 --> 00:03:41,760 Du kan givetvis ändra det till ditt eget namn, eller att CS50. 74 00:03:41,760 --> 00:03:46,160 Organisation identifierare, om du råkar ha en hemsida bara ta 75 00:03:46,160 --> 00:03:49,940 domännamnet i omvänt, com.yourname. 76 00:03:49,940 --> 00:03:54,200 och sedan namnet på produkten bör visas automatiskt 77 00:03:54,200 --> 00:03:55,820 efter det som bunten identifierare. 78 00:03:55,820 --> 00:03:59,200 >> Uppenbar det språk som vi är kommer att använda för idag är snabb. 79 00:03:59,200 --> 00:04:02,590 Du kan givetvis använda Objective C för det, men i dag kommer att vara snabb. 80 00:04:02,590 --> 00:04:04,920 Och vi kommer nu att säga universella enheter, så 81 00:04:04,920 --> 00:04:06,900 att det fungerar på både iPad och iPhone. 82 00:04:06,900 --> 00:04:10,040 Och vi kommer att lämna kärn uppgifter okontrollerade att hålla 83 00:04:10,040 --> 00:04:12,830 projektet relativt enkelt för tillfället. 84 00:04:12,830 --> 00:04:14,430 Så låt oss gå vidare och klicka på Nästa. 85 00:04:14,430 --> 00:04:16,471 Och det kommer att fråga mig där jag vill spara det. 86 00:04:16,471 --> 00:04:19,250 Jag ska bara spara den på mitt skrivbord nu. 87 00:04:19,250 --> 00:04:22,267 >> Okej, det är så nu vad som kommer hända när du faktiskt öppna Xcode. 88 00:04:22,267 --> 00:04:24,100 Och märker att allra första du ser 89 00:04:24,100 --> 00:04:28,770 är denna utropstecken som säger nej tecknandet identitet hittas. 90 00:04:28,770 --> 00:04:31,520 Jag gjorde avsikt här på min dator och jag är 91 00:04:31,520 --> 00:04:34,220 hoppas att jag kommer att kunna faktiskt fixa det, 92 00:04:34,220 --> 00:04:37,860 eftersom jag vill att du ska se hur detta kommer faktiskt arbetar på din egen maskin. 93 00:04:37,860 --> 00:04:40,400 >> Gå vidare och klicka fix fråga. 94 00:04:40,400 --> 00:04:45,400 Det kommer att fråga dig om du har en befintligt äpple utvecklarkonto. 95 00:04:45,400 --> 00:04:48,330 Det är där att gå med i CS50 app utvecklingsteam 96 00:04:48,330 --> 00:04:51,240 är viktigt så att du inte bara har en app-konto, 97 00:04:51,240 --> 00:04:53,690 men du har också förmåga att skriva apps 98 00:04:53,690 --> 00:04:56,420 och sätta dem på din iOS-enhet. 99 00:04:56,420 --> 00:04:58,957 Detta är inte-- klick fix frågan är inte nödvändigt 100 00:04:58,957 --> 00:05:01,040 om du bara kommer att bygga och utveckla lokalt, 101 00:05:01,040 --> 00:05:03,520 helt inom iOS simulatorn. 102 00:05:03,520 --> 00:05:05,820 >> Men nu ska jag att utveckla och sätta dem 103 00:05:05,820 --> 00:05:08,160 på min iPad, som kommer att vara kunna sända också. 104 00:05:08,160 --> 00:05:10,770 Så jag vill verkligen lägga detta. 105 00:05:10,770 --> 00:05:13,670 Och det kommer att fråga mig för min Apple-ID. 106 00:05:13,670 --> 00:05:15,700 Så det kommer att vara så här. 107 00:05:15,700 --> 00:05:18,940 Och jag måste hämta min lösenord, som är här borta. 108 00:05:18,940 --> 00:05:27,760 Så ge mig bara en sekund för att finna att, och kopiera det, och klistra in den här. 109 00:05:27,760 --> 00:05:28,580 >> Klicka på Lägg till. 110 00:05:28,580 --> 00:05:31,095 Det kommer att fråga mig vilket lag jag vill gå. 111 00:05:31,095 --> 00:05:33,240 Jag kommer att göra Högskolan. 112 00:05:33,240 --> 00:05:35,680 Klicka på Delta. 113 00:05:35,680 --> 00:05:37,780 Hoppsan, det är fel. 114 00:05:37,780 --> 00:05:40,730 Låt oss göra det här. 115 00:05:40,730 --> 00:05:42,060 Förhoppningsvis att man kommer att fungera. 116 00:05:42,060 --> 00:05:44,220 Att man fortfarande inte fungerar. 117 00:05:44,220 --> 00:05:46,610 Vi kör ut ur goda här. 118 00:05:46,610 --> 00:05:48,260 OK, bör detta fungera. 119 00:05:48,260 --> 00:05:50,816 Nu stänger den. 120 00:05:50,816 --> 00:05:54,450 Nu gör skola engineering, klicka väljer. 121 00:05:54,450 --> 00:06:00,190 >> Och nu förhoppningsvis efter en några sekunder du can-- OK, 122 00:06:00,190 --> 00:06:02,550 Jag ska återkalla och förfrågan. 123 00:06:02,550 --> 00:06:05,410 Oh man, det här kommer att inte fungerar. 124 00:06:05,410 --> 00:06:08,890 OK, jag ska prova en annan. 125 00:06:08,890 --> 00:06:11,167 Låt oss göra detta här. 126 00:06:11,167 --> 00:06:17,020 127 00:06:17,020 --> 00:06:19,310 Live demos misslyckas mig. 128 00:06:19,310 --> 00:06:22,540 Vi kanske måste återgå till just bygga helt lokalt, 129 00:06:22,540 --> 00:06:25,050 men det skulle vara OK i det här fallet. 130 00:06:25,050 --> 00:06:28,560 >> Så här, medan detta är faktiskt arbetsmiljö, vad vi ska göra är bara 131 00:06:28,560 --> 00:06:31,190 skapa en mycket enkel Hello World-program. 132 00:06:31,190 --> 00:06:32,340 Så det här är Xcode. 133 00:06:32,340 --> 00:06:37,300 Och om du inte har sett det ännu, det kan vara lite skrämmande i början. 134 00:06:37,300 --> 00:06:41,430 Det finns en hel del rutor, det finns en massa doodads inom olika områden. 135 00:06:41,430 --> 00:06:44,300 Men bara att inse att det finns verkligen flera huvudkomponenter 136 00:06:44,300 --> 00:06:46,580 till denna utvecklingsmiljö. 137 00:06:46,580 --> 00:06:51,090 Längst till vänster är alla filer som är tillämpliga på ditt program 138 00:06:51,090 --> 00:06:52,997 eller till just ditt projekt. 139 00:06:52,997 --> 00:06:55,080 Vi kommer att klicka runt på några av dem och vi kommer 140 00:06:55,080 --> 00:06:57,660 påpeka det mest viktiga sådana över tiden. 141 00:06:57,660 --> 00:06:59,650 Längst till höger, vi har en uppsättning attribut. 142 00:06:59,650 --> 00:07:02,920 Och alla dessa attribut, det finns olika rutor för attributen. 143 00:07:02,920 --> 00:07:06,770 Rutorna kommer att ändras beroende på ramen för det huvudsakliga innehållet, vilket 144 00:07:06,770 --> 00:07:08,290 råkar vara i mitten. 145 00:07:08,290 --> 00:07:11,740 Nu i mitten kan faktiskt visa du en mängd olika saker, till exempel 146 00:07:11,740 --> 00:07:13,290 din kod själv. 147 00:07:13,290 --> 00:07:17,070 Eller du kanske faktiskt have-- när du klickar på storyboard som 148 00:07:17,070 --> 00:07:21,270 är, förresten, bara en grafisk representation av ditt användarnamn 149 00:07:21,270 --> 00:07:25,350 gränssnitt för din application-- sedan panelen attributen 150 00:07:25,350 --> 00:07:27,334 på mycket långt till höger faktiskt kommer att förändras. 151 00:07:27,334 --> 00:07:29,750 Nu finns det ett par andra saker som jag vill peka. 152 00:07:29,750 --> 00:07:33,360 Du kan sorts utforska runt i miljön på egen hand. 153 00:07:33,360 --> 00:07:35,730 Men en av de saker som har varit till stor nytta 154 00:07:35,730 --> 00:07:38,470 är den här knappen här, upp till höger i fönstret. 155 00:07:38,470 --> 00:07:41,230 Det finns den här knappen som ser ut på den bortre 156 00:07:41,230 --> 00:07:46,090 lämnat den har en punkt följt av två cirklar och sortera 157 00:07:46,090 --> 00:07:49,540 av två pilar som pekar bort från varandra. 158 00:07:49,540 --> 00:07:52,640 Om du växlar mellan standard editor, vilket 159 00:07:52,640 --> 00:07:55,560 är längst till vänster en, den som som är valt som standard, 160 00:07:55,560 --> 00:08:01,040 och de två cirklarna överlappar varandra, vad du faktiskt får 161 00:08:01,040 --> 00:08:02,210 är en dubbel fönsterruta vy. 162 00:08:02,210 --> 00:08:04,240 >> Och detta är faktiskt kommer att vara användbart för oss 163 00:08:04,240 --> 00:08:07,330 när vi behöver länka objekt i användargränssnittet till koden. 164 00:08:07,330 --> 00:08:09,330 Och vi ska prata mer om att på bara ett ögonblick. 165 00:08:09,330 --> 00:08:12,050 Men inser att om du får ännu fler rutor som denna, 166 00:08:12,050 --> 00:08:15,830 du kan förenkla din syn bara lite genom att klicka tillbaka 167 00:08:15,830 --> 00:08:20,680 på din enda editor. 168 00:08:20,680 --> 00:08:21,580 Så långt så bra. 169 00:08:21,580 --> 00:08:24,560 Så i princip har vi koden på vänster, attribut till höger, 170 00:08:24,560 --> 00:08:28,260 och vad det är vi jobbar om här i själva centrum. 171 00:08:28,260 --> 00:08:30,390 >> Så här har jag klickat på huvudstoryboard. 172 00:08:30,390 --> 00:08:33,350 Och storyboard, igen, är ett sätt i Xcode 173 00:08:33,350 --> 00:08:38,110 att du faktiskt kan skapa ditt användarnamn gränssnitt med bara dra och släppa 174 00:08:38,110 --> 00:08:39,130 tekniker. 175 00:08:39,130 --> 00:08:41,190 Och så för vår mycket första ansökan här 176 00:08:41,190 --> 00:08:42,720 är precis vad vi ska göra. 177 00:08:42,720 --> 00:08:45,950 Vi kommer att gå ner till mycket långt nedre högra delen 178 00:08:45,950 --> 00:08:49,900 av skärmen, som innehåller en mängd användarelement 179 00:08:49,900 --> 00:08:53,270 som du sedan kan klicka och dra att skapa ditt användargränssnitt. 180 00:08:53,270 --> 00:08:55,550 >> Nu alla dessa element kallas vyer 181 00:08:55,550 --> 00:08:57,370 eftersom de levererar någon form av uppfattning. 182 00:08:57,370 --> 00:09:00,190 Det finns en bild view, för exempel att faktiskt visa 183 00:09:00,190 --> 00:09:01,740 en bild på användargränssnittet. 184 00:09:01,740 --> 00:09:04,310 Det finns en tabell för att faktiskt visar en tabell. 185 00:09:04,310 --> 00:09:05,190 Så vidare och så vidare. 186 00:09:05,190 --> 00:09:08,250 Det finns en mängd olika vyer som du kan välja här. 187 00:09:08,250 --> 00:09:11,100 Så bara för att nu ska vi för att söka efter en etikett. 188 00:09:11,100 --> 00:09:13,550 Du kan bara bläddra igenom alla de listor som finns där. 189 00:09:13,550 --> 00:09:15,460 Men det finns sökningen bar längst ner 190 00:09:15,460 --> 00:09:19,460 som gör det lättare att identifiera specifika vyer som du faktiskt 191 00:09:19,460 --> 00:09:22,020 vill dra in i din användargränssnitt. 192 00:09:22,020 --> 00:09:23,560 >> Hittade mitt skivbolag. 193 00:09:23,560 --> 00:09:28,430 Jag kommer att dra det här, direkt på min exempelprogrammet. 194 00:09:28,430 --> 00:09:30,130 Just där i mitten ser bra ut. 195 00:09:30,130 --> 00:09:33,180 Och jag ska skriva "Hello World!" 196 00:09:33,180 --> 00:09:33,810 Hit Enter. 197 00:09:33,810 --> 00:09:34,877 Nu har jag en etikett. 198 00:09:34,877 --> 00:09:36,960 Det ser inte ut som det är centrerad ganska ordentligt. 199 00:09:36,960 --> 00:09:38,500 Så jag kan försöka åter centrera den. 200 00:09:38,500 --> 00:09:42,100 Lyckligtvis erbjuder dessa guider för att göra saker och ting mycket lättare. 201 00:09:42,100 --> 00:09:44,130 Jag ska försöka att kompilera det. 202 00:09:44,130 --> 00:09:46,570 Förhoppningsvis det faktiskt kommer att arbeta här. 203 00:09:46,570 --> 00:09:52,870 Och om det inte gör det på bara ett ögonblick Det kommer faktiskt att visas på min iPad. 204 00:09:52,870 --> 00:09:54,360 Det är just här. 205 00:09:54,360 --> 00:09:55,060 Där är det. 206 00:09:55,060 --> 00:09:56,590 >> OK, så det är det. 207 00:09:56,590 --> 00:09:57,160 Vi är klar. 208 00:09:57,160 --> 00:09:58,868 Vi har skapat vår mycket första ansökan. 209 00:09:58,868 --> 00:10:01,330 Nu naturligtvis detta inte göra någonting. 210 00:10:01,330 --> 00:10:02,280 Det är bara en etikett. 211 00:10:02,280 --> 00:10:07,350 Det finns inget samband mellan användargränssnittet koden. 212 00:10:07,350 --> 00:10:10,130 Så om vi verkligen ville ha att skapa denna förbindelse, 213 00:10:10,130 --> 00:10:14,790 om vi ville verkligen ha någon form av kommunikation mellan elementen 214 00:10:14,790 --> 00:10:17,540 som finns på skärm och den kod som 215 00:10:17,540 --> 00:10:19,810 tillåter oss att kontrollera dessa delar, sedan 216 00:10:19,810 --> 00:10:23,570 vi faktiskt behöver titta på själva koden. 217 00:10:23,570 --> 00:10:27,000 >> Så detta är vad som kallas ViewController.swift. 218 00:10:27,000 --> 00:10:30,080 Och för, särskilt för dina första program, 219 00:10:30,080 --> 00:10:33,120 detta kommer att vara typ av Huvuddelen av den kod som du enter-- 220 00:10:33,120 --> 00:10:35,980 kommer att vara i det här dokumentet här. 221 00:10:35,980 --> 00:10:38,390 Det finns en massa saker det är här inne så länge, eller hur? 222 00:10:38,390 --> 00:10:42,660 Det finns import UI sats klass, åsidosätta, [? funk,?] alla dessa olika saker. 223 00:10:42,660 --> 00:10:45,820 Och det är inte helt klart vad det är att allt detta innebär. 224 00:10:45,820 --> 00:10:48,570 Så låt oss ta ett steg tillbaka bort från Xcode för lite 225 00:10:48,570 --> 00:10:52,420 och titta på själva språket, snabbt. 226 00:10:52,420 --> 00:10:56,370 >> Så med snabba, det var i design och utveckling 227 00:10:56,370 --> 00:10:58,645 på Apple för ungefär fyra år till min förståelse. 228 00:10:58,645 --> 00:11:01,270 Och det finns ett par funktioner om det som är riktigt snyggt. 229 00:11:01,270 --> 00:11:03,910 Först av allt, det samman språk, precis som C. 230 00:11:03,910 --> 00:11:06,120 Så måste du först kompilera den och sedan köra den 231 00:11:06,120 --> 00:11:09,580 innan du kan faktiskt köra koden som resulterar. 232 00:11:09,580 --> 00:11:14,250 Men det finns, i motsats till C, ett interaktivt uppmanas att du faktiskt kan köra 233 00:11:14,250 --> 00:11:16,680 och skriv godtyckliga kommandon till. 234 00:11:16,680 --> 00:11:20,280 Och så mycket som en JavaScript-konsol, som ni kanske känner till nu, 235 00:11:20,280 --> 00:11:24,506 det faktiskt kommer att utvärdera de kommandon och ge dig utgången. 236 00:11:24,506 --> 00:11:26,380 Och de har även tagit att till nästa nivå 237 00:11:26,380 --> 00:11:29,100 och de har skapat något kallade lekplatser i Xcode 238 00:11:29,100 --> 00:11:31,720 som gör att du kan arbetar visuellt med kod. 239 00:11:31,720 --> 00:11:34,910 Och vi kommer faktiskt se några exempel av att på bara en liten bit. 240 00:11:34,910 --> 00:11:41,680 Den är baserad på C. C ligger bakom det, eftersom alla kompilatorer 241 00:11:41,680 --> 00:11:46,820 skapa kod ur C och skapa objektkoden från den. 242 00:11:46,820 --> 00:11:49,240 Men det verkligen aktier relativt lite syntax. 243 00:11:49,240 --> 00:11:50,721 Det kommer att se ganska annorlunda. 244 00:11:50,721 --> 00:11:51,970 Det kommer att finnas vissa likheter. 245 00:11:51,970 --> 00:11:54,140 Men det kommer att bli en hel del skillnader 246 00:11:54,140 --> 00:11:57,200 jämfört med, säg, JavaScript eller PHP. 247 00:11:57,200 --> 00:11:59,070 Och vi kommer att peka dessa i ett ögonblick. 248 00:11:59,070 --> 00:12:01,420 >> Nu en av de största sakerna om snabba som är trevligt 249 00:12:01,420 --> 00:12:05,650 är att, särskilt jämfört till C, det tänkt att vara säker. 250 00:12:05,650 --> 00:12:08,100 Allt i det är tänkt att vara mycket starkt skrivit i. 251 00:12:08,100 --> 00:12:10,780 I själva verket är det nästan irriterande i början, när du först 252 00:12:10,780 --> 00:12:15,610 börja arbeta med snabba, hur mycket det upprätt typer allt. 253 00:12:15,610 --> 00:12:17,860 Allt som är en sträng måste förbli en sträng. 254 00:12:17,860 --> 00:12:22,100 Det är väldigt svårt att sortera i omvänd det eller tvinga in den i någon annan form. 255 00:12:22,100 --> 00:12:23,800 >> Och återigen visar vi exempel på detta. 256 00:12:23,800 --> 00:12:26,830 Men i slutändan inser att Detta är tänkt att skydda dig, 257 00:12:26,830 --> 00:12:32,010 och genom dig jag menar din kod, från kraschar på något hemskt sätt när 258 00:12:32,010 --> 00:12:34,330 du har någon form av inkompatibla typ. 259 00:12:34,330 --> 00:12:36,040 Och återigen, arbeta med det. 260 00:12:36,040 --> 00:12:40,210 Eftersom det kommer att bli frustrerande i början som du försöker lista ut varför just 261 00:12:40,210 --> 00:12:43,070 du får denna ovanliga fel att göra med olika typer. 262 00:12:43,070 --> 00:12:45,350 Men det kommer att vara värt det i slutändan. 263 00:12:45,350 --> 00:12:47,267 >> Det tar upp automatiskt minneshantering, 264 00:12:47,267 --> 00:12:49,100 så inte längre göra dig måste ta itu med saker och ting 265 00:12:49,100 --> 00:12:51,400 som malloc och gratis och alla av dessa möjliga saker. 266 00:12:51,400 --> 00:12:53,066 Och det är också utformat för generaliseringar. 267 00:12:53,066 --> 00:12:58,360 Så medan vi kan använda en Xcode till skapa iOS appar och Mac-program, 268 00:12:58,360 --> 00:13:00,380 Vi kan också använda den som ett skriptspråk. 269 00:13:00,380 --> 00:13:03,660 Och så att vi kan använda den sorts av istället för PHP eller istället 270 00:13:03,660 --> 00:13:07,800 Python faktiskt snabbt analysera och bearbeta 271 00:13:07,800 --> 00:13:09,800 vissa uppgifter som vi har på vår dator. 272 00:13:09,800 --> 00:13:13,290 >> Den har ett brett utbud av moderna funktioner, optionals, föränderlighet, 273 00:13:13,290 --> 00:13:17,900 generika, nedläggningar och en hel del av detta saker du kan eller inte kan känna igen. 274 00:13:17,900 --> 00:13:22,810 Och det är bara typ av en olycklig del av språket som en del av dessa 275 00:13:22,810 --> 00:13:26,700 slags futuristiska, moderna element som är inneslutna elementen är 276 00:13:26,700 --> 00:13:34,520 så djupt inrotat att jag faktiskt kommer att måste lära dig CS50.5 lite. 277 00:13:34,520 --> 00:13:37,305 >> Vi måste lära lite mer om några av funktionerna för 278 00:13:37,305 --> 00:13:40,180 att verkligen förstå vad som händer vidare och så att du kan titta på koden 279 00:13:40,180 --> 00:13:42,450 och inte känna sig helt förlorad. 280 00:13:42,450 --> 00:13:44,820 Och ser du vad jag menar genom att på bara en minut. 281 00:13:44,820 --> 00:13:47,830 OK, så let's-- nog av detta sorts teoretisk grejer. 282 00:13:47,830 --> 00:13:52,450 Låt oss faktiskt titta på vår mycket första snabb programmet. 283 00:13:52,450 --> 00:13:53,590 Det är en rad kod. 284 00:13:53,590 --> 00:13:57,690 Linje 14 här, det säger utskrifts l n hello CS50. 285 00:13:57,690 --> 00:14:01,160 >> Så det finns ett par saker som är mycket annorlunda om detta förhållande 286 00:14:01,160 --> 00:14:04,140 till saker som du kan vara van vid från C, till exempel. 287 00:14:04,140 --> 00:14:08,390 En av dem är att det finns ingen intmain, det finns ingen inkluderar avsnitt, 288 00:14:08,390 --> 00:14:10,790 det finns inget av detta extra grejer. 289 00:14:10,790 --> 00:14:13,790 Den omfattar, liksom standard I / O, som biblioteken 290 00:14:13,790 --> 00:14:16,580 som faktiskt ger den standardfunktioner i språket, 291 00:14:16,580 --> 00:14:19,180 automatiskt ingår som del av SWIFT: s standardbibliotek 292 00:14:19,180 --> 00:14:20,680 och som importeras automatiskt. 293 00:14:20,680 --> 00:14:23,740 Du behöver inte göra att importera manuellt. 294 00:14:23,740 --> 00:14:27,360 >> Intmain existerar inte eftersom den viktigaste inkörsporten för koden 295 00:14:27,360 --> 00:14:29,470 är faktiskt på början av koden. 296 00:14:29,470 --> 00:14:32,000 Så någon kod som du har med start från början 297 00:14:32,000 --> 00:14:34,940 faktiskt kommer att utföras vid starten. 298 00:14:34,940 --> 00:14:36,520 Så detta förenklar verkligen kraftigt. 299 00:14:36,520 --> 00:14:38,470 Lägg märke till också, att det finns ingen semikolon. 300 00:14:38,470 --> 00:14:41,040 Det finns inga semikolon i detta språk. 301 00:14:41,040 --> 00:14:43,261 Du sätter ett uttalande på individuell linje 302 00:14:43,261 --> 00:14:45,510 och sedan nästa rad representerar den andra uttalandet. 303 00:14:45,510 --> 00:14:47,420 Om du vill sätta mulitiple uttalanden på nätet, 304 00:14:47,420 --> 00:14:49,086 så har du separera det med semikolon. 305 00:14:49,086 --> 00:14:50,940 Men för det mesta, för god stil, är vi 306 00:14:50,940 --> 00:14:56,530 aldrig att se semikolon för Vid tillämpning av separerande uttalanden 307 00:14:56,530 --> 00:14:58,420 i snabb. 308 00:14:58,420 --> 00:14:59,820 Så hur går detta egentligen? 309 00:14:59,820 --> 00:15:04,080 Väl mycket likt C vi faktiskt måste sammanställa denna. 310 00:15:04,080 --> 00:15:10,640 Och så att vi kan göra det genom att använda snabb c och därefter 1.swift. 311 00:15:10,640 --> 00:15:13,850 Och sedan efter ett par minuter kommer detta att sammanställa 312 00:15:13,850 --> 00:15:16,340 och då kan jag köra punkt ett. 313 00:15:16,340 --> 00:15:19,691 Och än det kommer bara säga "Hej CS50." 314 00:15:19,691 --> 00:15:20,690 Awesome, så det går vi. 315 00:15:20,690 --> 00:15:22,273 Det är vår första Hello World. 316 00:15:22,273 --> 00:15:24,790 Låt oss gå vidare till nummer två. 317 00:15:24,790 --> 00:15:30,450 >> Nu i this-- detta har förändrats något, eftersom medan normalt du 318 00:15:30,450 --> 00:15:34,720 do-- faktiskt alltid har du att sammanställa en snabb program innan du 319 00:15:34,720 --> 00:15:37,180 faktiskt köra det-- en av de stora dragen 320 00:15:37,180 --> 00:15:40,230 att jag nämnt innan var att swift kan faktiskt användas i sorterings 321 00:15:40,230 --> 00:15:43,390 av en pseudo-tolkande läge finns är i själva verket som en tolk. 322 00:15:43,390 --> 00:15:46,690 Men vad detta kommer att göra är det är i själva verket en snabb ansökan 323 00:15:46,690 --> 00:15:47,520 att du kan köra. 324 00:15:47,520 --> 00:15:51,050 >> Så till exempel om du bara skriver snabbt här, vad kommer att hända 325 00:15:51,050 --> 00:15:52,330 är att du kommer att få en snabb. 326 00:15:52,330 --> 00:15:59,040 Och du kan skriva ditt snabba kod, skriva ut hej, och kör det. 327 00:15:59,040 --> 00:16:01,867 Och det kommer faktiskt print-- väl, gjorde det inte ut i det här fallet 328 00:16:01,867 --> 00:16:04,450 eftersom det skrivs till centrerad ut, som inte syns här. 329 00:16:04,450 --> 00:16:06,660 Men det är faktiskt kan fungera. 330 00:16:06,660 --> 00:16:09,580 Och så i detta fall, jag är bara kommer att använda detta som ett manus. 331 00:16:09,580 --> 00:16:11,259 Och jag kan faktiskt köra denna kod där. 332 00:16:11,259 --> 00:16:13,800 Så det sätt som jag faktiskt kör det kommer att vara något annorlunda, 333 00:16:13,800 --> 00:16:15,710 men du ser att på bara ett ögonblick. 334 00:16:15,710 --> 00:16:18,890 Nu, i detta fall vad vi ska göra är att först definiera en variabel. 335 00:16:18,890 --> 00:16:22,160 Så detta är hur vi definierar en variabel i snabb, 336 00:16:22,160 --> 00:16:25,900 är använder vi låt nyckelordet, följt med namnet på variabeln, 337 00:16:25,900 --> 00:16:29,280 och sedan ger vi några initiering uppgifter valfritt. 338 00:16:29,280 --> 00:16:34,660 Så här fallet vi definierar en konstant som heter namn, 339 00:16:34,660 --> 00:16:37,775 och vi kommer att använda det i utsignalen från vår skrivrad 340 00:16:37,775 --> 00:16:39,590 längst ner, hej namn. 341 00:16:39,590 --> 00:16:43,260 >> Nu märker att istället för att använda% s, Vi kan kapsla in namnet på denna 342 00:16:43,260 --> 00:16:49,960 variabel i / () och kunna concatenate i innehållet i denna 343 00:16:49,960 --> 00:16:51,790 sträng till denna sträng. 344 00:16:51,790 --> 00:16:56,510 Nu skillnad C, är sträng ett faktiska verkliga typ i snabb. 345 00:16:56,510 --> 00:16:59,240 Och så den sitter vid sidan ints och vid sidan 346 00:16:59,240 --> 00:17:02,220 fördubblar mycket lätt och naturligt jämfört 347 00:17:02,220 --> 00:17:05,450 till några av de andra språk som vi har sett. 348 00:17:05,450 --> 00:17:07,980 Så detta skulle faktiskt fungera precis som du förväntar dig. 349 00:17:07,980 --> 00:17:10,540 >> Jag kan köra 2.swift. 350 00:17:10,540 --> 00:17:14,390 Och vi ser att mitt namn är faktiskt skarvas in, "Hej Dan." 351 00:17:14,390 --> 00:17:16,050 OK, awesome. 352 00:17:16,050 --> 00:17:17,485 Går vidare till nummer tre. 353 00:17:17,485 --> 00:17:19,359 Nu var det lite av en vit lögn som jag 354 00:17:19,359 --> 00:17:23,369 sade att det sätt som vi deklarerar variabler var att använda låt nyckelordet. 355 00:17:23,369 --> 00:17:27,640 Så många gånger som du eventuellt kan du göra vill använda låta, eftersom vad det gör 356 00:17:27,640 --> 00:17:29,280 är den definierar en konstant. 357 00:17:29,280 --> 00:17:33,010 Och som berättar snabbt att det kan optimera hastigheten på din ansökan 358 00:17:33,010 --> 00:17:36,230 eftersom den vet att det variabel kommer inte att förändras. 359 00:17:36,230 --> 00:17:38,760 >> Så noggrant utvärdera När du ska använda 360 00:17:38,760 --> 00:17:41,382 en variabel för syfte att ändra det. 361 00:17:41,382 --> 00:17:43,340 Och när du ska skapa en variabel bara 362 00:17:43,340 --> 00:17:47,010 att hålla vissa uppgifter och det är faktiskt inte kommer att förändras. 363 00:17:47,010 --> 00:17:50,150 Så här begreppet oföränderlighet, det faktiskt inte kommer att förändras, 364 00:17:50,150 --> 00:17:53,740 är viktig även som långt ner som definiera variabler. 365 00:17:53,740 --> 00:17:56,870 Så här har vi definierat ett namn, låt namn, och i detta fall 366 00:17:56,870 --> 00:18:02,120 det är en konstant, är det av typen sträng, och är det lika med Dan. 367 00:18:02,120 --> 00:18:05,580 >> Så medan i den tidigare kända versionen, infers-- och genom "det" 368 00:18:05,580 --> 00:18:08,220 Jag menar swift-- swift härleder den typ av data 369 00:18:08,220 --> 00:18:10,850 att vi har ingått variabeln. 370 00:18:10,850 --> 00:18:12,930 I det här fallet kan vi vara explicit. 371 00:18:12,930 --> 00:18:17,590 Så låt sedan namnet på detta variabel är namnet och sedan ett kolon. 372 00:18:17,590 --> 00:18:21,350 Och efter kolon gör vi specificera typen av data. 373 00:18:21,350 --> 00:18:24,694 Så inte längre är det int namn eller string namn eller något liknande. 374 00:18:24,694 --> 00:18:26,860 Men i stället låta etiketten är vi definiera huruvida 375 00:18:26,860 --> 00:18:29,090 det är konstant eller variabel, följt av namnet, 376 00:18:29,090 --> 00:18:31,870 följt av typen valfritt. 377 00:18:31,870 --> 00:18:34,730 >> Så i detta fall vi definierar detta namn är en sträng. 378 00:18:34,730 --> 00:18:35,790 Vi säger är Dan. 379 00:18:35,790 --> 00:18:39,270 Och nu har jag en annan variabel, i detta fall det kallas etikett. 380 00:18:39,270 --> 00:18:42,090 Men märker att det är prefixet med nyckelordet var. 381 00:18:42,090 --> 00:18:44,430 Nyckelordet var medel att denna variabel kan 382 00:18:44,430 --> 00:18:48,720 ändras vid ett senare tillfälle i tid, någonstans i koden 383 00:18:48,720 --> 00:18:52,480 kan vi faktiskt förändra det och det kommer inte att ge oss något särskilt fel. 384 00:18:52,480 --> 00:18:56,760 >> Vi kan göra standard Concatenating Operatören här med plussymbolen 385 00:18:56,760 --> 00:19:00,130 att faktiskt lägga till vår namn in i denna sträng. 386 00:19:00,130 --> 00:19:02,921 Och då kan vi skriva ut som vi såg bara en stund sedan. 387 00:19:02,921 --> 00:19:04,920 Låt oss nu säga att du vill skapa en variabel 388 00:19:04,920 --> 00:19:06,586 men du vill inte initiera det ännu. 389 00:19:06,586 --> 00:19:08,590 Du ännu inte vill sätta några data i den. 390 00:19:08,590 --> 00:19:11,760 Jo du har att berätta swift vad den typ av data 391 00:19:11,760 --> 00:19:16,430 kommer att vara innan du kan faktiskt definiera det ordentligt. 392 00:19:16,430 --> 00:19:20,360 >> Så i det här fallet, när vi har definierat en variabel som heter klass måste vi vara 393 00:19:20,360 --> 00:19:24,450 explicit om dess typ, eftersom det kan inte sluta att bara titta 394 00:19:24,450 --> 00:19:27,300 vid det initierade uppgifter som du lämnar till den. 395 00:19:27,300 --> 00:19:30,050 Det kommer att ge oss ett fel om du bara typ var klass, till exempel, 396 00:19:30,050 --> 00:19:31,830 eftersom den inte har någon typ därför. 397 00:19:31,830 --> 00:19:33,353 Så grad = 100. 398 00:19:33,353 --> 00:19:35,790 Så att 100 är ett heltal, det passar väldigt fint in i det. 399 00:19:35,790 --> 00:19:36,998 Den kommer att fortsätta att fungera. 400 00:19:36,998 --> 00:19:40,350 401 00:19:40,350 --> 00:19:43,022 Vi kan se hur då vi kan sammanfoga detta i. 402 00:19:43,022 --> 00:19:44,730 Nu kanske du frestad, om du faktiskt 403 00:19:44,730 --> 00:19:48,610 ville sammanfoga den klass till en annan textsträng, 404 00:19:48,610 --> 00:19:52,560 in i en annan sträng, att du skulle bara använda samma konkatenering operatör. 405 00:19:52,560 --> 00:19:54,630 Och det normalt skulle vara sant. 406 00:19:54,630 --> 00:20:00,540 Men snabba inte tillåter dig att implicit ändra typ av data. 407 00:20:00,540 --> 00:20:03,440 Så i det här fallet, det här line, 25, kommer att misslyckas 408 00:20:03,440 --> 00:20:06,650 eftersom lönegrad är en heltal och inte en sträng. 409 00:20:06,650 --> 00:20:08,760 Och så finns det en obalans inställd typer. 410 00:20:08,760 --> 00:20:11,780 Så du måste vara explicit när du vill ändra dessa data, 411 00:20:11,780 --> 00:20:14,080 när du vill tvinga detta data till en annan typ 412 00:20:14,080 --> 00:20:17,250 och säger, OK, jag vill ta denna klass, som är ett heltal, 413 00:20:17,250 --> 00:20:19,050 och konvertera det till en sträng. 414 00:20:19,050 --> 00:20:23,970 >> Så jag tar ett kapital s String alla typer, kommer du att märka, aktiveras, 415 00:20:23,970 --> 00:20:26,280 Int, Dubbel, String, så vidare och så vidare. 416 00:20:26,280 --> 00:20:28,930 Alla av dem aktiveras bara för att göra saker och ting lättare. 417 00:20:28,930 --> 00:20:32,240 Och vi ska säga kapitalisera String passera in det betyget. 418 00:20:32,240 --> 00:20:35,020 Och det kommer att skapa en sträng ur denna heltal. 419 00:20:35,020 --> 00:20:37,970 Och då kan vi slå samman två mycket snyggt. 420 00:20:37,970 --> 00:20:40,500 Eventuella frågor om denna grejer hittills? 421 00:20:40,500 --> 00:20:43,770 Okej, låt oss plöja genom till nummer fyra. 422 00:20:43,770 --> 00:20:47,870 >> Nu ska vi prata om några mer avancerade strukturer, som arrayer och loopar. 423 00:20:47,870 --> 00:20:54,920 Och till skillnad från C, arrayer i snabb inte företräds av pekare. 424 00:20:54,920 --> 00:20:58,730 Pekare i snabba, trots att de existerar, som kallas 425 00:20:58,730 --> 00:21:02,840 som osäkra pekare eller någon liknande typ som den här, 426 00:21:02,840 --> 00:21:04,950 de är inte utsatta för du normalt. 427 00:21:04,950 --> 00:21:07,300 Så det blir mycket svårt för dig att manipulera 428 00:21:07,300 --> 00:21:10,020 minnet direkt i din dator. 429 00:21:10,020 --> 00:21:11,670 >> Så arrayer är bara en datatyp. 430 00:21:11,670 --> 00:21:16,830 Och de är refererade använder denna typ nu standard hakparentes notation 431 00:21:16,830 --> 00:21:18,280 när du har sett förut. 432 00:21:18,280 --> 00:21:21,130 Men när du faktiskt vill definiera en typ av en variabel 433 00:21:21,130 --> 00:21:24,330 som en array av något viss typ, då du 434 00:21:24,330 --> 00:21:27,150 sätta den typen inom hakparenteser. 435 00:21:27,150 --> 00:21:30,260 Så vad jag säger här är att Jag skapar en variabel som heter 436 00:21:30,260 --> 00:21:33,930 kvaliteter av typen int array. 437 00:21:33,930 --> 00:21:37,380 Och jag ställer den lika med en del initialiserade data, som i detta fall 438 00:21:37,380 --> 00:21:42,960 är 100, 0, 90, 85, som är bara en samling godtyckliga kvaliteter här. 439 00:21:42,960 --> 00:21:46,480 Nu i detta fall jag kunde, minns, ta bort typ, 440 00:21:46,480 --> 00:21:49,580 och det skulle kunna sluta sig till det baserat på det initierade data. 441 00:21:49,580 --> 00:21:51,990 Men om jag tog bort detta och Jag behövde ställa in den senare, 442 00:21:51,990 --> 00:21:56,840 då skulle jag måste se till att att jag har typ där. 443 00:21:56,840 --> 00:21:58,750 Okej, låt oss gå tillsammans. 444 00:21:58,750 --> 00:22:03,010 Så vi can-- arrayer tillhandahåller oss en mängd 445 00:22:03,010 --> 00:22:07,130 metoder genom att punktnotation på dig är förmodligen nu bekant med. 446 00:22:07,130 --> 00:22:10,360 Så grades.count, till exempel, berättar exakt hur många 447 00:22:10,360 --> 00:22:13,680 av element som är på denna matris. 448 00:22:13,680 --> 00:22:17,260 >> Om jag vill lägga additional-- Nu märker att detta är en var 449 00:22:17,260 --> 00:22:20,140 och inte-- detta är en variabel och inte en konstant, vilken 450 00:22:20,140 --> 00:22:24,410 betyder att jag kan ändra innehållet av denna array, kan jag lägga till objekt i den. 451 00:22:24,410 --> 00:22:28,870 Men jag kan inte bara säga kvaliteter och sedan i hakparenteser 452 00:22:28,870 --> 00:22:33,280 fyra, eftersom det kommer att vara en out of bounds fel i det här fallet. 453 00:22:33,280 --> 00:22:36,190 Om jag vill faktiskt förändring storleken på denna samling, 454 00:22:36,190 --> 00:22:41,140 Jag måste använda punkt append metod för att lägga något på till slutet av den. 455 00:22:41,140 --> 00:22:46,900 Jag kan dock förändras individuella index. 456 00:22:46,900 --> 00:22:48,920 >> Så jag kunde använda betygen och sedan hakparenteser 457 00:22:48,920 --> 00:22:52,480 noll för att manipulera detta första index och så vidare, som du normalt skulle förvänta sig. 458 00:22:52,480 --> 00:22:56,530 Och jag kan göra samma sak att faktiskt ta emot data från det också. 459 00:22:56,530 --> 00:23:00,420 Nu finns det också en slags fantasi metod att göra detta, kvaliteter plus jämlikar 460 00:23:00,420 --> 00:23:02,525 och sedan ett annat index, vilket kommer append-- 461 00:23:02,525 --> 00:23:04,400 eller inte annat index-- men en annan lista som 462 00:23:04,400 --> 00:23:07,340 kommer bifoga denna förteckning på baksidan av betyg. 463 00:23:07,340 --> 00:23:09,780 Och betygen kommer då innehålla allt det. 464 00:23:09,780 --> 00:23:13,850 Men det blir liksom en extra sak att jag bara visar dig för skojs skull. 465 00:23:13,850 --> 00:23:14,910 >> Nu finns det en for-loop. 466 00:23:14,910 --> 00:23:18,970 Och det här är början på där saker börjar ändra lite. 467 00:23:18,970 --> 00:23:22,920 Lägg märke till hur detta för slingan är annorlunda för slingor i C. 468 00:23:22,920 --> 00:23:26,470 Nu kommer jag att konstatera att för slingor i Swift kan 469 00:23:26,470 --> 00:23:30,650 göras för att se ut efter loopar i C, men det finns en hel del mer användbara konstruktioner 470 00:23:30,650 --> 00:23:37,840 som i huvudsak eliminera behovet att få för var i lika 0 semikolon i 471 00:23:37,840 --> 00:23:40,340 är mindre än en viss längd, så vidare och så vidare, eller hur? 472 00:23:40,340 --> 00:23:42,940 Och denna konstruktion är bara en av dem. 473 00:23:42,940 --> 00:23:49,030 >> För index, är index nytt variabel, i detta fall, inom räckhåll. 474 00:23:49,030 --> 00:23:52,730 Och vad jag säger är att det finns ett område från 0 hela vägen upp till 475 00:23:52,730 --> 00:23:55,870 men inte grades.count. 476 00:23:55,870 --> 00:23:58,470 Så här dot dot mindre än tecken representerar 477 00:23:58,470 --> 00:24:05,040 ett intervall av värden som börjar från noll hela vägen upp till grades.count minus ett. 478 00:24:05,040 --> 00:24:07,070 Det finns en separat operatör som existerar, 479 00:24:07,070 --> 00:24:13,320 vilket är dot dot dot, vilket skulle menar att jag vill intervallet noll 480 00:24:13,320 --> 00:24:16,310 till betygen räknas inclusive. 481 00:24:16,310 --> 00:24:19,130 >> Men i detta fall, eftersom dessa arrayer är noll index, vi naturligtvis 482 00:24:19,130 --> 00:24:23,290 vill inte gå till maximalt antal kvaliteter. 483 00:24:23,290 --> 00:24:26,390 Jag kan summera betygen, som du kanske förväntar sig, och utgång allt det här. 484 00:24:26,390 --> 00:24:29,620 OK, vi går vidare. 485 00:24:29,620 --> 00:24:32,270 Nu ska vi prata om funktioner. 486 00:24:32,270 --> 00:24:35,465 För att definiera en funktion du använder funk nyckelordet. 487 00:24:35,465 --> 00:24:38,090 Och återigen, i Swift måste man vara mycket försiktig med de typer. 488 00:24:38,090 --> 00:24:41,530 Du ger till det parametrar genom att definiera, till exempel, 489 00:24:41,530 --> 00:24:45,440 namnet på parametern och sedan i colin, vilken typ av data 490 00:24:45,440 --> 00:24:47,690 att du förväntar dig att parameter att acceptera. 491 00:24:47,690 --> 00:24:50,700 >> Så i det här fallet har vi en Funktionen kallas utskriftskvalitet räknas. 492 00:24:50,700 --> 00:24:54,630 Den accepterar en variabel som heter betygsbok, eller snarare en parameter kallad betygsbok. 493 00:24:54,630 --> 00:24:59,267 Och vi förväntar oss att betygsbok att vara en array av heltal. 494 00:24:59,267 --> 00:25:01,350 Om detta betygsbok är tomt, vi ska skriva ut en sak. 495 00:25:01,350 --> 00:25:06,090 Annars kommer vi att skriva ut numret kvaliteter som detta faktiskt har. 496 00:25:06,090 --> 00:25:09,470 >> Om vi ​​nu vill återvända något värde, då vägen 497 00:25:09,470 --> 00:25:14,595 att vi ändrar denna definition är att faktiskt använda den här pilen nyckelordet, 498 00:25:14,595 --> 00:25:16,870 eller att använda den här pilen signifier. 499 00:25:16,870 --> 00:25:19,440 Så här ska vi definiera en funktion som kallas genomsnitt. 500 00:25:19,440 --> 00:25:21,940 Vi kommer att acceptera en lista med tal. 501 00:25:21,940 --> 00:25:25,430 Och vi kommer att återvända en dubbel, vilket förhoppningsvis 502 00:25:25,430 --> 00:25:31,270 vara medelvärdet av denna matris. 503 00:25:31,270 --> 00:25:34,570 Och för att göra det, för att faktiskt beräkna detta genomsnitt, 504 00:25:34,570 --> 00:25:38,651 Vi kommer att ta en summa och vi kommer Kursen sammanfatta alla objekt 505 00:25:38,651 --> 00:25:39,400 inom denna matris. 506 00:25:39,400 --> 00:25:41,480 >> Lägg märke till att det finns en ny stil för loop här. 507 00:25:41,480 --> 00:25:45,450 Vi behöver inte vara explicit om iterera över varje enskilt element, 508 00:25:45,450 --> 00:25:48,280 men vi kan i stället säga klass och betygsbok, mening 509 00:25:48,280 --> 00:25:50,930 att för varje enskild objekt som vi har i det här, 510 00:25:50,930 --> 00:25:53,482 föreskriva att objektet i detta variabel som heter klass. 511 00:25:53,482 --> 00:25:54,940 Och jag vill göra något med det. 512 00:25:54,940 --> 00:26:00,350 Så jag ska summera allt detta uppgifter och faktiskt returnera dubbel delning. 513 00:26:00,350 --> 00:26:04,436 >> Nu märker igen här finns det Begreppet heltalsdivision i Swift. 514 00:26:04,436 --> 00:26:06,810 Om du vill dubbla division eftersom du vill decimaler, 515 00:26:06,810 --> 00:26:09,460 då måste man vara tydlig, inte bara om den ena sidan, 516 00:26:09,460 --> 00:26:14,030 eftersom det inte kommer att låta dig att tvinga uppgifter på vardera sidan av detta, 517 00:26:14,030 --> 00:26:17,030 du måste faktiskt kursen båda sidor i dubbel 518 00:26:17,030 --> 00:26:19,440 så att du är väldigt explicit om att se 519 00:26:19,440 --> 00:26:23,370 att du gör dubbel delning. 520 00:26:23,370 --> 00:26:26,150 >> Låt oss gå vidare. 521 00:26:26,150 --> 00:26:31,150 Så om jag vill verkligen att accept-- så i detta speciella exempel, 522 00:26:31,150 --> 00:26:34,260 detta är fortfarande ett kommando line baserad applikation. 523 00:26:34,260 --> 00:26:37,920 Och vi börjar se några av begränsningarna i den unga språket 524 00:26:37,920 --> 00:26:41,850 i att även om vi kan åtkomst argumenten genom att använda 525 00:26:41,850 --> 00:26:44,940 detta process.arguments, det fortfarande inte nödvändigtvis den renaste 526 00:26:44,940 --> 00:26:46,200 sak som vi någonsin har sett. 527 00:26:46,200 --> 00:26:49,142 Men i grund och botten jag uppmuntrar dig att sorts titta på denna kod 528 00:26:49,142 --> 00:26:51,100 och försöka lista ut vad exakt som händer. 529 00:26:51,100 --> 00:26:55,030 >> I huvudsak det som händer är att vi tar en lista med argument 530 00:26:55,030 --> 00:26:57,610 och var tvinga dem in heltal, och då är vi 531 00:26:57,610 --> 00:27:03,620 kommer att använda det som ett sätt att skriva ut ut genomsnittet av alla våra kvaliteter. 532 00:27:03,620 --> 00:27:06,150 533 00:27:06,150 --> 00:27:07,350 Går vidare. 534 00:27:07,350 --> 00:27:11,190 Nu finns det en annan typ av data-- annan datatyp stället arrayer 535 00:27:11,190 --> 00:27:14,940 kallade ordböcker, som är mycket liknar hashtabeller eller hash kartor 536 00:27:14,940 --> 00:27:18,560 och liknar också PHP: s associativa arrayer. 537 00:27:18,560 --> 00:27:20,770 Så de har uppfattningen av nycklar och värden. 538 00:27:20,770 --> 00:27:23,780 >> Och de är definierade också med denna hakparentes notation, 539 00:27:23,780 --> 00:27:26,750 men skillnaden är att ordböcker har 540 00:27:26,750 --> 00:27:29,370 insidan av klammer, ett kolon. 541 00:27:29,370 --> 00:27:33,850 Och kolon separerar datan typ som är nyckeln och värdet. 542 00:27:33,850 --> 00:27:38,540 Så i det här fallet, kommer jag att skapa en ordbok för att acceptera vissa kvaliteter. 543 00:27:38,540 --> 00:27:44,200 Och det kommer att bli av typen string: int, 544 00:27:44,200 --> 00:27:46,940 vilket innebär, att alla av nycklar kommer att vara strängar, 545 00:27:46,940 --> 00:27:53,080 och alla av värdena på de nycklar kommer att vara heltal. 546 00:27:53,080 --> 00:27:55,780 >> Vad detta betyder är att jag kan sedan referera till specifika uppgifter 547 00:27:55,780 --> 00:28:00,490 att jag vill använda dessa nycklar snarare än att använda numeriska index som jag 548 00:28:00,490 --> 00:28:04,350 skulle ha för en vanlig array. 549 00:28:04,350 --> 00:28:06,470 Nu ska vi se, det finns en viktig sak 550 00:28:06,470 --> 00:28:10,790 att jag också vill nämna om denna speciella kodsekvens. 551 00:28:10,790 --> 00:28:12,910 Och det är att det finns annan typ av data, 552 00:28:12,910 --> 00:28:15,580 eller snarare finns det här idé om uppgifter som är 553 00:28:15,580 --> 00:28:18,340 innesluten i Swift kallas optionals. 554 00:28:18,340 --> 00:28:21,270 >> Och vad optionals betyder är att den erkänner det faktum 555 00:28:21,270 --> 00:28:27,500 som ibland du inte kommer att får de data som du faktiskt förväntar sig. 556 00:28:27,500 --> 00:28:31,400 Och så vad jag menar med det är-- låt oss ta en titt på denna sekvens av kod 557 00:28:31,400 --> 00:28:38,910 vilka itererar över alla de argument som skickas till den här koden 558 00:28:38,910 --> 00:28:43,460 och försöker konvertera dem, försöker att delas upp i en mångfald av strängar, 559 00:28:43,460 --> 00:28:47,310 eftersom det accepterar en mycket viss typ av argument. 560 00:28:47,310 --> 00:28:51,530 Och då kommer det att försöka tvinga strängarna som representerar siffror 561 00:28:51,530 --> 00:28:55,460 i heltal som är kvaliteter, att jag då kan beräkna. 562 00:28:55,460 --> 00:28:58,230 >> Så i princip jag ska använda denna split funktion som 563 00:28:58,230 --> 00:29:00,080 finns inom Swift standardbibliotek. 564 00:29:00,080 --> 00:29:03,720 Jag kommer att passera in det sträng som jag vill dela. 565 00:29:03,720 --> 00:29:06,980 Och sedan använda detta sorts funky syntax, vilket 566 00:29:06,980 --> 00:29:09,670 Jag vet inte om vi ska komma till, men kanske, vi 567 00:29:09,670 --> 00:29:14,320 kommer faktiskt specificera exakt karaktär som vi vill dela på. 568 00:29:14,320 --> 00:29:16,030 Så vad innebär det egentligen ut? 569 00:29:16,030 --> 00:29:18,740 Låt oss ta en titt på faktiskt kör den här koden. 570 00:29:18,740 --> 00:29:22,000 >> Så till exempel, låt oss säga att jag har en frågesport och jag fick 50 på det. 571 00:29:22,000 --> 00:29:23,960 Och jag har en PSETs och Jag fick en hundra på det. 572 00:29:23,960 --> 00:29:29,180 Och jag got-- det finns en annan quiz och jag fick en 40 på det. 573 00:29:29,180 --> 00:29:33,520 Jag slog Enter, och så småningom vad kommer att hända är att vad den gör 574 00:29:33,520 --> 00:29:37,730 tar dessa parametrar, delning strängarna på dessa kolon, 575 00:29:37,730 --> 00:29:41,390 erkänner att det finns två element i var och en, 576 00:29:41,390 --> 00:29:43,700 och det är i huvudsak hålla reda på varje. 577 00:29:43,700 --> 00:29:49,226 >> Så jag har i min ordbok en frågesport, vars värdet representeras av antalet 50, 578 00:29:49,226 --> 00:29:54,290 Jag har en PSET som har värde av 100, och en frågesport en som har ett värde på 40. 579 00:29:54,290 --> 00:29:57,400 Sen senare i koden jag faktiskt genomsnittliga alla dessa värden 580 00:29:57,400 --> 00:30:01,160 och lista alla nycklar att särskild ordbok. 581 00:30:01,160 --> 00:30:03,217 Men detta är viktigt så att du kan märka 582 00:30:03,217 --> 00:30:06,050 vad som händer, det är vad vi vill göra är att ta den här strängen 583 00:30:06,050 --> 00:30:11,450 och dela den på denna karaktär, som vi kan göra igen med denna uppdelning 584 00:30:11,450 --> 00:30:15,690 funktionen med denna typ av intressant syntax som finns här. 585 00:30:15,690 --> 00:30:17,880 >> Just nu antar att det är OK. 586 00:30:17,880 --> 00:30:19,980 Vi ska titta mer på detta på bara en liten stund. 587 00:30:19,980 --> 00:30:23,230 Men nu finns det en intressant aspekt som vi faktiskt 588 00:30:23,230 --> 00:30:27,250 vill försöka omvandla detta sträng till ett heltal. 589 00:30:27,250 --> 00:30:29,720 Men i andra språk vad som kan hända är 590 00:30:29,720 --> 00:30:33,440 att vi skulle förmodligen försöka att göra det och antingen få tillbaka 591 00:30:33,440 --> 00:30:36,185 något slags sentinel värde som negativ 592 00:30:36,185 --> 00:30:39,420 eller kanske en null eller något liknande. 593 00:30:39,420 --> 00:30:41,070 Eller kanske det skulle bara orsakat ett fel. 594 00:30:41,070 --> 00:30:42,820 Och vi skulle behöva sedan fånga felet 595 00:30:42,820 --> 00:30:44,820 och sedan försöka göra något bygger på det faktum 596 00:30:44,820 --> 00:30:48,280 att denna omvandling till ett heltal misslyckades. 597 00:30:48,280 --> 00:30:50,460 Det är där denna idé av optionals kommer in. 598 00:30:50,460 --> 00:30:56,120 Du kan faktiskt skapa en datatyp som är en int frågetecken, till exempel. 599 00:30:56,120 --> 00:30:59,140 600 00:30:59,140 --> 00:31:01,910 Det betyder att denna heltal är, i själva verket, valfritt. 601 00:31:01,910 --> 00:31:05,980 Och vad kommer att hända är att det kan innehålla ett heltal, eller det kanske inte. 602 00:31:05,980 --> 00:31:10,650 Det kan i själva verket vara så här andra idé, helt kallas nill. 603 00:31:10,650 --> 00:31:14,900 I vilket det betyder att det finns inget värde alls i detta. 604 00:31:14,900 --> 00:31:16,810 Det är inte ens noll, det finns bara inget värde. 605 00:31:16,810 --> 00:31:18,790 Det finns absolut inget värde representerade. 606 00:31:18,790 --> 00:31:21,650 >> Och det är vad denna linje 71 gör. 607 00:31:21,650 --> 00:31:25,990 Är att det är att säga att jag vill försöka ställa in ett värde, 608 00:31:25,990 --> 00:31:31,790 en variabel kallad grad, som är lika med den omvandling av denna sträng till en int. 609 00:31:31,790 --> 00:31:34,010 Så jag har tagit denna sträng, denna första komponenter, 610 00:31:34,010 --> 00:31:37,680 eller snarare den andra komponenter, eftersom detta 611 00:31:37,680 --> 00:31:40,770 är noll indexerad, om detta sträng som jag har delat. 612 00:31:40,770 --> 00:31:42,930 Och jag vill konvertera att till ett heltal. 613 00:31:42,930 --> 00:31:46,730 Men det kan inte alltid gå vidare normalt, eftersom föreställa 614 00:31:46,730 --> 00:31:50,710 vad skulle hända om, snarare än typ ett nummer, jag skriver ju som asdf. 615 00:31:50,710 --> 00:31:51,534 >> Det kommer att misslyckas. 616 00:31:51,534 --> 00:31:54,200 Det är inte faktiskt kommer att bli kan konvertera det till ett heltal 617 00:31:54,200 --> 00:31:55,510 som jag förväntar mig. 618 00:31:55,510 --> 00:31:58,660 Så i stället för att sparka igång någon form av ett fel, 619 00:31:58,660 --> 00:32:01,210 Vi har denna idé om en valfri. 620 00:32:01,210 --> 00:32:04,240 Och det betyder att du använder Detta frågetecken kan jag säga, 621 00:32:04,240 --> 00:32:09,100 OK, är det möjligt att jag kan ta detta, omvandlade det till en int, 622 00:32:09,100 --> 00:32:12,630 och lägg den i en variabel, vilket kommer också att vara en int. 623 00:32:12,630 --> 00:32:15,420 Om så, det betyder att detta var lyckat 624 00:32:15,420 --> 00:32:18,720 och denna första del av blocket kan fortsätta. 625 00:32:18,720 --> 00:32:21,040 >> Annars misslyckades det. 626 00:32:21,040 --> 00:32:25,840 Det finns inget värde i grade-- eller snarare finns det inget värde i befintliga, 627 00:32:25,840 --> 00:32:30,220 och jag har faktiskt försöka hantera detta feltillstånd. 628 00:32:30,220 --> 00:32:33,340 Du kommer att se det här frågetecken hela tiden 629 00:32:33,340 --> 00:32:35,990 i Swift och exempelkod för Swift. 630 00:32:35,990 --> 00:32:40,980 Och i själva verket den nill operatören, denna typ av frågetecken, den optionals delen, 631 00:32:40,980 --> 00:32:45,057 kommer att vara förmodligen en av de svårare sakerna 632 00:32:45,057 --> 00:32:47,640 att sorts linda huvudet runt som du faktiskt arbetar med det. 633 00:32:47,640 --> 00:32:48,490 >> Det kan vara meningsfullt nu. 634 00:32:48,490 --> 00:32:50,760 Och faktiskt, när jag var skriva exempelkod för detta, 635 00:32:50,760 --> 00:32:52,780 säkert jag förstod vad som pågick, 636 00:32:52,780 --> 00:32:55,570 men ändå fångade mig överraskning varje så ofta 637 00:32:55,570 --> 00:32:58,370 när jag skulle finna att vissa uppgifter var faktiskt 638 00:32:58,370 --> 00:33:04,024 en nollversion, en valfri version av de data som jag hade förväntat mig. 639 00:33:04,024 --> 00:33:06,190 Så bara att inse att om du ha en valfri version 640 00:33:06,190 --> 00:33:09,360 du måste packa upp den data från den här rutan. 641 00:33:09,360 --> 00:33:15,870 >> Så det är ungefär som I-- tänk om du har en låda och den innehåller något. 642 00:33:15,870 --> 00:33:18,490 Och vad du behöver göra är att ställa frågan, 643 00:33:18,490 --> 00:33:22,800 är det möjligt att denna låda faktiskt innehåller uppgifter som jag letar efter? 644 00:33:22,800 --> 00:33:28,180 Om så är fallet, dra sedan dessa data ut och lägg den i denna variabel befintliga. 645 00:33:28,180 --> 00:33:32,080 Om inte, då jag måste bara bortse från innehållet i denna ruta 646 00:33:32,080 --> 00:33:34,310 helt och hållet eftersom det bokstav innehåller ingenting. 647 00:33:34,310 --> 00:33:36,880 648 00:33:36,880 --> 00:33:40,400 >> Eventuella frågor om detta? 649 00:33:40,400 --> 00:33:44,430 OK, låt oss gå bort från detta sorts kommandoraden baserade sak 650 00:33:44,430 --> 00:33:47,610 och börja titta på en del av tekniken 651 00:33:47,610 --> 00:33:53,060 att Xcode ger till oss i form av lekplatser. 652 00:33:53,060 --> 00:33:56,669 Så det finns en hel del kapacitet här med Swift. 653 00:33:56,669 --> 00:33:59,210 Och om du öppnar upp Xcode och det frågar dig vad du vill göra, 654 00:33:59,210 --> 00:34:01,340 du kan öppna upp lekplatsen och bara leka 655 00:34:01,340 --> 00:34:06,200 med en mängd olika strukturer och aspekter av språket 656 00:34:06,200 --> 00:34:11,800 innan du ens börjar röra iOS SDK eller Mac SDK. 657 00:34:11,800 --> 00:34:15,670 >> Så här fallet, låt oss säga att jag have-- Jag har en relativt krystat exempel 658 00:34:15,670 --> 00:34:18,460 här, men bär med mig som vi sorterar av arbete genom detta exempel. 659 00:34:18,460 --> 00:34:22,639 Låt oss säga att vi måste göra en hel del av exponenter med ett fast värde, 660 00:34:22,639 --> 00:34:26,397 som vi vet att vi kommer att behöva göra en hel del kvadrat befogenheter, till exempel. 661 00:34:26,397 --> 00:34:28,980 Så vi kommer att ta lite värde x, vi kommer till torget den, 662 00:34:28,980 --> 00:34:30,540 vi ska ta lite värde y och vi kommer att torget den. 663 00:34:30,540 --> 00:34:31,780 Så vidare och så vidare. 664 00:34:31,780 --> 00:34:35,549 >> Nu kanske vi faktiskt bara skapa en makt 2 funktion för detta, eller hur? 665 00:34:35,549 --> 00:34:37,090 Så vi skulle skapa en effekt av 2-funktionen. 666 00:34:37,090 --> 00:34:38,600 Vi ska acceptera en dubbel. 667 00:34:38,600 --> 00:34:41,489 Vi ska output-- eller vi ska returnera en dubbel typ. 668 00:34:41,489 --> 00:34:46,159 Vi tar det här resultatet och sedan för två gånger 669 00:34:46,159 --> 00:34:52,040 vad vi faktiskt ta resultaten, vilket var det initieras till värdet av en, 670 00:34:52,040 --> 00:34:53,090 och multiplicera det med x. 671 00:34:53,090 --> 00:34:56,540 Så i huvudsak har vi x gånger x här. 672 00:34:56,540 --> 00:35:01,860 >> Och så då kan jag då, som vi kanske förväntar, ta detta, kör makt 2, 673 00:35:01,860 --> 00:35:03,680 tillhandahåller det några uppgifter, jag gillar 2.0. 674 00:35:03,680 --> 00:35:05,756 Och vi får se resultatet här 4,0. 675 00:35:05,756 --> 00:35:09,200 Kör makt 2 på 3,2 och vi får se vårt resultat, 10,24. 676 00:35:09,200 --> 00:35:10,840 Så långt så bra, eller hur? 677 00:35:10,840 --> 00:35:12,070 Nu vi tänker, ja, OK. 678 00:35:12,070 --> 00:35:15,530 Nu har jag faktiskt behöver göra en hel del befogenheter 3. 679 00:35:15,530 --> 00:35:19,180 Så jag ska kopiera klistra in alla här koden, ändra namnet på funktionen från 680 00:35:19,180 --> 00:35:24,440 makt 2 till makten av 3, och allt kommer att vara samma utom för detta värde 681 00:35:24,440 --> 00:35:26,740 Här, detta intervall, 1 ... 2. 682 00:35:26,740 --> 00:35:29,590 >> Så i stället för att upprepa denna slinga två gånger, 683 00:35:29,590 --> 00:35:31,880 Jag vill upprepa denna loop tre gånger. 684 00:35:31,880 --> 00:35:36,330 Så jag ändrar bara det värdet från 1 till 3-- eller snarare från 2 till 3. 685 00:35:36,330 --> 00:35:39,230 Så återigen, samma kod, det är den enda förändringen. 686 00:35:39,230 --> 00:35:40,080 Nu fungerar även. 687 00:35:40,080 --> 00:35:43,860 Power of 3 ges i något värde 2. 688 00:35:43,860 --> 00:35:44,420 Vi får 8. 689 00:35:44,420 --> 00:35:45,370 Så två i kubik. 690 00:35:45,370 --> 00:35:48,060 Och 3,2 kubik är 32.768. 691 00:35:48,060 --> 00:35:50,597 Och så långt så bra, eller hur? 692 00:35:50,597 --> 00:35:52,930 Men förhoppningsvis är lite lite av en röd flagga för dig 693 00:35:52,930 --> 00:35:55,530 i att vi nu har visst dubbel kod 694 00:35:55,530 --> 00:35:58,800 undantag för vissa mycket små ändras från ett till nästa. 695 00:35:58,800 --> 00:36:02,170 Så finns det något sätt att Vi skulle kunna förenkla 696 00:36:02,170 --> 00:36:06,080 detta problem, där vi kan faktiskt, vid körning, räkna ut en del, 697 00:36:06,080 --> 00:36:11,320 lämnar till oss någon funktion som har just kraften i att vi vill. 698 00:36:11,320 --> 00:36:13,960 >> Och det är denna idé om nedläggningar, vilket är riktigt, riktigt 699 00:36:13,960 --> 00:36:18,180 viktigt i samband med Swift, och på många andra språk också. 700 00:36:18,180 --> 00:36:21,580 Men förmodligen kommer du att se det brukade mer så i Swift 701 00:36:21,580 --> 00:36:23,650 eftersom det är inbäddade inom det språk 702 00:36:23,650 --> 00:36:28,280 än du kommer i andra även moderna språk. 703 00:36:28,280 --> 00:36:31,140 Så idén om en nedläggning är detta, är att vi 704 00:36:31,140 --> 00:36:35,430 kan ha en funktion som är tänkt att vara en generisk funktion, en generisk makt 705 00:36:35,430 --> 00:36:36,860 av funktion. 706 00:36:36,860 --> 00:36:41,010 >> Och denna funktion kommer att acceptera denna exponent som vi faktiskt 707 00:36:41,010 --> 00:36:42,990 vill skapa. 708 00:36:42,990 --> 00:36:46,550 Så till exempel, den allra första Exempelvis ville vi en effekt av 2. 709 00:36:46,550 --> 00:36:50,050 Så vi skulle ge makt och sedan inom parentes 2. 710 00:36:50,050 --> 00:36:52,490 Och nu märker vad detta faktiskt återvänder. 711 00:36:52,490 --> 00:36:57,680 Detta tar en ingång av en primer kallas y som är ett heltal, 712 00:36:57,680 --> 00:37:03,090 och den återvänder denna galna ser sak i parentheses-- parentes 713 00:37:03,090 --> 00:37:06,230 dubbel och sedan pil dubbelt. 714 00:37:06,230 --> 00:37:10,270 >> Vad detta betyder är att jag är kommer att återvända en funktion. 715 00:37:10,270 --> 00:37:13,510 Jag är inte återvänder annan typ av data, är jag 716 00:37:13,510 --> 00:37:16,350 i själva verket återvänder en funktion som har denna parameter, att 717 00:37:16,350 --> 00:37:22,680 accepterar en dubbel som indata och avger en dubbel som ett returvärde. 718 00:37:22,680 --> 00:37:29,750 Och som ett resultat, för nu har jag kallat makt, passerar ett visst värde för y, 719 00:37:29,750 --> 00:37:32,280 och jag skapar denna andra function-- märker att det finns 720 00:37:32,280 --> 00:37:35,980 en annan funktion som är som skapat insidan av this-- vad jag gör 721 00:37:35,980 --> 00:37:37,830 är jag kan sedan ändra detta värde, att en 722 00:37:37,830 --> 00:37:41,010 värde som jag hade förändrats från 2 till 3, jag nu göra det y. 723 00:37:41,010 --> 00:37:42,500 >> Och detta är bestående. 724 00:37:42,500 --> 00:37:48,530 Så varje gång som jag kallar makten av, i huvudsak vad som händer 725 00:37:48,530 --> 00:37:51,030 är att jag får tillbaka en funktion. 726 00:37:51,030 --> 00:37:54,310 Lägg märke till att här har jag definierat en ny variabel som kallas torget. 727 00:37:54,310 --> 00:37:59,340 Jag har satt det lika med makt, under förutsättning att detta värde 2 till makt. 728 00:37:59,340 --> 00:38:02,030 Och vad detta åter är funktionen. 729 00:38:02,030 --> 00:38:05,970 Så kvadrat, variabeln kvadrat, är nu av typen funktion 730 00:38:05,970 --> 00:38:11,390 som har this-- oops, rulla upp en lite bit-- som har denna signatur, 731 00:38:11,390 --> 00:38:15,560 acceptera en dubbel och utgång en dubbel. 732 00:38:15,560 --> 00:38:17,330 >> Så nu vad jag har gjort är jag har i grunden 733 00:38:17,330 --> 00:38:22,890 skapat en funktion som heter torg som accepterar något värde och kommer torget den. 734 00:38:22,890 --> 00:38:24,960 Vi kan se vad som händer här nere. 735 00:38:24,960 --> 00:38:29,960 Square 3 till exempel, betyder att jag tänker att ta värdet 3 och kvadrat det. 736 00:38:29,960 --> 00:38:32,010 Så hur exakt gör detta arbete? 737 00:38:32,010 --> 00:38:37,800 När jag passerar makt 2-- när jag passera 2 i denna makt av funktion, 738 00:38:37,800 --> 00:38:44,430 denna variabel y är befolkat med det värdet 2. 739 00:38:44,430 --> 00:38:46,340 Och det är typ av rum i minnet. 740 00:38:46,340 --> 00:38:49,430 Det är ungefär som hålls i stat någonstans i datorn, 741 00:38:49,430 --> 00:38:51,980 Vi vet inte riktigt bryr sig om hur eller där vid denna punkt. 742 00:38:51,980 --> 00:38:54,692 >> Men jag återvänder denna funktion kallas exponentiate. 743 00:38:54,692 --> 00:38:57,400 Och återigen, det spelar egentligen ingen roll vad denna funktion kallas, 744 00:38:57,400 --> 00:39:01,730 Vi kan verkligen kalla det något, att accepterar en dubbel och returnerar en dubbel, 745 00:39:01,730 --> 00:39:05,640 men använder detta värde y inne i den. 746 00:39:05,640 --> 00:39:09,290 Så även om det är denna funktion, denna exponentiater funktion som är 747 00:39:09,290 --> 00:39:13,600 returnerats tillbaka till min variabel som jag kallade torget, 748 00:39:13,600 --> 00:39:17,980 Det har innesluten i det denna föreställning om vad y var. 749 00:39:17,980 --> 00:39:19,070 Och det kommer ihåg det. 750 00:39:19,070 --> 00:39:24,810 >> Så varje gång jag kallar den funktionen som kallas nu torg, använder det så. 751 00:39:24,810 --> 00:39:27,990 Men det betyder också att jag kan skapa en annan variabel med 752 00:39:27,990 --> 00:39:29,120 en annan makt. 753 00:39:29,120 --> 00:39:33,240 Så jag kan skapa en kub variabel, för exempel ge den makt 3. 754 00:39:33,240 --> 00:39:37,230 Nu kub kommer faktiskt ta lite värde och kub som och returnera den. 755 00:39:37,230 --> 00:39:39,570 Så vi kan se att jag får ett värde 8 av detta. 756 00:39:39,570 --> 00:39:42,720 >> Men det värdet y har inte ändras eftersom de är 757 00:39:42,720 --> 00:39:44,980 hölls i form av oberoende variabler. 758 00:39:44,980 --> 00:39:47,480 De är typ av rum i oberoende utrymmen i minnet. 759 00:39:47,480 --> 00:39:51,290 Så kuben kommer alltid att ha x upphöjt till 3. 760 00:39:51,290 --> 00:39:55,380 Och torget kommer alltid att ha x upphöjt till 2, vilket 761 00:39:55,380 --> 00:39:58,470 innebär att torget kommer alltid kvadrat siffror, som jag förväntar mig. 762 00:39:58,470 --> 00:40:01,794 Och kuben kommer alltid kubik siffror, som jag förväntar mig. 763 00:40:01,794 --> 00:40:04,960 Detta innebär också att du ibland kan få något slags funky ser syntax 764 00:40:04,960 --> 00:40:09,030 där du har makt åtmin längst ned på skärmen här, kraften i 5. 765 00:40:09,030 --> 00:40:11,410 Och du passerar in i resultatet. 766 00:40:11,410 --> 00:40:14,670 Kallar du det funktionen som är returnerats med nummer 4. 767 00:40:14,670 --> 00:40:17,440 Och så vad huvudsak detta är 4 till den femte makten, 768 00:40:17,440 --> 00:40:20,830 Vi kan se resultatet där. 769 00:40:20,830 --> 00:40:23,690 Med mig så långt? 770 00:40:23,690 --> 00:40:26,620 >> Så denna idé kallas en förslutning, eftersom vad vi i grund och botten gör 771 00:40:26,620 --> 00:40:30,610 är vi kapsla vissa uppgifter into-- sorterar 772 00:40:30,610 --> 00:40:33,050 att innesluta dessa data in i en funktion och vi är 773 00:40:33,050 --> 00:40:36,240 att kunna återanvända denna funktion. 774 00:40:36,240 --> 00:40:41,480 Nu är denna syntax men kan faktiskt förenklas en stor mängd. 775 00:40:41,480 --> 00:40:45,005 Och det finns massor av möjligheter i Swift för denna förenkling. 776 00:40:45,005 --> 00:40:47,780 Och det är vad slags av därpå följande faktiskt titta på. 777 00:40:47,780 --> 00:40:51,400 Så i 7b vi till exempel ta detta exakt samma kod. 778 00:40:51,400 --> 00:40:54,360 >> Men nu i stället faktiskt definiera en funktion 779 00:40:54,360 --> 00:40:57,910 insidan av denna makt fungera och ge den ett namn, 780 00:40:57,910 --> 00:41:00,150 och sedan tillbaka namnet av denna funktion, som 781 00:41:00,150 --> 00:41:02,357 sedan används som en del av denna stängning, i stället är vi 782 00:41:02,357 --> 00:41:03,440 bara kommer att förenkla det. 783 00:41:03,440 --> 00:41:06,580 Vi behöver inte den här funktionen att nämnas. 784 00:41:06,580 --> 00:41:09,760 Så detta är begreppet anonym funktion där vi kan då 785 00:41:09,760 --> 00:41:15,180 acceptera som indata, inom parentes här, variabeln x som är av typen dubbel. 786 00:41:15,180 --> 00:41:17,250 >> Vi kommer att återvända typen dubbel. 787 00:41:17,250 --> 00:41:19,830 Och sedan nyckelordet, n, är början av denna funktion. 788 00:41:19,830 --> 00:41:22,180 Så märker att allt detta är inom klammer 789 00:41:22,180 --> 00:41:25,310 och vi definierar en anonym fungera här. 790 00:41:25,310 --> 00:41:29,910 Bara ett enklare sätt att definiera exakt samma sak. 791 00:41:29,910 --> 00:41:30,810 OK? 792 00:41:30,810 --> 00:41:36,740 Men hålla på, Swift faktiskt tillåter oss att gå längre och förenkla ännu mer, 793 00:41:36,740 --> 00:41:40,180 eftersom verkligen gör vi inte vård att denna parameter är 794 00:41:40,180 --> 00:41:41,700 namngav någon särskild sak. 795 00:41:41,700 --> 00:41:48,090 Det kan verkligen kallas något och Vi kan fortfarande använda den första parametern. 796 00:41:48,090 --> 00:41:53,800 >> Så i själva verket finns det denna speciella typ av data i anonyma funktioner, 797 00:41:53,800 --> 00:41:57,710 det är denna speciella namn variabler i anonyma funktioner 798 00:41:57,710 --> 00:42:00,280 som börjar med dollartecken och representerar 799 00:42:00,280 --> 00:42:03,785 parameternumren, noll indexeras, för denna funktion. 800 00:42:03,785 --> 00:42:05,410 Så det finns ett par saker som pågår. 801 00:42:05,410 --> 00:42:08,550 Här kommer jag att återvända, och sedan en klammerparentes representerar en funktion, 802 00:42:08,550 --> 00:42:09,050 rätt? 803 00:42:09,050 --> 00:42:13,920 >> Observera att jag inte har definierat parametertyper eller returtypen. 804 00:42:13,920 --> 00:42:16,460 Det kan faktiskt utläsas på grund av signaturen 805 00:42:16,460 --> 00:42:18,360 av denna ursprungliga funktion. 806 00:42:18,360 --> 00:42:20,500 Så vi kan eliminera att som en möjlighet. 807 00:42:20,500 --> 00:42:25,120 Men också kan jag använda dollartecken noll till representera denna första parameter som är 808 00:42:25,120 --> 00:42:28,200 passera in denna anonym funktion. 809 00:42:28,200 --> 00:42:31,630 Så förenkla det ännu mer. 810 00:42:31,630 --> 00:42:32,750 OK? 811 00:42:32,750 --> 00:42:33,820 Så långt är allt väl? 812 00:42:33,820 --> 00:42:36,980 >> Nu är det här Motortyp- gör du minns denna dollartecken noll 813 00:42:36,980 --> 00:42:40,130 som vi såg i denna klammerparentes att vi såg bara en liten stund 814 00:42:40,130 --> 00:42:43,870 sedan i denna Swift sex exempel? 815 00:42:43,870 --> 00:42:46,560 Det var precis här. 816 00:42:46,560 --> 00:42:48,430 Lägg märke det är precis vad vi tittar på, 817 00:42:48,430 --> 00:42:51,580 är att vi har passerat in i denna split funktion 818 00:42:51,580 --> 00:42:55,140 en anonym funktion som kontrollerar den första parametern 819 00:42:55,140 --> 00:42:57,830 för att se om det är lika med kolonsymbolen. 820 00:42:57,830 --> 00:42:59,830 Och det är precis det som är händer, det är allt 821 00:42:59,830 --> 00:43:02,320 vi doing-- returen sökord är underförstått 822 00:43:02,320 --> 00:43:05,800 i detta case-- vi tillbaka detta värde där vi jämföra 823 00:43:05,800 --> 00:43:10,020 den första parametern mot denna karaktär kolon. 824 00:43:10,020 --> 00:43:11,730 Och så den sortens demystifies detta. 825 00:43:11,730 --> 00:43:17,210 Och du kommer att se denna konstruktion mycket i Swift syntax, så gör hålla det 826 00:43:17,210 --> 00:43:19,400 i åtanke när du är ta en titt på detta. 827 00:43:19,400 --> 00:43:21,970 Nu kan vi gå av skenorna lite 828 00:43:21,970 --> 00:43:25,460 och gå riktigt snygga att shows även några fler av Swift makt. 829 00:43:25,460 --> 00:43:27,950 Du kan även se några av dessa i urval koder. 830 00:43:27,950 --> 00:43:29,790 Så det är därför jag kommer att visa detta för dig. 831 00:43:29,790 --> 00:43:37,260 >> I grund och botten vad vi kan göra är att, först av allt, det var typ av onödigt för mig 832 00:43:37,260 --> 00:43:41,710 att genomföra allt detta makt kod för om du importerar Darwin 833 00:43:41,710 --> 00:43:46,490 bibliotek, det faktiskt innehåller en funktion kallas pow som gör detta åt dig. 834 00:43:46,490 --> 00:43:50,570 Så vi kan förenkla det ännu mer och har vår uppstart fungerar nu bara 835 00:43:50,570 --> 00:43:54,890 vara en underbar en liner där vi bara returnera denna anonym funktion som 836 00:43:54,890 --> 00:44:00,780 accepterar dollartecken 0 som dess bas och y som dess exponent. 837 00:44:00,780 --> 00:44:02,582 >> Men vi kan bli riktigt, riktigt snygga när vi 838 00:44:02,582 --> 00:44:04,790 inse att Swift har en mycket makt under huven. 839 00:44:04,790 --> 00:44:07,010 En hel del av de operatörer som vi har att göra med, 840 00:44:07,010 --> 00:44:11,270 plus tecken och divisionssymboler och alla dessa saker som du normalt 841 00:44:11,270 --> 00:44:15,620 arbeta med med datatyper i ett programmeringsspråk, 842 00:44:15,620 --> 00:44:17,600 är faktiskt töjbara i Swift. 843 00:44:17,600 --> 00:44:21,460 Så vad det betyder i att vi kan definiera våra egna operatörer. 844 00:44:21,460 --> 00:44:26,020 >> Så nu är jag trött på att skriva i allt detta pow och sedan en parentes och sedan 845 00:44:26,020 --> 00:44:26,520 basen. 846 00:44:26,520 --> 00:44:27,520 Jag vill inte göra det. 847 00:44:27,520 --> 00:44:30,190 Jag vill faktiskt ha en operatör som tillåter mig att göra det. 848 00:44:30,190 --> 00:44:34,510 Så jag kan säga Swift som jag vill ha att skapa en operatör, stjärna 849 00:44:34,510 --> 00:44:39,472 star-- förresten jag kan inte använda karat eftersom karat är en operatör som 850 00:44:39,472 --> 00:44:40,680 gör något helt annat. 851 00:44:40,680 --> 00:44:42,720 Så jag vill inte sortera av kolliderar med det. 852 00:44:42,720 --> 00:44:45,750 Och så vad du ser i en mängd av språk, däribland Python, 853 00:44:45,750 --> 00:44:48,810 är som star star operatör för att representera exponenterna. 854 00:44:48,810 --> 00:44:50,730 >> Så det är den enda anledningen varför jag har gjort det. 855 00:44:50,730 --> 00:44:53,067 Och det kommer att bli en infix typ operatör. 856 00:44:53,067 --> 00:44:54,900 Och jag måste ge till det lite information 857 00:44:54,900 --> 00:44:58,386 om företräde för detta operatör så det är vänster associativ. 858 00:44:58,386 --> 00:45:00,260 Det är som relativt hög företräde jämfört 859 00:45:00,260 --> 00:45:02,432 att summering eller multiplikation. 860 00:45:02,432 --> 00:45:04,140 Det är högre prioritet än alla dem. 861 00:45:04,140 --> 00:45:04,931 Så vidare och så vidare. 862 00:45:04,931 --> 00:45:07,410 Och då jag definiera funktion som faktiskt 863 00:45:07,410 --> 00:45:10,070 dikterar vad denna operatör gör. 864 00:45:10,070 --> 00:45:14,150 Så antar att jag har en vänster sida och höger sida, 865 00:45:14,150 --> 00:45:17,330 vilket skulle vara kanske en bättre variabelnamn för detta. 866 00:45:17,330 --> 00:45:20,690 Vänster och höger sida. 867 00:45:20,690 --> 00:45:26,740 Jag kan sedan ta denna makt vänster till höger sida 868 00:45:26,740 --> 00:45:28,980 och returnera det värdet. 869 00:45:28,980 --> 00:45:30,370 Så nu är det super söt. 870 00:45:30,370 --> 00:45:33,790 Allt vi behöver göra är 2 star star 3 och det är 2 till den tredje kraften, 871 00:45:33,790 --> 00:45:35,290 och vi får ett värde på 8. 872 00:45:35,290 --> 00:45:40,280 2 star star 10 är 2 till 10th makt, vi får 1.024. 873 00:45:40,280 --> 00:45:43,630 >> Så nu vår makt för funktion, som återigen är olika, 874 00:45:43,630 --> 00:45:47,030 eftersom hela idén bakom detta var att vi har en funktion som 875 00:45:47,030 --> 00:45:50,700 alltid tar lite värde och multiplicerar det-- eller snarare 876 00:45:50,700 --> 00:45:53,240 tar exponenten till samma effekt. 877 00:45:53,240 --> 00:45:54,300 Så nu är det ännu enklare. 878 00:45:54,300 --> 00:45:57,070 Så nu är det bara dollarn underteckna 0 star star y. 879 00:45:57,070 --> 00:46:01,190 Vi behöver inte ens använda pow längre. 880 00:46:01,190 --> 00:46:03,020 >> OK, vem förlorade? 881 00:46:03,020 --> 00:46:03,700 Gör vi bra? 882 00:46:03,700 --> 00:46:05,090 Eventuella frågor om det här? 883 00:46:05,090 --> 00:46:05,815 Yeah? 884 00:46:05,815 --> 00:46:09,500 >> PUBLIK: När du-- [OHÖRBAR] funk makt y dubbel. 885 00:46:09,500 --> 00:46:11,441 Så när du returnerar en funktion. 886 00:46:11,441 --> 00:46:13,190 DANIEL Armendáriz: Funk makt y dubbel. 887 00:46:13,190 --> 00:46:14,270 Åh ja, jag vet inte vad y nummer. 888 00:46:14,270 --> 00:46:15,708 Ledsen för det. 889 00:46:15,708 --> 00:46:19,420 >> PUBLIK: Varför är du återvänder en funktion [OHÖRBAR] kapsling. 890 00:46:19,420 --> 00:46:24,214 Är inte dollarn noll stjärna stjärniga y [OHÖRBAR] 891 00:46:24,214 --> 00:46:29,710 finna att operatören med det vänder dubbel [OHÖRBAR] fördubblas? 892 00:46:29,710 --> 00:46:32,742 >> DANIEL Armendáriz: Så låt mig besvara din fråga 893 00:46:32,742 --> 00:46:35,950 hur jag förstår det och du kan berätta för mig om jag inte förstår din fråga. 894 00:46:35,950 --> 00:46:42,850 Så denna konstruktion, den lockiga stag dollartecken noll star star y, 895 00:46:42,850 --> 00:46:44,280 är en funktion. 896 00:46:44,280 --> 00:46:50,080 Och det accepterar en parameter som är representeras av denna dollartecken noll. 897 00:46:50,080 --> 00:46:55,830 Retur nyckelordet antyds i detta mycket kort, anonym funktion syntax. 898 00:46:55,830 --> 00:46:57,870 >> Vilket betyder att i huvudsak vad detta säger 899 00:46:57,870 --> 00:47:01,270 är att jag definierar en function-- och sedan ska jag 900 00:47:01,270 --> 00:47:05,320 bara kalla det something-- där jag har lite värde y. 901 00:47:05,320 --> 00:47:08,300 Jag har y, vilket är dubbelt. 902 00:47:08,300 --> 00:47:10,750 Och jag återvänder en dubbel. 903 00:47:10,750 --> 00:47:19,010 Och jag har inom denna avkastning y-- sorry, Jag borde inte ha kallat detta y-- x. 904 00:47:19,010 --> 00:47:20,240 Åh kära, Åh kära, Åh kära. 905 00:47:20,240 --> 00:47:27,440 X-- nope-- star star y. 906 00:47:27,440 --> 00:47:29,720 >> Så det här är bara en förenklad version av detta. 907 00:47:29,720 --> 00:47:33,990 Och så på grund av att jag har dollarn sign noll är att använda denna kapsling 908 00:47:33,990 --> 00:47:41,050 betyder att jag inte längre har skriva pow, eller inte längre göra 909 00:47:41,050 --> 00:47:45,570 Jag måste göra något som 3 star star 2. 910 00:47:45,570 --> 00:47:48,530 Jag kan bara ha en enda Funktionen kallas torget 911 00:47:48,530 --> 00:47:50,820 som alltid kommer att ta något värde som indata 912 00:47:50,820 --> 00:47:52,980 och faktiskt tillbaka kvadraten på det. 913 00:47:52,980 --> 00:47:56,460 >> Så hela syftet med nedläggningen är att bara sorts kapsla det faktum 914 00:47:56,460 --> 00:47:59,920 att jag alltid vill använda y när Jag kallar det fungerar som kraft 915 00:47:59,920 --> 00:48:01,710 när du tar denna exponent. 916 00:48:01,710 --> 00:48:04,650 Så återvänder sedan, en funktion som accepterar 917 00:48:04,650 --> 00:48:08,460 en dubbel, som är basen, och returnera resultatet av denna exponent 918 00:48:08,460 --> 00:48:10,740 är nyckeln här. 919 00:48:10,740 --> 00:48:12,790 Och det är den stora skillnaden. 920 00:48:12,790 --> 00:48:14,430 Det var bara lite av en blomstra. 921 00:48:14,430 --> 00:48:17,970 >> Detta är inte annorlunda jämfört med de tidigare exemplen, 922 00:48:17,970 --> 00:48:20,530 men det var bara lite en blomstra kan vi faktiskt 923 00:48:20,530 --> 00:48:24,500 skapa en operatör i Swift och faktiskt göra saker med det, 924 00:48:24,500 --> 00:48:26,396 som är typ av en cool grej. 925 00:48:26,396 --> 00:48:27,520 Har jag besvara din fråga? 926 00:48:27,520 --> 00:48:28,390 Sweet. 927 00:48:28,390 --> 00:48:31,350 Något annat innan vi går vidare? 928 00:48:31,350 --> 00:48:33,570 OK. 929 00:48:33,570 --> 00:48:36,430 >> Nu är detta slags tigger Frågan är that-- väl OK, 930 00:48:36,430 --> 00:48:40,870 Nu har vi möjligheten för funktioner som ska returneras. 931 00:48:40,870 --> 00:48:48,950 Kan vi passerar även fungerar som uppgifter eller som parametrar till andra funktioner? 932 00:48:48,950 --> 00:48:50,710 Och faktum är att vi kan. 933 00:48:50,710 --> 00:48:53,480 Så låt oss säga att vi har alla av samma kod. 934 00:48:53,480 --> 00:48:56,120 Vi har torget variabeln som kommer torget denna kod. 935 00:48:56,120 --> 00:48:59,320 Och vi har kuben variabeln som kommer kub vissa uppgifter. 936 00:48:59,320 --> 00:49:02,440 Och vi faktiskt vill tillämpa till ett brett intervall av tal. 937 00:49:02,440 --> 00:49:06,870 >> Så vad vi kan frestas att göra, naturligtvis som visserligen giltigt, 938 00:49:06,870 --> 00:49:15,430 är att iterera över denna lista med tal och tillämpa mina funktioner torget och kub 939 00:49:15,430 --> 00:49:22,270 och få två nya listor som resultat som är denna ursprungliga listan kvadrat 940 00:49:22,270 --> 00:49:24,970 och kubik, respektive. 941 00:49:24,970 --> 00:49:26,880 Helt acceptabelt. 942 00:49:26,880 --> 00:49:29,130 Men vad är det som vi ser här är att vi har, 943 00:49:29,130 --> 00:49:31,310 igen, dubbel vår kod. 944 00:49:31,310 --> 00:49:34,310 Och det finns kanske en möjlighet för oss att förenkla denna lite. 945 00:49:34,310 --> 00:49:41,260 Tänk om det fanns ett sätt för oss att faktiskt alltid iterera över en viss lista 946 00:49:41,260 --> 00:49:45,450 och bara övergå till denna magiska fungera en variabel som 947 00:49:45,450 --> 00:49:47,350 representerar en funktion att vi vill tillämpa 948 00:49:47,350 --> 00:49:50,336 till varje enskild post i den här listan. 949 00:49:50,336 --> 00:49:53,210 Detta tar upp begreppet vad kallas högre ordningens funktioner. 950 00:49:53,210 --> 00:49:57,150 Och det är i huvudsak vad detta är, är att vi kan skapa en funktion. 951 00:49:57,150 --> 00:50:00,210 >> Och i det här fallet det kallas en mapper, bara för att ge den ett namn, precis 952 00:50:00,210 --> 00:50:02,510 kartläggning över varje enstaka objekt i en lista. 953 00:50:02,510 --> 00:50:06,191 Där jag tar en lista och jag tar en funktion. 954 00:50:06,191 --> 00:50:08,440 Och denna funktion, naturligtvis, har en viss signatur. 955 00:50:08,440 --> 00:50:11,980 Den accepterar som en parameter dubbel och det kommer produktionen är en dubbel. 956 00:50:11,980 --> 00:50:14,310 Och hela resultatet av denna funktion kommer 957 00:50:14,310 --> 00:50:18,921 att vara en ny lista som är av typen double. 958 00:50:18,921 --> 00:50:19,420 OK? 959 00:50:19,420 --> 00:50:22,650 >> Och vad jag ska göra är att tillämpa denna funktion f 960 00:50:22,650 --> 00:50:24,960 till varje element i min lista. 961 00:50:24,960 --> 00:50:30,280 Och reply-- och ganska returnera denna nya Listan som resultat, vilket är riktigt coolt. 962 00:50:30,280 --> 00:50:31,820 Nu kan jag passerar funktioner runt. 963 00:50:31,820 --> 00:50:35,290 Och denna idé om högre ordning funktioner är verkligen viktigt. 964 00:50:35,290 --> 00:50:39,260 Och detta mapper är egentligen bara den stackars mannens genomförande 965 00:50:39,260 --> 00:50:43,130 av en funktion som är byggd in Swift kallade kartan. 966 00:50:43,130 --> 00:50:45,690 Och det gör just detta, kanske till och med lite bättre. 967 00:50:45,690 --> 00:50:48,260 >> Detta är bara en slags generisk, förenklad version som 968 00:50:48,260 --> 00:50:51,270 tillåter oss att se koncept som gäller här. 969 00:50:51,270 --> 00:50:54,630 Titta nu på det sätt som jag kan faktiskt använda min torget 970 00:50:54,630 --> 00:50:57,850 och min kub funktioner till denna lista med tal. 971 00:50:57,850 --> 00:50:58,780 Jag kör min mapper. 972 00:50:58,780 --> 00:51:00,280 Jag ger min lista över nummer till den. 973 00:51:00,280 --> 00:51:02,155 Jag ger till det den funktion som händer 974 00:51:02,155 --> 00:51:04,170 att gälla för var och en av dessa index. 975 00:51:04,170 --> 00:51:07,120 Och det kommer att bli matas ut som ett resultat. 976 00:51:07,120 --> 00:51:11,810 Och jag kommer att få se att jag har kvadrat och kubik mina nummer som följd. 977 00:51:11,810 --> 00:51:14,660 >> Och naturligtvis mapper tar någon form av anonym funktion. 978 00:51:14,660 --> 00:51:17,640 Vi kan även se att jag har skapat en ny anonym funktion som 979 00:51:17,640 --> 00:51:20,220 bara tar någon parameter och delar upp den i två. 980 00:51:20,220 --> 00:51:24,340 Och vi kan se att jag har, faktiskt, dividerat min lista med 2 istället. 981 00:51:24,340 --> 00:51:25,250 Cool? 982 00:51:25,250 --> 00:51:27,340 Så långt är allt väl? 983 00:51:27,340 --> 00:51:29,650 Okej, nu ska vi komma tillbaka till denna idé. 984 00:51:29,650 --> 00:51:36,160 Låt oss genomföra detta tillbaka samband med en betygsbok. 985 00:51:36,160 --> 00:51:41,860 >> Och om jag gör det, kan vi se att jag kan tillämpa en bred variation av dessa options-- 986 00:51:41,860 --> 00:51:44,330 eller en bred variation av dessa högre ordningens funktioner 987 00:51:44,330 --> 00:51:51,450 att faktiskt förenkla min förmåga att göra en olika saker på listor med siffror. 988 00:51:51,450 --> 00:51:53,660 Så till exempel, om jag ta en lista med tal, 989 00:51:53,660 --> 00:51:57,060 ett av de högre ordningens funktioner som existerar kallas minska. 990 00:51:57,060 --> 00:52:00,080 Vad minska gör snarare än kartan, reduceras kommer 991 00:52:00,080 --> 00:52:03,710 ta två element i listan, kommer att ta lite funktion som 992 00:52:03,710 --> 00:52:07,420 jämför de två elementen i listan, och det kommer sedan 993 00:52:07,420 --> 00:52:09,610 sorts output-- den utmatning av den funktionen 994 00:52:09,610 --> 00:52:13,790 kommer vara en annan faktor som du sedan jämföra med andra. 995 00:52:13,790 --> 00:52:18,190 >> Så du kan använda detta för att verkligen summan av talen i listan. 996 00:52:18,190 --> 00:52:20,640 Till exempel, om du hade en lista med en, två, tre, fyra, fem, 997 00:52:20,640 --> 00:52:22,940 du tar de första delarna, 1 och 2. 998 00:52:22,940 --> 00:52:27,270 Du kan ansöka till den ett tillägg funktion som tar dessa två element 999 00:52:27,270 --> 00:52:30,980 och spottar ut en av dessa delar, vilket skulle vara värdet 3. 1000 00:52:30,980 --> 00:52:35,684 Sedan tar vi det värdet 3 med nästa element i listan, summera dessa två, 1001 00:52:35,684 --> 00:52:37,100 och sedan fortsätta nedåt i listan. 1002 00:52:37,100 --> 00:52:40,410 >> Vi minska lista till ett enda värde. 1003 00:52:40,410 --> 00:52:42,700 Och det råkar vara så att plustecken 1004 00:52:42,700 --> 00:52:44,670 är en operatör, precis som vi såg bara. 1005 00:52:44,670 --> 00:52:47,500 Denna operatör faktiskt en funktion som 1006 00:52:47,500 --> 00:52:53,100 har just den här listan som vi vill, snarare dessa egenskaper 1007 00:52:53,100 --> 00:52:54,770 att vi skulle vilja. 1008 00:52:54,770 --> 00:52:56,760 Så jag uppmuntrar dig att ta en titt på detta. 1009 00:52:56,760 --> 00:52:59,290 Jag vill sortera om flytten på från några av denna kod 1010 00:52:59,290 --> 00:53:05,330 så att vi faktiskt kan titta på några faktiska, verkliga, sanna Swift i Xcode, 1011 00:53:05,330 --> 00:53:06,880 i iOS utveckling. 1012 00:53:06,880 --> 00:53:08,630 Men ta en titt på detta och se om du kan 1013 00:53:08,630 --> 00:53:11,171 analysera igenom vad som händer med några av dessa högre ordning 1014 00:53:11,171 --> 00:53:13,790 funktioner inklusive filter, minska, och du kommer även 1015 00:53:13,790 --> 00:53:17,060 se någonstans här kartan också. 1016 00:53:17,060 --> 00:53:17,910 Det är just här. 1017 00:53:17,910 --> 00:53:20,410 Om det kommer att ta en sekvens av kvaliteter och det kommer faktiskt 1018 00:53:20,410 --> 00:53:24,230 mappa dem med strömbrytaren konstruktionen, som ni kanske känner igen från C, 1019 00:53:24,230 --> 00:53:27,640 men det är faktiskt mycket mer kraftfull än omkopplaren konstruktionen 1020 00:53:27,640 --> 00:53:29,810 som vi har i C. 1021 00:53:29,810 --> 00:53:31,930 >> Och vi ska tillämpa det till varje element i listan 1022 00:53:31,930 --> 00:53:34,540 och faktiskt ge bokstaven betyget för varje 1023 00:53:34,540 --> 00:53:40,780 av dessa kvaliteter som använder alla dessa begrepp att vi bara har pratat om tidigare. 1024 00:53:40,780 --> 00:53:44,760 Nu ska kringgå för bara en minut och prata om structs. 1025 00:53:44,760 --> 00:53:49,680 Och så structs är en väntan i C som vi kunde definiera en ny typ av data. 1026 00:53:49,680 --> 00:53:53,590 Structs finns inom Swift. 1027 00:53:53,590 --> 00:53:58,980 Och så gör en massa andra konstruktioner kallade enums och klasser, som verkligen 1028 00:53:58,980 --> 00:54:01,175 ta denna idé till en helt annan nivå. 1029 00:54:01,175 --> 00:54:05,300 >> Och i grunden är det bara ett sätt att definiera en ny typ av data. 1030 00:54:05,300 --> 00:54:11,010 Så om du get-- om du kommer över klass eller structs eller enums, 1031 00:54:11,010 --> 00:54:13,290 inte får förväxlas med den. 1032 00:54:13,290 --> 00:54:16,280 Det är precis som att definiera någon ny särskild typ av data. 1033 00:54:16,280 --> 00:54:20,230 Och detta är verkligen viktigt när vi pratar om iOS applikationsutveckling 1034 00:54:20,230 --> 00:54:24,630 eftersom allt som finns inom iOS-appen 1035 00:54:24,630 --> 00:54:27,460 är i huvudsak ett föremål av något slag. 1036 00:54:27,460 --> 00:54:31,980 Och ett objekt är i grunden en klass eller en enum eller en struct. 1037 00:54:31,980 --> 00:54:34,760 >> Så i det här fallet är jag definierar en ny typ av data 1038 00:54:34,760 --> 00:54:37,740 att jag ringer bedömning det är vissa egenskaper, inklusive 1039 00:54:37,740 --> 00:54:41,040 ett namn och en sekvens av betyg. 1040 00:54:41,040 --> 00:54:43,470 Så en slags bedömning att jag kan ha i åtanke 1041 00:54:43,470 --> 00:54:44,760 skulle vara frågesporter, till exempel. 1042 00:54:44,760 --> 00:54:48,180 Jag skulle vilja ha en bedömningen som var en frågesport 1043 00:54:48,180 --> 00:54:51,460 och som hade en mängd olika kvaliteter associerad med den, för frågesport en, 1044 00:54:51,460 --> 00:54:52,840 frågesport två, så vidare och så vidare. 1045 00:54:52,840 --> 00:54:55,720 >> Eller jag kanske har en annan typ bedömning för problemsamlingar. 1046 00:54:55,720 --> 00:54:56,650 Och jag kan göra saker. 1047 00:54:56,650 --> 00:54:59,860 Jag kan faktiskt ha funktioner inom denna typ 1048 00:54:59,860 --> 00:55:02,645 av data, som nu kallas metoder. 1049 00:55:02,645 --> 00:55:04,520 Så om du någonsin ser Ordet metod, det är verkligen 1050 00:55:04,520 --> 00:55:08,190 är bara en funktion som är tillämplig till en mycket specifik klass, 1051 00:55:08,190 --> 00:55:10,100 eller till en mycket specifik typ av data. 1052 00:55:10,100 --> 00:55:12,350 Det ger oss möjlighet att ändra data inom. 1053 00:55:12,350 --> 00:55:15,510 >> Så med andra ord, om jag vill lägga till en klass till min bedömning, 1054 00:55:15,510 --> 00:55:18,630 så allt jag behöver göra är att bifoga betyget som matades in 1055 00:55:18,630 --> 00:55:22,660 till denna funktion min interna egendom. 1056 00:55:22,660 --> 00:55:25,880 Det finns en annan snygg konstruktion här i Swift, som är här dot dot dot 1057 00:55:25,880 --> 00:55:31,780 operatör, vilket innebär att poängen kan nu acceptera någon antal heltal. 1058 00:55:31,780 --> 00:55:33,940 Och poängen kommer att bli en array av heltal som 1059 00:55:33,940 --> 00:55:39,030 har gått till min funktion, vilket betyder att jag kan göra saker som denna. 1060 00:55:39,030 --> 00:55:42,360 >> Jag kan göra lägga kvaliteter och bara ge godtyckliga nummer av heltal in i den 1061 00:55:42,360 --> 00:55:47,420 och faktiskt tillhandahållas en array av dessa värden i min funktion 1062 00:55:47,420 --> 00:55:50,270 eller i mitt förfarande, såsom är fallet. 1063 00:55:50,270 --> 00:55:54,040 Nu är detta viktigt eftersom allt i Xcode, allt i iOS, 1064 00:55:54,040 --> 00:55:56,250 är i själva verket ett objekt. 1065 00:55:56,250 --> 00:55:59,630 Så ha det i åtanke när vi byst öppen Xcode 1066 00:55:59,630 --> 00:56:04,890 och hoppa framåt bortom iOS versioner två och tre 1067 00:56:04,890 --> 00:56:08,820 och faktiskt gå vidare till version fyra. 1068 00:56:08,820 --> 00:56:11,940 >> Och återigen, allt detta kommer läggas ut på seminariet sidan. 1069 00:56:11,940 --> 00:56:16,980 iOS fyra är slags ett fullskaligt genomförande av en mycket grundläggande app. 1070 00:56:16,980 --> 00:56:23,920 Och vad denna app gör är det laddar ett UI, som ser ut så här. 1071 00:56:23,920 --> 00:56:28,680 Återigen, om vi klickar på storyboard kan vi se att detta är vad det ser ut. 1072 00:56:28,680 --> 00:56:31,320 Detta är UI. 1073 00:56:31,320 --> 00:56:33,676 Den har en titel högst upp. 1074 00:56:33,676 --> 00:56:34,800 Jag har kallat det webbgalleri. 1075 00:56:34,800 --> 00:56:38,400 >> I mitten finns det ett element kallas UI bild vyn. 1076 00:56:38,400 --> 00:56:41,340 Och i botten finns det en verktygsfält med en enda knapp som 1077 00:56:41,340 --> 00:56:46,850 har stretch utrymmen som gör att den centrum mitt i detta verktygsfält. 1078 00:56:46,850 --> 00:56:51,780 Och vad som händer är att när detta laster det hämtar ett JSON fil som är 1079 00:56:51,780 --> 00:56:55,540 som finns på en server på andra håll, tolkar att JSON fil, 1080 00:56:55,540 --> 00:56:58,130 och JSON-filen ser lite ut så här. 1081 00:56:58,130 --> 00:57:02,770 1082 00:57:02,770 --> 00:57:06,230 JSON-filen ser ut så här. 1083 00:57:06,230 --> 00:57:08,650 Där är det. 1084 00:57:08,650 --> 00:57:11,730 >> Den har ett albumnamn och den har en rad bilder. 1085 00:57:11,730 --> 00:57:13,490 Var och en av dessa bilder har ett namn och även 1086 00:57:13,490 --> 00:57:19,460 en webbadress själva som representerar jpeg version av den individuella foto. 1087 00:57:19,460 --> 00:57:24,780 Så vad händer är att när det här programmet laster, hämtar det JSON fil, 1088 00:57:24,780 --> 00:57:30,590 tolkar det, sätter allt detta i motsvarigheten till en array i iOS 1089 00:57:30,590 --> 00:57:33,020 app utveckling, vilket är en nsarray. 1090 00:57:33,020 --> 00:57:37,520 Och då kan jag sedan ladda dessa data till ett program 1091 00:57:37,520 --> 00:57:41,100 och ladda den på min skärm. 1092 00:57:41,100 --> 00:57:44,760 >> Det är en bild som lästs med knappen längst ner. 1093 00:57:44,760 --> 00:57:49,190 Om jag klickar på Hämta Nästa bild, det då drar den bilden från internet 1094 00:57:49,190 --> 00:57:53,370 och ersätter den bilden i UI bild vyn. 1095 00:57:53,370 --> 00:57:57,820 Så du kan ladda ner och faktiskt ta en titt på det på din dator. 1096 00:57:57,820 --> 00:58:00,940 Och bygga den och faktiskt sammanställa den på din enhet. 1097 00:58:00,940 --> 00:58:04,710 Men i grunden processen var detta, skapa storyboard-- 1098 00:58:04,710 --> 00:58:08,080 eller snarare inte create-- men välj storyboard. 1099 00:58:08,080 --> 00:58:15,030 Och faktiskt we'll-- om du inte mind-- vi tar bara ett par sekunder 1100 00:58:15,030 --> 00:58:18,390 att faktiskt visa dig hur detta gjordes. 1101 00:58:18,390 --> 00:58:22,430 1102 00:58:22,430 --> 00:58:27,820 >> Bara så att hur vi kan faktiskt uppnå detta är gjort lite mer 1103 00:58:27,820 --> 00:58:28,360 uppenbara. 1104 00:58:28,360 --> 00:58:30,651 En bild ansökan, jag är kommer att kalla detta seminarium 1105 00:58:30,651 --> 00:58:35,330 fyra representerar denna särskilt nummer. 1106 00:58:35,330 --> 00:58:36,335 Spara den på skrivbordet. 1107 00:58:36,335 --> 00:58:39,890 1108 00:58:39,890 --> 00:58:42,110 OK, kommer att klicka på storyboard. 1109 00:58:42,110 --> 00:58:47,030 Och vad jag ska göra är att hitta min bild uppfattning, 1110 00:58:47,030 --> 00:58:50,940 drar den till mitt användarnamn gränssnitt och centrera den. 1111 00:58:50,940 --> 00:58:54,850 Nu är det bara centre det tyvärr kommer inte att göra en hel del, 1112 00:58:54,850 --> 00:58:58,680 med undantag för en skärm som är denna specifika storlek. 1113 00:58:58,680 --> 00:59:03,950 >> Så vi kan övertyga oss själva om att genom klicka på denna dubbla cirkeln sak, 1114 00:59:03,950 --> 00:59:08,290 att få ner det här pop menyn här och ändra 1115 00:59:08,290 --> 00:59:11,110 att förhandsgranska, där vi ska faktiskt får en chans att förhandsgranska hur 1116 00:59:11,110 --> 00:59:13,530 Detta kommer faktiskt titta på andra enheter. 1117 00:59:13,530 --> 00:59:16,500 Som vi kan se har vi inte ens se det på detta fall. 1118 00:59:16,500 --> 00:59:18,500 Så jag kommer att stänga detta för nu. 1119 00:59:18,500 --> 00:59:22,100 >> Och jag kommer att välja denna ikon nere vid mycket 1120 00:59:22,100 --> 00:59:23,910 nedre delen av skärmen. 1121 00:59:23,910 --> 00:59:26,584 Den säger Lösa Auto Layout Frågor. 1122 00:59:26,584 --> 00:59:28,000 Tyvärr, det avskurna i botten. 1123 00:59:28,000 --> 00:59:36,360 Men om jag klickar på det, vad jag får denna pop up-- försvinna. 1124 00:59:36,360 --> 00:59:39,740 1125 00:59:39,740 --> 00:59:51,220 Vad jag får är denna pop up som gör att jag kan lägga saknade begränsningar. 1126 00:59:51,220 --> 00:59:53,780 Och genom att göra att det kommer då sorts lås 1127 00:59:53,780 --> 00:59:56,640 in i centrumdelen av skärm som jag kan förvänta sig. 1128 00:59:56,640 --> 01:00:00,520 >> Nu för att få den här knappen på ovanpå det, jag behöver gå till redaktören. 1129 01:00:00,520 --> 01:00:05,010 Gå till Bädda in och klicka Navigation Controller. 1130 01:00:05,010 --> 01:00:08,900 Vad det kommer att göra är som kommer att lägga Detta helt annan komponent till den, 1131 01:00:08,900 --> 01:00:11,310 men den kommer faktiskt att länka det tillbaka till min ursprungliga UI. 1132 01:00:11,310 --> 01:00:14,450 Och detaljerna, återigen, gör vi inte verkligen behöver bry sig om just nu. 1133 01:00:14,450 --> 01:00:16,710 Men jag vill ha en verktygsfältet längst ner. 1134 01:00:16,710 --> 01:00:18,530 Så jag ska kolla Shower Toolbar. 1135 01:00:18,530 --> 01:00:21,870 >> Och detta ger i min mening, som nu är någon annanstans, 1136 01:00:21,870 --> 01:00:23,900 Vi kan se det länkas hit. 1137 01:00:23,900 --> 01:00:28,710 Den ger nu ett verktygsfält i botten av mitt UI. 1138 01:00:28,710 --> 01:00:34,770 Så nu, istället för att välja en bild uppfattning kan jag hitta en etikett, 1139 01:00:34,770 --> 01:00:41,140 eller snarare en toolbar-- låt oss se, var är det? 1140 01:00:41,140 --> 01:00:41,890 Vad kallas det? 1141 01:00:41,890 --> 01:00:49,760 En button-- post bar-- item-- sorry-- bar knappen post. 1142 01:00:49,760 --> 01:00:54,590 Plop att det och tillämpa ett par av flexibla utrymmen på vardera sidan 1143 01:00:54,590 --> 01:00:57,429 att faktiskt centrera det. 1144 01:00:57,429 --> 01:00:58,970 Så nu har jag skapat min UI, i princip. 1145 01:00:58,970 --> 01:01:01,428 Och jag kan ge det ett namn genom att dubbelklicka högst upp 1146 01:01:01,428 --> 01:01:04,880 här och säga webbgalleri och så vidare. 1147 01:01:04,880 --> 01:01:08,100 Nu igen, dessa är element som existerar av sig själva. 1148 01:01:08,100 --> 01:01:10,400 Och jag måste ansluta dem till min kod som 1149 01:01:10,400 --> 01:01:14,297 Jag kan göra genom att återigen föra upp denna dubbla cirkel ikon, 1150 01:01:14,297 --> 01:01:15,380 byte från förhandsgranskningen. 1151 01:01:15,380 --> 01:01:18,950 Vilket, förresten, nu kan vi se är fint centrerad och kommer att se bra 1152 01:01:18,950 --> 01:01:23,720 på en mängd olika enheter. 1153 01:01:23,720 --> 01:01:27,280 >> Växla till automatiskt, vilket kommer få upp ViewController koden. 1154 01:01:27,280 --> 01:01:29,030 Och nu denna del är viktig. 1155 01:01:29,030 --> 01:01:34,590 För att ansluta dessa två element, din kod till UI, 1156 01:01:34,590 --> 01:01:36,680 du välja det objekt som du vill ansluta. 1157 01:01:36,680 --> 01:01:39,570 Så i det här fallet, vi faktiskt vill koda 1158 01:01:39,570 --> 01:01:43,520 ändra bilden som är inne inom denna UI bild uppfattning. 1159 01:01:43,520 --> 01:01:47,070 Så om du styra klicka från bild vyn och dra, 1160 01:01:47,070 --> 01:01:51,960 du kommer att märka att du får en liten bar, när du släpper allt detta pop 1161 01:01:51,960 --> 01:01:53,550 upp kommer att inträffa. 1162 01:01:53,550 --> 01:01:56,470 >> Och det står att vi kommer skapa en anslutning. 1163 01:01:56,470 --> 01:01:59,300 Och härifrån jag vill ge det ett namn, något som galleri. 1164 01:01:59,300 --> 01:02:00,240 Hit Enter. 1165 01:02:00,240 --> 01:02:03,040 Och detta faktiskt ger en variabel som kallas galleri 1166 01:02:03,040 --> 01:02:08,600 att jag sedan kan referera i min kod ändra bilden, till exempel. 1167 01:02:08,600 --> 01:02:10,430 Så hur den koden egentligen ser? 1168 01:02:10,430 --> 01:02:13,030 Tja igen, jag vill inte att spenderar för mycket tid på det. 1169 01:02:13,030 --> 01:02:15,430 Och jag uppmuntrar dig att ladda ner den och ta en titt. 1170 01:02:15,430 --> 01:02:18,330 Men en av de mest viktig aspekt är koden 1171 01:02:18,330 --> 01:02:20,980 som faktiskt hämtar en bild. 1172 01:02:20,980 --> 01:02:26,470 >> Så i det här fallet vill jag att komma inom mina foton 1173 01:02:26,470 --> 01:02:28,520 array, som finns inom min klass. 1174 01:02:28,520 --> 01:02:33,390 Jag vill ange namn och URL som blivit analyserad ur denna JSON. 1175 01:02:33,390 --> 01:02:39,810 Egentligen be enheten för att få URL, att hämta webbadressen från detta, 1176 01:02:39,810 --> 01:02:44,060 och sedan hämta data från innehållet i den webbadressen. 1177 01:02:44,060 --> 01:02:49,430 Konvertera sedan dessa data till en bild genom att den leds in i UI bilden. 1178 01:02:49,430 --> 01:02:52,880 Så återigen, dessa är alla olika typer av föremål, olika typer av klasser. 1179 01:02:52,880 --> 01:02:58,410 >> Och då kan jag sedan ställa min gallery.image lika med uppgifter. 1180 01:02:58,410 --> 01:03:00,750 Och det är typ av kött av det som faktiskt är sedan 1181 01:03:00,750 --> 01:03:08,250 kunna ändra data from-- förändring bilden från ett till nästa. 1182 01:03:08,250 --> 01:03:10,660 Så återigen, förhoppningsvis nu en hel del av konstruktionerna 1183 01:03:10,660 --> 01:03:12,240 kommer att göra en lite mer meningsfullt. 1184 01:03:12,240 --> 01:03:15,260 Lägg märke till att det finns en del utropstecken här. 1185 01:03:15,260 --> 01:03:19,810 De utropstecken är huvudsak relaterade till optionals. 1186 01:03:19,810 --> 01:03:22,657 >> Vad jag i grunden säger är att utan att även kontrollera 1187 01:03:22,657 --> 01:03:24,490 för att se om det finns data som inom detta valfria, 1188 01:03:24,490 --> 01:03:27,140 Jag ska gå vidare och anta att det finns och packa det. 1189 01:03:27,140 --> 01:03:31,340 Kom ihåg att vi använde analogi typ av en förpackning för optionals 1190 01:03:31,340 --> 01:03:34,700 och vi måste packa upp paketet och dra ut data. 1191 01:03:34,700 --> 01:03:37,570 Utropstecknet krafter som faktiskt händer. 1192 01:03:37,570 --> 01:03:39,590 >> Men jag vet att det här är säker eftersom jag kollade 1193 01:03:39,590 --> 01:03:42,070 för att se om bilddata är lika till noll, har jag faktiskt kolla 1194 01:03:42,070 --> 01:03:45,420 att se om det valfria var i själva verket misslyckades. 1195 01:03:45,420 --> 01:03:47,110 Om det hade faktiskt misslyckats redan. 1196 01:03:47,110 --> 01:03:52,450 Och så jag är säker på att när jag kommer till detta punkten kan jag säkert packa dessa data. 1197 01:03:52,450 --> 01:03:55,710 Du kan även se det i i form av ett frågetecken. 1198 01:03:55,710 --> 01:03:59,100 Så om vi bläddra ner till där jag behöver verkligen analysera data. 1199 01:03:59,100 --> 01:04:01,850 >> Så bli inte avskräckt av denna typ av långa namn. 1200 01:04:01,850 --> 01:04:06,580 Du kan hitta i Apple utvecklare webbplats mycket 1201 01:04:06,580 --> 01:04:09,620 av referenser till alla de objekt och alla processer 1202 01:04:09,620 --> 01:04:11,170 som faktiskt gör detta möjligt. 1203 01:04:11,170 --> 01:04:15,990 Men märker att detta är i huvudsak en funktion där jag ge det några uppgifter. 1204 01:04:15,990 --> 01:04:18,410 Och jag får tillbaka något slags uppgifter. 1205 01:04:18,410 --> 01:04:24,190 Och jag behöver använda detta som sökord för att omvandla den till denna nsdictionary? 1206 01:04:24,190 --> 01:04:26,490 Vilket återigen, en valfritt nsdictionary. 1207 01:04:26,490 --> 01:04:31,070 Vilket jag behöver sedan kontrollera om den finns. 1208 01:04:31,070 --> 01:04:37,130 >> Så jag kan använda att om låt framgångsrika jämlikar tolkas, 1209 01:04:37,130 --> 01:04:40,620 då vet jag att det valfria innehåller faktiskt en del data. 1210 01:04:40,620 --> 01:04:43,840 Eller vad jag gjorde här var att bara anta att om det 1211 01:04:43,840 --> 01:04:49,067 fanns inga fel att det är faktiskt säker. 1212 01:04:49,067 --> 01:04:51,400 Okej, jag vill tacka er alla så mycket för att ni kom. 1213 01:04:51,400 --> 01:04:53,540 Jag vet att detta var en hel del, men det var bara en timme 1214 01:04:53,540 --> 01:04:55,920 att tala om några ganska avancerad grejer. 1215 01:04:55,920 --> 01:04:59,640 Och så förhoppningsvis får du en chans att hämta all kod 1216 01:04:59,640 --> 01:05:01,657 och ta en bättre, mer grundlig titt på det. 1217 01:05:01,657 --> 01:05:04,240 Sorts övertyga dig själv om alla av de saker som händer. 1218 01:05:04,240 --> 01:05:06,800 Och jag vill tacka er allt, återigen, för att ni kom. 1219 01:05:06,800 --> 01:05:08,760 Och lycka till med dina slutprojekt. 1220 01:05:08,760 --> 01:05:10,600 Ha en bra dag. 1221 01:05:10,600 --> 01:05:11,467