1 00:00:00,000 --> 00:00:03,332 >> [Musik spiller] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DAN AMRMENDARIZ: Alle, velkommen til CS50 seminaret, 4 00:00:09,590 --> 00:00:11,690 iOS App Udvikling med Swift. 5 00:00:11,690 --> 00:00:15,690 Jeg er Dan Armendariz, og jeg er en preceptor af datalogi her på Harvard. 6 00:00:15,690 --> 00:00:21,510 >> Og den næste time vil være en hurtig rundvisning i så meget stuff 7 00:00:21,510 --> 00:00:25,160 om dette emne, som vi kan passe. 8 00:00:25,160 --> 00:00:29,170 Jeg vil sende alle kildekoden at du vil se i dag online. 9 00:00:29,170 --> 00:00:31,990 Vi kan ikke være i stand til at faktisk gå over alt 10 00:00:31,990 --> 00:00:34,810 at jeg er, at jeg er viser dig i denne time. 11 00:00:34,810 --> 00:00:37,580 Men i det mindste forhåbentlig gennem bemærkningerne fra kildekoden, 12 00:00:37,580 --> 00:00:40,830 vil du være i stand til at forsøge at regne ud, hvad præcis sker efter disse ting 13 00:00:40,830 --> 00:00:42,950 at vi ikke helt komme til. 14 00:00:42,950 --> 00:00:46,970 >> Generelt struktur dagens snak vil være som følger. 15 00:00:46,970 --> 00:00:52,820 Vi starter ud at gøre nogle grundlæggende syntaks med Swift sprog, 16 00:00:52,820 --> 00:00:56,290 gå ind i nogle af de mere avancerede syntaksen for Swift sprog. 17 00:00:56,290 --> 00:00:59,560 Fordi sproget er virkelig moderne og det 18 00:00:59,560 --> 00:01:02,110 har en masse højt funktioner, ting, som vi ikke har 19 00:01:02,110 --> 00:01:06,600 ses i C hele CS50 eller Selv nogle af de andre sprog 20 00:01:06,600 --> 00:01:09,310 at vi har startet hjælp i CS50 som PHP, 21 00:01:09,310 --> 00:01:12,670 så jeg nødt til at forsøge at introducere også nogle emner, 22 00:01:12,670 --> 00:01:18,580 er relateret til højere sprog niveau at du ikke kan se i dybden i CS50, 23 00:01:18,580 --> 00:01:21,380 men du vil se i senere datalogi klasser. 24 00:01:21,380 --> 00:01:25,290 Så det vil være en tætpakkede time. 25 00:01:25,290 --> 00:01:28,897 Og er du velkommen til at lade mig vide, hvis du har spørgsmål. 26 00:01:28,897 --> 00:01:30,730 Så hvis du er interesseret i at gøre udviklingen 27 00:01:30,730 --> 00:01:34,442 med Swift, eller virkelig enhver iOS App udvikling, 28 00:01:34,442 --> 00:01:35,900 der er et par krav. 29 00:01:35,900 --> 00:01:39,940 Først og fremmest, er du nødt til at bruge en Mac, der kører i eksemplerne 30 00:01:39,940 --> 00:01:43,880 at vi skal bruge i dag, en forholdsvis ny version af OS 31 00:01:43,880 --> 00:01:46,580 X. I dette tilfælde, jeg kører X 10.5. 32 00:01:46,580 --> 00:01:48,600 Du kan køre 10.11, hvis du ønsker. 33 00:01:48,600 --> 00:01:52,430 Men alt, hvad du kommer til at se er at inddrage Xcode 7 og senere, 34 00:01:52,430 --> 00:01:56,271 som har den nyeste version Swift, som er Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Dette er faktisk en temmelig vigtig forskel. 36 00:01:58,270 --> 00:02:01,510 En masse af syntaksen har ændret temmelig markant 37 00:02:01,510 --> 00:02:05,890 i nogle tilfælde fra Swift 1,0, som blev udgivet sidste år, 38 00:02:05,890 --> 00:02:08,514 til Swift 2.0, som bare kom ud dette efterår. 39 00:02:08,514 --> 00:02:09,889 Så vi kommer til at vise Swift 2.0. 40 00:02:09,889 --> 00:02:13,020 En masse af de ting, du søge efter online 41 00:02:13,020 --> 00:02:18,040 når du forsøger at få yderligere oplysninger om en lang række ting, 42 00:02:18,040 --> 00:02:20,710 kan du eksplicit søge efter Swift 2 43 00:02:20,710 --> 00:02:24,950 snarere end blot almindelig gamle Swift til at gøre sikker på, at du får den syntaks korrekt. 44 00:02:24,950 --> 00:02:26,920 >> I virkeligheden er dette generelt rigtigt. 45 00:02:26,920 --> 00:02:31,210 Der er en hurtig mængde udvikling sker i Swift sprog 46 00:02:31,210 --> 00:02:35,110 lige siden Apple frigivet den, tror jeg hvad, det har været lidt over et år 47 00:02:35,110 --> 00:02:36,370 nu. 48 00:02:36,370 --> 00:02:39,080 Og tingene har ændret sig dramatisk i tid. 49 00:02:39,080 --> 00:02:42,160 Og så ikke være frustreret Hvis, når du søger rundt 50 00:02:42,160 --> 00:02:48,310 for emner på Swift eller hvordan du gør noget ved hjælp af nogle eksempel kode 51 00:02:48,310 --> 00:02:51,210 eller noget, der det ikke faktisk arbejde på Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Sørg for at du er på udkig specielt til denne version 53 00:02:53,790 --> 00:02:58,690 for at forsøge at minimere virkningerne af forskellige versioner og den slags ting. 54 00:02:58,690 --> 00:03:02,470 >> Jeg vil prøve at påpege bare nogle ting som er anderledes end ældre versioner. 55 00:03:02,470 --> 00:03:03,970 Men det er noget at holde øje med. 56 00:03:03,970 --> 00:03:06,770 Det er sandsynligvis kommer til at være en af ​​de største hovedpine 57 00:03:06,770 --> 00:03:11,010 at du vil have med Swift er at finde eksempel kode, der er ældre, bare 58 00:03:11,010 --> 00:03:14,050 af et par måneder, forsøger at bruge det i din mere moderne projekt. 59 00:03:14,050 --> 00:03:15,430 Og det simpelthen ikke virker. 60 00:03:15,430 --> 00:03:18,530 Du får compiler fejl, syntaks fejl, alle mulige skøre ting. 61 00:03:18,530 --> 00:03:21,580 Så bare være tålmodig med at, og du vil forhåbentlig 62 00:03:21,580 --> 00:03:24,200 har en temmelig god oplevelse med Swift samlet. 63 00:03:24,200 --> 00:03:28,430 >> Nu kan du faktisk join-- og jeg håber vi faktisk stadig har denne denne year-- 64 00:03:28,430 --> 00:03:30,910 CS 50 s Apple App udviklingsteam, som 65 00:03:30,910 --> 00:03:34,680 vil give dig mulighed for at installere eventuelle apps som du opretter på dine iOS-enheder. 66 00:03:34,680 --> 00:03:39,190 Så tag et kig på denne webadresse, hvis du er interesseret i at gøre det. 67 00:03:39,190 --> 00:03:41,450 >> Så blot et par ting om Swift selv. 68 00:03:41,450 --> 00:03:43,580 Det er en kompileret sprog. 69 00:03:43,580 --> 00:03:45,870 Men du vil se, at nogle af de funktioner, som vi bruger 70 00:03:45,870 --> 00:03:50,650 Lad det også anvendes i en smule som et fortolket måde også. 71 00:03:50,650 --> 00:03:56,350 >> En masse af syntaksen er lånt fra C. Det er baseret og skrevet i C. 72 00:03:56,350 --> 00:04:00,400 Og så vil vi se, at der er en masse af grillbarer 73 00:04:00,400 --> 00:04:04,450 fra din eksisterende viden fra C, som vi kan havn til Swift. 74 00:04:04,450 --> 00:04:07,290 >> Men der er ting, gør det meget forskelligt fra C. 75 00:04:07,290 --> 00:04:08,860 Det er meget stærkt skrevet. 76 00:04:08,860 --> 00:04:10,380 Der er automatisk styring af hukommelse. 77 00:04:10,380 --> 00:04:13,170 Du kommer ikke til at have til bruge malloc eller gratis overalt. 78 00:04:13,170 --> 00:04:15,110 Den er designet til generalitet. 79 00:04:15,110 --> 00:04:19,480 Så med andre ord, kan du bruge det i alle mulige sammenhænge, ​​fra Apple Watch 80 00:04:19,480 --> 00:04:26,290 til iPhone hele vejen op til OS X, og endda nogle servere, endda nogle scripting. 81 00:04:26,290 --> 00:04:28,400 Men vi vil se, at det støtte til scripting 82 00:04:28,400 --> 00:04:31,360 er endnu ikke helt der som det er i andre sprog. 83 00:04:31,360 --> 00:04:34,930 Så mest sandsynligt vil du være at bruge dette udelukkende til udvikling 84 00:04:34,930 --> 00:04:37,060 på din Mac eller din iPhone. 85 00:04:37,060 --> 00:04:40,150 >> Og det har en masse moderne funktioner. 86 00:04:40,150 --> 00:04:43,380 Og en masse af disse ting er ting, vi vil forsøge at løse i dag, 87 00:04:43,380 --> 00:04:47,590 men også vores emner, der helt ærligt, vi kan afsætte hele kurser. 88 00:04:47,590 --> 00:04:50,140 Faktisk CS 51, som er tilbudt næste semester, 89 00:04:50,140 --> 00:04:53,990 fokuserer meget på disse emner der er beskrevet nedenfor. 90 00:04:53,990 --> 00:04:56,781 Så du kan bruge et helt semester forstå disse ting. 91 00:04:56,781 --> 00:04:58,530 Men vi vil prøve at komme igennem dem 92 00:04:58,530 --> 00:05:00,800 mindst nok, at du kan forstå, hvad der er 93 00:05:00,800 --> 00:05:03,700 foregår, når du ser ved en Swift program 94 00:05:03,700 --> 00:05:07,310 og være i stand til at hacke din vej igennem det for det endelige projekt. 95 00:05:07,310 --> 00:05:10,780 >> Nu er en af ​​de bedste måder, du kan få yderligere oplysninger om dette 96 00:05:10,780 --> 00:05:14,700 er ærligt talt blot gennem Apples forudsat dokumentation for Swift. 97 00:05:14,700 --> 00:05:16,930 Der er en masse API'er der er tilgængelige. 98 00:05:16,930 --> 00:05:21,170 Og det er en god base for dig at kigge efter specifikke ting, som du 99 00:05:21,170 --> 00:05:23,020 ønsker at gøre med en API, der involverer iOS. 100 00:05:23,020 --> 00:05:26,350 Hvis du vil bruge kameraet til eksempel, kan du begynde at kigge her, 101 00:05:26,350 --> 00:05:32,540 og også bruge Google og Stack Overløb som du normalt ville. 102 00:05:32,540 --> 00:05:36,670 >> Eventuelle spørgsmål vedrørende denne før vi hoppe ret i? 103 00:05:36,670 --> 00:05:37,880 Okay. 104 00:05:37,880 --> 00:05:38,700 Lad os gå videre. 105 00:05:38,700 --> 00:05:42,620 >> Så først, jeg har en antal eksempel filer. 106 00:05:42,620 --> 00:05:46,040 Og jeg har tænkt mig at forsøge at træde gennem dem relativt hurtigt. 107 00:05:46,040 --> 00:05:49,190 Dette er den Hello World fil til Swift. 108 00:05:49,190 --> 00:05:51,050 Det er meget simpelt. 109 00:05:51,050 --> 00:05:54,360 Der er måde flere kommentarer end der er faktiske kode. 110 00:05:54,360 --> 00:05:57,100 Bemærk den faktiske code er ved selve bunden på linje 14. 111 00:05:57,100 --> 00:05:57,980 Der står print. 112 00:05:57,980 --> 00:05:59,820 Og så er det en funktion opkald. 113 00:05:59,820 --> 00:06:03,010 Vi passerer ind i det en snor kaldet Hello CS50. 114 00:06:03,010 --> 00:06:04,750 Bemærk, at der er ingen semikoloner. 115 00:06:04,750 --> 00:06:07,010 Bemærk, at der ikke er nogen int main. 116 00:06:07,010 --> 00:06:10,392 Der er ingen af ​​de cruft som vi havde med C. 117 00:06:10,392 --> 00:06:15,020 Når vi bruger Swift på denne måde, som er lige skrevet i en tekstfil 118 00:06:15,020 --> 00:06:18,340 og lagres på min computer, så Jeg kan kompilere den og køre den. 119 00:06:18,340 --> 00:06:20,920 >> Bemærk, at her er jeg ikke bruger CS50 IDE. 120 00:06:20,920 --> 00:06:24,460 Dette forudsætter, at jeg er kører, og at jeg er på OS X, 121 00:06:24,460 --> 00:06:27,870 og at jeg har Xcode allerede installeret på denne maskine for at denne 122 00:06:27,870 --> 00:06:29,080 faktisk funktion. 123 00:06:29,080 --> 00:06:33,349 Men dette er blot en almindelig tekstfil at vi så kan kompilere og redigere. 124 00:06:33,349 --> 00:06:34,890 Så lad os se, hvordan det rent faktisk virker. 125 00:06:34,890 --> 00:06:37,430 Hvad hvis jeg ønsker at kompilere det? 126 00:06:37,430 --> 00:06:40,450 swiftc 1.swift. 127 00:06:40,450 --> 00:06:42,960 Efter et øjeblik eller to, det vil se, at vi nu har 128 00:06:42,960 --> 00:06:45,360 kompileret dette i en fil kaldet 1. 129 00:06:45,360 --> 00:06:51,090 Og nu har vi trykt vores CS50, vores Hello World program snarere. 130 00:06:51,090 --> 00:06:54,690 >> Læg mærke til en anden ting, som godt, er, at som standard, 131 00:06:54,690 --> 00:07:00,090 vi havde ikke at indtaste a / n for at udskrive en ny linje. 132 00:07:00,090 --> 00:07:05,315 Som standard print-funktionen i Swift vil udskrive en ny linje for dig. 133 00:07:05,315 --> 00:07:09,284 Du kan passere en valgfri ekstra parameter for at fortælle det ikke at gøre det. 134 00:07:09,284 --> 00:07:10,950 Men Google for mere information om det. 135 00:07:10,950 --> 00:07:13,450 Som standard, vil det gøre de trykte linje. 136 00:07:13,450 --> 00:07:16,420 >> Okay, så lad os gå videre derefter til nogle andre ting. 137 00:07:16,420 --> 00:07:18,620 Så hvordan kan vi faktisk definere variabler? 138 00:07:18,620 --> 00:07:21,960 Vi kan gøre det er at bruge en af ​​to metoder. 139 00:07:21,960 --> 00:07:26,122 Og den, som jeg vil gerne fortælle dig om første er dette lad definition. 140 00:07:26,122 --> 00:07:27,830 Og det er vigtigt fordi effektivt 141 00:07:27,830 --> 00:07:30,240 hvad vi laver, er at definere en konstant. 142 00:07:30,240 --> 00:07:34,010 Vi vil oprette en variabel, eller rettere en konstant kaldes navn, 143 00:07:34,010 --> 00:07:38,200 give det nogle data-- i dette tilfælde strengen Dan. 144 00:07:38,200 --> 00:07:40,630 Men ved at bruge denne lad søgeord, siger vi 145 00:07:40,630 --> 00:07:43,860 at dette variable-- eller igen constant-- kaldes 146 00:07:43,860 --> 00:07:46,220 Navnet er aldrig vil blive ændret. 147 00:07:46,220 --> 00:07:50,120 Det kommer til at være uforanderlige hele varigheden af ​​dette program 148 00:07:50,120 --> 00:07:53,100 eller hele varighed forbindelse 149 00:07:53,100 --> 00:07:55,390 at denne variabel er tilgængelig. 150 00:07:55,390 --> 00:08:00,096 >> Dette er virkelig vigtigt, at når du har nogle data, der ikke 151 00:08:00,096 --> 00:08:02,970 kommer til at ændre i dit program, og du vil se en række eksempler 152 00:08:02,970 --> 00:08:06,790 om, når vi ønsker at bruge Lad versus den anden syntaks, 153 00:08:06,790 --> 00:08:11,040 Det er vigtigt, at du bruger lad hvor det er muligt, fordi denne Meddeler 154 00:08:11,040 --> 00:08:13,740 det sprog, det er ikke kommer til at blive ændret, 155 00:08:13,740 --> 00:08:16,590 og det kan rent faktisk udfører en masse optimeringer 156 00:08:16,590 --> 00:08:19,560 at forbedre hastigheden og sikkerheden af ​​dit program. 157 00:08:19,560 --> 00:08:24,480 Og ved sikkerheden, mener jeg ikke lade Det nedbrud med skøre fejl 158 00:08:24,480 --> 00:08:27,910 at vi kunne være vant til at se i C. 159 00:08:27,910 --> 00:08:32,460 >> Så kan vi bruge strengen interpolation at indkapsle dette inden for en streng. 160 00:08:32,460 --> 00:08:35,200 Så vi kan se i dette print linje, udskrive hej, 161 00:08:35,200 --> 00:08:38,950 og derefter bruge omvendt skråstreg åbne parens, og derefter navnet på min variable, 162 00:08:38,950 --> 00:08:41,809 i dette tilfælde konstant, lukke parentes. 163 00:08:41,809 --> 00:08:46,400 Jeg væsentlige derefter sætte Indholdet af denne variabel kaldet navn 164 00:08:46,400 --> 00:08:50,240 inde i strengen, og derefter udskrivning resultatet der. 165 00:08:50,240 --> 00:08:54,070 >> Der er en anden ændring til denne fil som er, at jeg har, helt i top, 166 00:08:54,070 --> 00:08:57,340 sat i en shebang linje, der dybest set blot specificerer 167 00:08:57,340 --> 00:09:00,180 at jeg ønsker at bruge Swift tolk, som 168 00:09:00,180 --> 00:09:04,190 betyder, at jeg ikke længere behøver at kompilere dette program. 169 00:09:04,190 --> 00:09:06,567 Jeg kan bare køre det som sit eget manuskript. 170 00:09:06,567 --> 00:09:09,400 Men det er i dette tilfælde, bag scenerne bliver kompileret og derefter 171 00:09:09,400 --> 00:09:10,030 køres. 172 00:09:10,030 --> 00:09:13,540 Det er bare usynlige for os. 173 00:09:13,540 --> 00:09:15,880 >> Okay, så lad os komme videre. 174 00:09:15,880 --> 00:09:19,650 Så der er lidt af fup der lige er sket før. 175 00:09:19,650 --> 00:09:23,230 Jeg viste dig, at jeg kunne definere en konstant. 176 00:09:23,230 --> 00:09:25,490 Og jeg kunne give nogle oplysninger til at gøre det. 177 00:09:25,490 --> 00:09:29,240 Men i dette tilfælde, bemærke, at jeg ikke faktisk specificere den type data 178 00:09:29,240 --> 00:09:29,820 at det er. 179 00:09:29,820 --> 00:09:32,780 Og det er fordi compiler, kan Swift 180 00:09:32,780 --> 00:09:36,910 udlede den type data blot baseret på de data, jeg har lagt i den. 181 00:09:36,910 --> 00:09:41,760 Fordi det ved, at ved at vurdere denne variabel lige her, disse data ret 182 00:09:41,760 --> 00:09:43,370 her, det ved, at det er en streng. 183 00:09:43,370 --> 00:09:48,690 Og så denne konstante navn er derfor kommer til at være en streng som godt. 184 00:09:48,690 --> 00:09:52,730 >> Men vi kan også være eksplicit om den type, der er 185 00:09:52,730 --> 00:09:55,790 vi kommer til at bruge til konstanter eller variable 186 00:09:55,790 --> 00:10:01,590 ved hjælp af denne syntaks instead-- lad navn kolon String lig 187 00:10:01,590 --> 00:10:05,530 Dan, som i dette tilfælde betyder, at vi er skal definere en konstant kaldes navn. 188 00:10:05,530 --> 00:10:07,150 Det kommer til at være af typen String. 189 00:10:07,150 --> 00:10:10,550 Og værdien vil være Dan. 190 00:10:10,550 --> 00:10:12,550 Nu den anden måde, vi kan skabe variables-- 191 00:10:12,550 --> 00:10:15,549 og disse er foranderlig variabler, som betyder, at vi er i virkeligheden, vil 192 00:10:15,549 --> 00:10:19,670 at ændre deres indhold engang i varigheden af ​​forbindelse 193 00:10:19,670 --> 00:10:23,890 at denne variabel defined-- vi bruge nøgleordet var stedet for lad. 194 00:10:23,890 --> 00:10:27,400 Men igen, som standard, medmindre du kender at du skal manipulere disse data, 195 00:10:27,400 --> 00:10:30,510 forsøger at bruge lade til ydeevne. 196 00:10:30,510 --> 00:10:33,740 >> I dette tilfælde kan jeg så specificere den type data 197 00:10:33,740 --> 00:10:37,650 at vi forventer at være inde i denne nye variabel kaldet etiket. 198 00:10:37,650 --> 00:10:38,800 Det kommer til at være en streng. 199 00:10:38,800 --> 00:10:43,030 Og vi vil derefter sammenkæde to strenge sammen, strengen hej, 200 00:10:43,030 --> 00:10:48,070 og strengen repræsenteret ved variabel, eller rettere den konstante navn. 201 00:10:48,070 --> 00:10:50,660 >> Så dette er rart, fordi det er noget PHP ligesom i at vi 202 00:10:50,660 --> 00:10:52,250 har meget let strengsammensætning. 203 00:10:52,250 --> 00:10:56,350 Vi har ikke til automatisk bruge nogen form for hukommelse ledelse 204 00:10:56,350 --> 00:11:00,580 at øge størrelsen og gøre nogen form for sjove ting der. 205 00:11:00,580 --> 00:11:05,040 Det fungerer som vi faktisk ville forvente. 206 00:11:05,040 --> 00:11:09,370 >> Okay, spørgsmål om dette? 207 00:11:09,370 --> 00:11:12,520 >> Nu den anden grund til, at vi har brug for du har mulighed 208 00:11:12,520 --> 00:11:15,490 at kunne definere, hvad type datavariable er 209 00:11:15,490 --> 00:11:18,170 er fordi nogle gange gør vi ikke vil initialisere variabler 210 00:11:18,170 --> 00:11:21,080 med nogle data på den punkt definition. 211 00:11:21,080 --> 00:11:23,500 Så i dette tilfælde, lad os sige at jeg ønsker at starte indtastning 212 00:11:23,500 --> 00:11:25,040 nogle kvaliteter i en karakterbog. 213 00:11:25,040 --> 00:11:27,530 Jamen jeg ved, at en af ​​de variabler, som jeg ønsker at være 214 00:11:27,530 --> 00:11:30,280 vil være en foranderlig karakter. 215 00:11:30,280 --> 00:11:33,010 Og vi ved også, at vi ønsker det skal være et heltal. 216 00:11:33,010 --> 00:11:36,030 Men måske vi ikke endnu har denne lønklasse rådighed. 217 00:11:36,030 --> 00:11:39,570 >> I Swift, er du nødt til definere den type data 218 00:11:39,570 --> 00:11:44,000 der er forbundet med en variabel eller en lade konstant 219 00:11:44,000 --> 00:11:47,840 før du kan faktisk bruge denne variabel. 220 00:11:47,840 --> 00:11:51,170 Fordi det er stærkt skrevet, du er nødt til at knytte en type 221 00:11:51,170 --> 00:11:52,890 med disse variabler. 222 00:11:52,890 --> 00:11:56,120 >> Så i dette tilfælde, hvis jeg har ikke ordentligt initialiseres først med en vis værdi, 223 00:11:56,120 --> 00:12:00,520 så er jeg nødt til at fortælle Swift hvad Jeg forventer, at datatypen at være. 224 00:12:00,520 --> 00:12:02,650 Og det kommer til at forblive samme datatype 225 00:12:02,650 --> 00:12:05,780 hele historien om dette program. 226 00:12:05,780 --> 00:12:10,050 >> Nu kan du måske blive fristet, så snart Jeg har oprettet denne klasse variabel 227 00:12:10,050 --> 00:12:13,530 og forudsat at det et heltal på 100, nu, hvis jeg 228 00:12:13,530 --> 00:12:18,540 vil forsøge at sammenkæde en streng med det heltal, 229 00:12:18,540 --> 00:12:21,610 kunne være fristet til at stadig bruge at strengen Sammenkædningsoperator 230 00:12:21,610 --> 00:12:24,500 ligesom vi gjorde bare et par linjer før. 231 00:12:24,500 --> 00:12:26,460 Men desværre, dette vil faktisk ikke 232 00:12:26,460 --> 00:12:29,270 arbejde, fordi du er hovedsagelig udfører 233 00:12:29,270 --> 00:12:32,380 en operation på to forskellige typer. 234 00:12:32,380 --> 00:12:36,856 >> Nu er meget forskellig fra andre sprog som PHP, som er virkelig 235 00:12:36,856 --> 00:12:38,480 loosey goosey med deres slags typer. 236 00:12:38,480 --> 00:12:40,030 De er ligesom, ja, uanset hvad, jeg er ligeglad. 237 00:12:40,030 --> 00:12:42,710 Bare giv mig en type, og måske jeg vil gøre det rigtige. 238 00:12:42,710 --> 00:12:46,060 >> I dette tilfælde er Swift ekstremt strenge om de typer 239 00:12:46,060 --> 00:12:47,350 at du har at gøre med. 240 00:12:47,350 --> 00:12:50,700 Denne summationstegnet eller Sammenkædningsoperator 241 00:12:50,700 --> 00:12:54,400 har i det væsentlige et par forskellige mulige løsninger. 242 00:12:54,400 --> 00:12:56,970 Du kan gøre summation med heltal, eller du 243 00:12:56,970 --> 00:13:00,870 kan gøre snor sammenkædning, og måske nogle andre ting også. 244 00:13:00,870 --> 00:13:05,550 Men hvis denne erhvervsdrivende ikke genkender hvad der er på hver side af det, 245 00:13:05,550 --> 00:13:10,452 eller rettere en kombination af dem to typer, er ikke, hvad det er forventet, 246 00:13:10,452 --> 00:13:11,910 så det kommer til at forårsage en fejl. 247 00:13:11,910 --> 00:13:16,690 >> Så i dette tilfælde, hvad betyder det at have en streng plus et heltal? 248 00:13:16,690 --> 00:13:18,880 Godt i forbindelse med dette, vi sandsynligvis vil 249 00:13:18,880 --> 00:13:21,990 til at gøre en streng sammenkædning operation. 250 00:13:21,990 --> 00:13:26,420 Men selvfølgelig computeren har ikke den slags sammenhæng. 251 00:13:26,420 --> 00:13:29,950 Og så er vi nødt til at give at yderligere oplysninger 252 00:13:29,950 --> 00:13:32,390 at lade det vide, hvad det er, at vi ønsker at gøre. 253 00:13:32,390 --> 00:13:36,860 >> Så med andre ord, den omstændighed at Swift stærkt indtastet 254 00:13:36,860 --> 00:13:39,520 betyder, at du nødt til at gøre en lille smule ekstra arbejde 255 00:13:39,520 --> 00:13:42,100 at få det til at betjene måde, som du ønsker. 256 00:13:42,100 --> 00:13:43,710 Men som et resultat, er det sikrere. 257 00:13:43,710 --> 00:13:46,290 Og når du har tage hensyn til disse typer, 258 00:13:46,290 --> 00:13:49,300 tingene bare ærligt starte at arbejde temmelig godt. 259 00:13:49,300 --> 00:13:52,520 >> Så i dette tilfælde, vi så ville udføre snor sammenkædning 260 00:13:52,520 --> 00:13:56,040 ved udtrykkeligt støbning det hele tal til en streng 261 00:13:56,040 --> 00:13:58,490 ved at pakke det i denne kapital S String-funktion, 262 00:13:58,490 --> 00:14:03,510 og derefter bruge strengen sammenkædning operatøren at ændre vores label variable, 263 00:14:03,510 --> 00:14:06,280 og derefter printe det ud. 264 00:14:06,280 --> 00:14:08,420 >> Så langt så godt? 265 00:14:08,420 --> 00:14:12,020 Okay, lad os komme videre. 266 00:14:12,020 --> 00:14:16,300 >> Nu er der en række data typer, som vi kan bruge i Swift. 267 00:14:16,300 --> 00:14:21,620 Som du har vænnet sig til, vi kan skabe en foranderlig array. 268 00:14:21,620 --> 00:14:26,140 Og at array kan kun indeholder en enkelt type. 269 00:14:26,140 --> 00:14:30,360 >> Så i dette tilfælde, vil vi skabe et bevægeligt arrays af heltal, der 270 00:14:30,360 --> 00:14:34,800 vi vil kalde kvaliteter, og vi vil kunne at opbevare det i denne firkant beslag 271 00:14:34,800 --> 00:14:38,650 format, som du har vænnet i en række andre sprog. 272 00:14:38,650 --> 00:14:41,150 Men se, at her er vi definerer et par ting. 273 00:14:41,150 --> 00:14:45,350 kvaliteter er en foranderlig variable-- vi ikke bruge lad søgeord. 274 00:14:45,350 --> 00:14:49,620 Så det betyder, at vi kan derefter ændre indholdet af dette array. 275 00:14:49,620 --> 00:14:53,420 Det er af typen Array Int, og vi kan fortælle, at 276 00:14:53,420 --> 00:14:56,260 på grundlag af disse firkantede parenteser her. 277 00:14:56,260 --> 00:14:58,930 >> Nu er en af ​​de gode ting dette er, at vi 278 00:14:58,930 --> 00:15:02,310 har adgang til en masse yderligere information 279 00:15:02,310 --> 00:15:07,110 om array bare at bruge nogle enkle dot notation. 280 00:15:07,110 --> 00:15:10,500 Så for eksempel, grades.count giver til os 281 00:15:10,500 --> 00:15:14,820 antallet af elementer, der findes i det array, som vi så kan få adgang til temmelig 282 00:15:14,820 --> 00:15:19,090 nemt blot at bruge, at dot notation. 283 00:15:19,090 --> 00:15:21,830 >> Hvis du ønsker at tilføje yderligere elementer til denne matrix, 284 00:15:21,830 --> 00:15:27,220 du kan ikke gøre PHP stil hvor du bare udtrykkeligt definere, 285 00:15:27,220 --> 00:15:30,910 på et givet indeks, vis værdi at du ønsker at indsætte. 286 00:15:30,910 --> 00:15:37,210 Brug i stedet append metode i array typen 287 00:15:37,210 --> 00:15:40,920 at tilføje denne post, 95, til denne liste. 288 00:15:40,920 --> 00:15:45,990 >> Så nu dette array har følgende contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 Og nu har vi vedlagt 95 til, at så godt. 290 00:15:49,270 --> 00:15:51,830 >> Der er andre måder Vi kan tilføje ting. 291 00:15:51,830 --> 00:15:55,030 Du kan faktisk bruge en summationstegnet, 292 00:15:55,030 --> 00:15:59,200 som vil blive fortolket som et array append operation. 293 00:15:59,200 --> 00:16:04,680 Og du kan derefter tilføje en anden array, hvis indhold er 70 og 80, 294 00:16:04,680 --> 00:16:05,560 til den opstilling. 295 00:16:05,560 --> 00:16:08,250 Så nu har vi den Indholdet i denne variabel 296 00:16:08,250 --> 00:16:17,220 grades-- 100, 0, 90, 85, 95, 70, og 80. 297 00:16:17,220 --> 00:16:21,850 Dette er blot et dejligt lille syntaktisk sukker, Swift giver til os. 298 00:16:21,850 --> 00:16:23,850 >> Så hvis vi ønsker at opsummere den kvaliteter, men vi er måske 299 00:16:23,850 --> 00:16:27,340 vil ønsker at gentage over hver post i denne løkke. 300 00:16:27,340 --> 00:16:32,150 Og vi har i Swift, begrebet af en for-løkke, som du ville forvente. 301 00:16:32,150 --> 00:16:35,350 Men den måde, at vi angiver et område er lidt anderledes. 302 00:16:35,350 --> 00:16:37,790 Så i dette tilfælde, at opsummere alt, vi får 303 00:16:37,790 --> 00:16:40,650 kommer til at oprette en midlertidig variabel kaldet sum for at vi 304 00:16:40,650 --> 00:16:42,580 at opretholde denne tæller. 305 00:16:42,580 --> 00:16:44,430 >> Og bemærk vores for loop byggeri her. 306 00:16:44,430 --> 00:16:46,820 For indekset i 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Så denne konstruktion, 0 .. 00:17:01,860 sige, at vi kommer til at skabe en række tal fra 0 op 310 00:17:01,860 --> 00:17:05,750 til, men eksklusive grades.count. 311 00:17:05,750 --> 00:17:09,577 Så det vil være 0, 1, 2, 3, 4, 5, indtil men mange én 312 00:17:09,577 --> 00:17:10,410 før grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Så dette er anderledes end hvordan vi ville typisk anvendes til løkker 314 00:17:14,160 --> 00:17:18,569 hvor du ville have nogle indeks variabel, sæt den lig med 0 i første omgang, 315 00:17:18,569 --> 00:17:25,480 og derefter integrere det indtil nogle værdi under optællingen af ​​emner 316 00:17:25,480 --> 00:17:27,140 i den opstilling. 317 00:17:27,140 --> 00:17:29,820 >> Så der er en ændring til dette, faktisk, 318 00:17:29,820 --> 00:17:35,010 som giver os mulighed for at meget nemt indstille forskellige typer intervaller. 319 00:17:35,010 --> 00:17:40,570 Hvis du ændrer dette interval til tre prikker, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 dette repræsenterer intervallet 0 at grades.count inklusive, 321 00:17:45,120 --> 00:17:49,260 således, at denne række er også derefter inkluderet i dette område. 322 00:17:49,260 --> 00:17:52,110 >> Men det er meget praktisk for netop disse ting, 323 00:17:52,110 --> 00:17:54,590 når vi nødt til at udføre iterationer end løkke 324 00:17:54,590 --> 00:17:59,630 fordi disse indekser er nul indekseret, som vi har set på andre sprog 325 00:17:59,630 --> 00:18:02,360 samt. 326 00:18:02,360 --> 00:18:05,210 Eventuelle spørgsmål vedrørende denne for løkke? 327 00:18:05,210 --> 00:18:10,660 >> Så der er implicit definition af dette indeks variable, 328 00:18:10,660 --> 00:18:14,350 hvis værdi begynder ved 0, og fortsætter ved hver iteration loop 329 00:18:14,350 --> 00:18:17,950 at stige med 1 indtil et punkt der er lig med grades.count, 330 00:18:17,950 --> 00:18:20,380 på hvilket tidspunkt, løkken afbryder. 331 00:18:20,380 --> 00:18:23,730 >> Bemærk, at i vores snor Interpolation her, 332 00:18:23,730 --> 00:18:26,910 Vi kan faktisk udføre nogle simple manipulationer af disse værdier. 333 00:18:26,910 --> 00:18:31,230 Så indeks plus 1 vil faktisk udføre en opsummering af denne værdi 334 00:18:31,230 --> 00:18:34,780 fordi indekset er i dette tilfælde et heltal. 335 00:18:34,780 --> 00:18:37,810 Og på det tidspunkt, vil det derefter omdannes til en streng 336 00:18:37,810 --> 00:18:42,230 og interpoleret i denne streng her, og udskrives som vi ville forvente. . 337 00:18:42,230 --> 00:18:44,520 >> Og det gode om arrays her er 338 00:18:44,520 --> 00:18:50,730 at vi også i stand til at have Henter værdier og indstillingsværdier 339 00:18:50,730 --> 00:18:54,080 ved hjælp af den firkantede beslag notation som vi har set på andre sprog så godt. 340 00:18:54,080 --> 00:18:57,130 341 00:18:57,130 --> 00:19:01,030 >> Okay, så herfra, vi nu beregne summen af ​​vores alle vores kvaliteter. 342 00:19:01,030 --> 00:19:02,780 Nu slags næste logiske skridt ville være 343 00:19:02,780 --> 00:19:07,580 til at gøre en division for at finde ud gennemsnittet af disse kvaliteter. 344 00:19:07,580 --> 00:19:10,150 Men noget vigtigt her sker der 345 00:19:10,150 --> 00:19:15,020 er, at denne sum er måske et heltal. 346 00:19:15,020 --> 00:19:18,020 Men vi er nødt til at udføre nogle slags dobbelt division. 347 00:19:18,020 --> 00:19:20,600 Og det vil være yderst vigtigt, når 348 00:19:20,600 --> 00:19:24,140 vi ønsker at udføre denne operation, fordi det, vi siger 349 00:19:24,140 --> 00:19:28,430 er, at vi er nødt til rent faktisk at udføre division på to dobbeltværelser. 350 00:19:28,430 --> 00:19:31,370 Og igen, fordi Swift er meget stærkt skrevet, 351 00:19:31,370 --> 00:19:36,760 må vi udtrykkeligt angive alle de elementer til doubler, før vi faktisk 352 00:19:36,760 --> 00:19:38,300 udføre denne operation. 353 00:19:38,300 --> 00:19:40,550 >> Så for at vi kan udføre dobbelt division, 354 00:19:40,550 --> 00:19:43,730 det er ikke tilstrækkeligt, at bare én af disse elementer til at være en dobbelt. 355 00:19:43,730 --> 00:19:46,400 Begge af dem er nødt til at være en dobbelt, for hurtig 356 00:19:46,400 --> 00:19:50,860 at være sikker på, at dette er, hvad vi ønsker at gøre. 357 00:19:50,860 --> 00:19:54,360 Så vil vi så eksplicit typecast det beløb, som vi har beregnet ovenfor 358 00:19:54,360 --> 00:19:58,970 og optællingen af ​​kvaliteter til doubler, og derefter udføre denne operation og butik 359 00:19:58,970 --> 00:20:02,390 at i denne nye variabel, eller rettere denne nye konstant kaldes gennemsnit 360 00:20:02,390 --> 00:20:06,810 som vil have, hvilken type, du forestiller dig? 361 00:20:06,810 --> 00:20:07,587 Dobbelt, ja. 362 00:20:07,587 --> 00:20:09,420 Så i dette tilfælde, vi behøver ikke at angive det 363 00:20:09,420 --> 00:20:13,450 fordi det kan udledes af den drift, hvilken type gennemsnit data 364 00:20:13,450 --> 00:20:14,730 vil blive. 365 00:20:14,730 --> 00:20:19,025 Og Swift er generelt temmelig god om at kunne udlede de typer. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Har du lyst til at se denne køre, eller kan jeg komme videre? 368 00:20:24,200 --> 00:20:25,640 Jeg ønsker at holde ud. 369 00:20:25,640 --> 00:20:28,130 Eventuelle spørgsmål om noget af dette? 370 00:20:28,130 --> 00:20:28,630 Alle tiders. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Nu vil vi begynde at komme til de gode stuff-- definerende funktioner, 373 00:20:35,010 --> 00:20:39,090 og et par andre typer, der er unik for Swift, som du ikke har 374 00:20:39,090 --> 00:20:41,620 set på andre sprog indtil dette punkt, 375 00:20:41,620 --> 00:20:46,290 men de er til stede i andre sprog, som du måske vil finde senere. 376 00:20:46,290 --> 00:20:48,210 Så først, hvis du ønsker at definere en funktion, 377 00:20:48,210 --> 00:20:52,170 du definere det med funky ord funktion, og derefter funktionen navn, 378 00:20:52,170 --> 00:20:56,710 og derefter i parentes, argumenterne som du ønsker denne funktion til at acceptere. 379 00:20:56,710 --> 00:21:00,280 Argumenterne skal også specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 skal også angive, hvilken type data, som de er, medmindre de kan udledes. 381 00:21:05,010 --> 00:21:07,500 Og vi vil se, at lidt advarsel i bare en lille smule. 382 00:21:07,500 --> 00:21:09,920 >> Så i dette tilfælde har vi en funktion kaldet printGradeCount. 383 00:21:09,920 --> 00:21:12,840 Vi kommer til at acceptere en variable-- eller rettere i dette tilfælde, 384 00:21:12,840 --> 00:21:14,450 en constant-- kaldet gradebook. 385 00:21:14,450 --> 00:21:18,517 Og det vil være af skriv vifte af heltal. 386 00:21:18,517 --> 00:21:20,600 Nu er der noget det er virkelig vigtigt her 387 00:21:20,600 --> 00:21:21,849 at jeg vil have dig til at forstå. 388 00:21:21,849 --> 00:21:27,560 Det er, at som standard, disse argumenter som er input til denne funktion er 389 00:21:27,560 --> 00:21:34,380 defineres med en implicit lad søgeord, hvilket betyder, at jeg ikke kan ændre dette 390 00:21:34,380 --> 00:21:39,850 Karakterbog variabel her. 391 00:21:39,850 --> 00:21:43,360 Og den slags giver mening, fordi du passerer data. 392 00:21:43,360 --> 00:21:45,860 Og du måske ikke ønsker det ændres fra under dig. 393 00:21:45,860 --> 00:21:50,800 Det er muligt at eksplicit nævne at dette er en variabel ved at sætte 394 00:21:50,800 --> 00:21:52,070 Var nøgleordet her. 395 00:21:52,070 --> 00:21:56,832 Men det er en gotcha, at vi har bemærket folk har gjort i fortiden 396 00:21:56,832 --> 00:21:59,790 er, at de antog, at det vil at være en variabel, når det i virkeligheden er det 397 00:21:59,790 --> 00:22:02,640 er en konstant. 398 00:22:02,640 --> 00:22:07,340 >> Okay, så her så i dette tilfælde, vi er ikke specificerer nogen tilbagevenden type. 399 00:22:07,340 --> 00:22:09,460 Vi viser dig, hvordan du gør at på bare et øjeblik. 400 00:22:09,460 --> 00:22:12,340 Men se, at her har vi blot en enkel, hvis tilstand. 401 00:22:12,340 --> 00:22:14,560 Hvis gradebook er tomme, som i dette tilfælde 402 00:22:14,560 --> 00:22:19,310 er blot den ejendom af denne heltal array, så vi udskrive noget. 403 00:22:19,310 --> 00:22:23,100 Ellers gør vi noget andet. 404 00:22:23,100 --> 00:22:25,000 >> Temmelig ligetil hidtil tror jeg. 405 00:22:25,000 --> 00:22:27,960 Men stoppe mig, hvis du har spørgsmål. 406 00:22:27,960 --> 00:22:33,350 >> Nu er denne funktion, gennemsnit, tager også nogle argumenter, eller snarere et argument, 407 00:22:33,350 --> 00:22:37,507 som er gradebook, og denne gang kommer til at vende tilbage en dobbelt type. 408 00:22:37,507 --> 00:22:39,340 Fordi det er computing gennemsnittet, og det er 409 00:22:39,340 --> 00:22:45,010 vil faktisk tilbage at beregnede gennemsnit til den kaldende linje. 410 00:22:45,010 --> 00:22:50,070 >> I dette tilfælde vi specificere returnere typen efter en pil. 411 00:22:50,070 --> 00:22:53,260 Og dette kan føle lidt underligt i starten. 412 00:22:53,260 --> 00:22:55,610 Du har vænnet til indstilling af afkast 413 00:22:55,610 --> 00:22:57,720 indtaste, før navnet på funktionen. 414 00:22:57,720 --> 00:23:00,310 Men hvis du tænker på dette i form af matematik, 415 00:23:00,310 --> 00:23:03,320 ligesom når du har matematik at definere en funktion, 416 00:23:03,320 --> 00:23:06,807 du har en funktion med nogle input, og det frembringer et udgangssignal. 417 00:23:06,807 --> 00:23:08,890 Og det er præcis, hvad dette formodes at efterligne. 418 00:23:08,890 --> 00:23:12,460 Og der er et par andre sprog der har lignende syntaks så godt, 419 00:23:12,460 --> 00:23:15,674 men sandsynligvis ingen, du har set i CS50. 420 00:23:15,674 --> 00:23:17,090 Men stadig ikke forveksles med det. 421 00:23:17,090 --> 00:23:21,650 Pilen betyder, hvad der foregår skal returneres i dette tilfælde. 422 00:23:21,650 --> 00:23:23,650 OK, så hvordan skal vi at beregne dette gennemsnit? 423 00:23:23,650 --> 00:23:25,649 Tja, hvis gradebook er tom, ja så er vi 424 00:23:25,649 --> 00:23:30,731 kommer til at vende tilbage 0, hvilket måske en fornuftig måde at behandle dette. 425 00:23:30,731 --> 00:23:32,980 Jeg ved det ikke, lad os komme tilbage til om lidt. 426 00:23:32,980 --> 00:23:34,688 Dette kan faktisk ikke være en rimelig måde 427 00:23:34,688 --> 00:23:38,310 at beregne et gennemsnit, hvis vi har en tom gradebook. 428 00:23:38,310 --> 00:23:41,260 >> Så vil vi blot udføre vores opsummering. 429 00:23:41,260 --> 00:23:43,900 Bemærk, at her vi faktisk har en alternativ version af en 430 00:23:43,900 --> 00:23:49,190 for-løkke, som giver os mulighed for at gentage over hver enkelt element i et array 431 00:23:49,190 --> 00:23:53,630 og placere hvert element i sit eget variabel. 432 00:23:53,630 --> 00:23:56,200 Ved at angive for lønklasse i Karakterbog, hvad vi siger 433 00:23:56,200 --> 00:24:00,560 er, at vi kommer til at implicit oprette en ny konstant kaldet 434 00:24:00,560 --> 00:24:05,180 klasse, der vil repræsentere hver unikt element i gradebook 435 00:24:05,180 --> 00:24:06,769 hver gang, at den for loop gentager. 436 00:24:06,769 --> 00:24:08,560 Så første gang, det køres, grad vil 437 00:24:08,560 --> 00:24:09,800 være det første punkt i Karakterbog. 438 00:24:09,800 --> 00:24:12,300 Den anden gang, det vil være den andet punkt, så videre og så videre 439 00:24:12,300 --> 00:24:15,970 indtil gradebook har udtømt sig af elementer. 440 00:24:15,970 --> 00:24:20,390 Så vil vi være i stand til at opsummere, at kvalitet ind i vores summation variabel 441 00:24:20,390 --> 00:24:22,570 og returnere vores gennemsnitlige som vi har set før. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, nogen spørgsmål? 444 00:24:26,950 --> 00:24:27,699 Ja? 445 00:24:27,699 --> 00:24:28,990 PUBLIKUM: Jeg har to spørgsmål. 446 00:24:28,990 --> 00:24:33,586 Nummer et, hypotetisk, kan du kører heltal på denne ene? 447 00:24:33,586 --> 00:24:35,604 Behøver ikke at være en dobbelt, er det korrekt? 448 00:24:35,604 --> 00:24:37,520 DAN AMRMENDARIZ: Kan du gentage det spørgsmål? 449 00:24:37,520 --> 00:24:39,587 PUBLIKUM: Kan jeg gøre heltal som gennemsnittet? 450 00:24:39,587 --> 00:24:41,670 DAN AMRMENDARIZ: Kan du gør heltal som et gennemsnit? 451 00:24:41,670 --> 00:24:45,015 Så returnere et heltal gennemsnit i stedet for en dobbelt? 452 00:24:45,015 --> 00:24:48,204 >> PUBLIKUM: Return-- dig har at lige nu nedenfor. 453 00:24:48,204 --> 00:24:49,870 DAN AMRMENDARIZ: Lige her, returnere 0,0? 454 00:24:49,870 --> 00:24:51,790 PUBLIKUM: Ja, bare returnere 0. 455 00:24:51,790 --> 00:24:56,590 Så det vil være enten 80 eller 85, men ikke 85,2. 456 00:24:56,590 --> 00:24:59,465 >> DAN AMRMENDARIZ: Så i dette tilfælde, så der er et par forskellige måder 457 00:24:59,465 --> 00:25:00,090 at besvare dette. 458 00:25:00,090 --> 00:25:02,760 Lad mig besvare dem i orden. 459 00:25:02,760 --> 00:25:06,740 Så hvis jeg bare gøre denne tilbagevenden 0, et 0 er en heltalsværdi. 460 00:25:06,740 --> 00:25:09,730 Og så vil medføre en typen fejl for denne sag 461 00:25:09,730 --> 00:25:13,210 fordi det forventer en dobbelt men derefter returnere et heltal. 462 00:25:13,210 --> 00:25:16,770 Hvis jeg ønsker at vende tilbage et heltal, kan jeg. 463 00:25:16,770 --> 00:25:20,450 Jeg kan indstille returtypen at int, returnere 0 her, 464 00:25:20,450 --> 00:25:22,047 og ikke udføre dobbelt division. 465 00:25:22,047 --> 00:25:23,880 Men så ville vi være gør heltal division. 466 00:25:23,880 --> 00:25:27,080 Og så vi så ikke ville få den gennemsnit, at vi overhovedet ville forvente. 467 00:25:27,080 --> 00:25:29,210 Men ja, vi kan ændre typerne på den måde. 468 00:25:29,210 --> 00:25:32,598 >> PUBLIKUM: Og for det andet, du har den ene dobbelt på toppen. 469 00:25:32,598 --> 00:25:35,502 Men dernede, når du gør returnere Dobbelt, 470 00:25:35,502 --> 00:25:38,280 det er allerede automatisk tilbage Double format. 471 00:25:38,280 --> 00:25:42,278 Hvorfor har du stadig nødt til at definere det med pilen på toppen med en Double? 472 00:25:42,278 --> 00:25:45,010 >> DAN AMRMENDARIZ: Så i tilfælde, dette er en del 473 00:25:45,010 --> 00:25:50,580 af til-- så at gentage spørgsmålet, fordi det er implicit fra afkastet 474 00:25:50,580 --> 00:25:56,030 typer her, hvilken type det faktisk er vi nødt til at være eksplicit med Swift 475 00:25:56,030 --> 00:25:59,970 om, hvad vi ønsker at tilbage ud af denne funktion 476 00:25:59,970 --> 00:26:02,690 således at når den udfører skrive kontrol, kan det sørge for 477 00:26:02,690 --> 00:26:05,850 at det, vi rent faktisk har skrevet ned under faktisk svarer til denne. 478 00:26:05,850 --> 00:26:10,225 Så det er lidt ligesom en check med dig selv slags situationer. 479 00:26:10,225 --> 00:26:11,050 Men der are-- 480 00:26:11,050 --> 00:26:12,560 >> PUBLIKUM: [uhørligt] pil? 481 00:26:12,560 --> 00:26:19,490 >> DAN AMRMENDARIZ: Der er tilfælde, hvor vi kan angive, at vi kan implicit 482 00:26:19,490 --> 00:26:21,550 indstille returtypen. 483 00:26:21,550 --> 00:26:23,940 Men i dette tilfælde, det gør jeg ikke tror, ​​det ville fungere. 484 00:26:23,940 --> 00:26:26,190 Der er nogle andre syntaks at vi vil se senere. 485 00:26:26,190 --> 00:26:30,320 486 00:26:30,320 --> 00:26:35,280 >> Okay, så denne kilde kode er en lille smule anderledes 487 00:26:35,280 --> 00:26:41,839 fordi dette analyserer argumenter fra den funktion, som vi kalder. 488 00:26:41,839 --> 00:26:44,130 Lad mig vise dig, hvordan det fungerer før vi faktisk går videre 489 00:26:44,130 --> 00:26:48,050 til nogle interessante ting der sker i Swift. 490 00:26:48,050 --> 00:26:51,870 >> Så i dette tilfælde, hvis jeg bare køre dette kode, bemærke, at hvad den gør 491 00:26:51,870 --> 00:26:54,900 is-- mens den slags giver mig en underlig fejl. 492 00:26:54,900 --> 00:26:59,730 Jeg har brug for at give det et par heltal som en kommandolinje argument. 493 00:26:59,730 --> 00:27:06,220 Så lad os se, 150 og 80, og hit Enter at finde ud af, hvad det faktisk gør. 494 00:27:06,220 --> 00:27:09,890 Det accepterer hver af disse værdier som hele tal. 495 00:27:09,890 --> 00:27:12,040 Det er indlæst dem i en gradebook. 496 00:27:12,040 --> 00:27:14,470 Og så er det at udføre at den gennemsnitlige beregning 497 00:27:14,470 --> 00:27:16,650 og udsende det som vi ville forvente. 498 00:27:16,650 --> 00:27:19,950 >> Men selvfølgelig er der noget at gå med denne afvisning noget 499 00:27:19,950 --> 00:27:23,300 noget som et heltal. 500 00:27:23,300 --> 00:27:27,300 Som du måske husker fra da vi var beskæftiger sig med kommandolinjeargumenter 501 00:27:27,300 --> 00:27:32,640 i C og andre sprog, den allerførste 0-th element i den kommandolinje argument 502 00:27:32,640 --> 00:27:35,774 Listen er navnet på kommandoen at vi faktisk udføres. 503 00:27:35,774 --> 00:27:38,690 Så i dette tilfælde, jeg bare looping over alle kommandolinjeargumenter. 504 00:27:38,690 --> 00:27:41,650 Men jeg laver ikke nogen form for fancy kontrollere at springe over, at første. 505 00:27:41,650 --> 00:27:45,920 Jeg er bare eksplicit eller jeg er implicit kontrol, hvilke af disse typer 506 00:27:45,920 --> 00:27:49,900 er heltal før jeg faktisk udføre denne beregning. 507 00:27:49,900 --> 00:27:52,420 >> Og det er væsentligt hvad der sker her. 508 00:27:52,420 --> 00:27:55,860 For hver argument den proces argumenter, 509 00:27:55,860 --> 00:27:59,210 Jeg har tænkt mig at udføre nogle check. 510 00:27:59,210 --> 00:28:01,970 Og i dette tilfælde, vil jeg at prøve først at omdanne 511 00:28:01,970 --> 00:28:07,620 dette argument til et heltal af udføre en eksplicit typecast, 512 00:28:07,620 --> 00:28:12,310 fordi det er på input, en snor og ikke i virkeligheden et heltal. 513 00:28:12,310 --> 00:28:18,140 >> Men det er lidt af en underlig syntaks, hvis lad kvalitet lig Int (argument). 514 00:28:18,140 --> 00:28:21,120 Hvad der faktisk sker her er yderst 515 00:28:21,120 --> 00:28:24,390 vigtige for din hjælp Swift. 516 00:28:24,390 --> 00:28:27,610 Det er ved hjælp af, hvad der er kaldes en valgfri type. 517 00:28:27,610 --> 00:28:34,790 >> Så denne funktion, Int (argument), returnerer ikke bare et heltal, men vender tilbage 518 00:28:34,790 --> 00:28:37,470 hvad der kaldes en valgfri heltal. 519 00:28:37,470 --> 00:28:41,200 Og så dette er slags en type på toppen af ​​en type. 520 00:28:41,200 --> 00:28:45,900 Du kan slags forestille mig det ligesom det er tilbage som en pakke. 521 00:28:45,900 --> 00:28:47,750 Og når du åbner det pakke, enten 522 00:28:47,750 --> 00:28:53,930 har et helt tal, der er resultatet, eller det har absolut intet i det overhovedet. 523 00:28:53,930 --> 00:28:58,140 Og det er nyttigt som en fejl kontrol mekanisme, fordi der i dette tilfælde 524 00:28:58,140 --> 00:29:02,080 Vi kan finde ud af, det var typekonvertering succes? 525 00:29:02,080 --> 00:29:05,810 Hvis det var, så er det i virkeligheden vil have et helt tal indeni. 526 00:29:05,810 --> 00:29:08,750 Ellers er det kommer til at have nogle værdi, som vi vil kalde taget nul, hvilket 527 00:29:08,750 --> 00:29:10,920 repræsenterer ingen heltal overhovedet. 528 00:29:10,920 --> 00:29:13,270 Det er virkelig repræsentant for ingenting. 529 00:29:13,270 --> 00:29:18,130 >> Og så dette, hvis konstruktion tillader os at pakke pakken, 530 00:29:18,130 --> 00:29:19,850 at valgfri binding. 531 00:29:19,850 --> 00:29:25,560 Og hvis vi er i stand til at pakke, at pakke og finde et heltal inde, 532 00:29:25,560 --> 00:29:27,720 så hvad vi siger her er, at vi vil derefter 533 00:29:27,720 --> 00:29:33,090 tillader denne værdi skal indstilles til denne konstant kaldet klasse. 534 00:29:33,090 --> 00:29:36,590 Og denne del af, hvis udsagn, den øverste del af den, hvis udsagn 535 00:29:36,590 --> 00:29:40,390 vil køre, fordi det pak lykkedes. 536 00:29:40,390 --> 00:29:43,290 >> Hvis det bare så sker det, at der opstod en fejl måske 537 00:29:43,290 --> 00:29:47,040 i denne eksplicitte typekonvertering fra en streng til et heltal, måske 538 00:29:47,040 --> 00:29:49,160 det er værdien ABC f.eks. 539 00:29:49,160 --> 00:29:52,120 Og det er faktisk ikke vil konverteres til et heltal. 540 00:29:52,120 --> 00:29:55,520 Så det vil vende tilbage nul, som ikke er et heltal. 541 00:29:55,520 --> 00:29:57,570 Og dette, hvis udsagn godt derefter mislykkes. 542 00:29:57,570 --> 00:30:01,930 klasse vil ikke eksistere, fordi det har ingen heltal indhold. 543 00:30:01,930 --> 00:30:06,391 Og det vil køre denne ellers blok i stedet. 544 00:30:06,391 --> 00:30:06,890 Ja? 545 00:30:06,890 --> 00:30:09,652 >> PUBLIKUM: Nil er N-I-L? 546 00:30:09,652 --> 00:30:11,110 DAN AMRMENDARIZ: nul er N-I-L, ja. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Så det er måske en af ​​de sværeste ting om Swift, 549 00:30:20,310 --> 00:30:23,690 især når du er i ukrudt på en iOS-app 550 00:30:23,690 --> 00:30:27,442 og du er faktisk forsøger at gøre nogle udvikling der. 551 00:30:27,442 --> 00:30:29,400 Det kommer til at være råben på dig om valgfri. 552 00:30:29,400 --> 00:30:33,050 Det kommer til at spørge dig om spørgsmålstegn og udråbstegn. 553 00:30:33,050 --> 00:30:37,100 Men når du regne out-- hvis du afsætte lidt tid til at finde ud af 554 00:30:37,100 --> 00:30:41,990 hvad der sker med valgfri typer, vil du spare dig selv en masse hovedpine 555 00:30:41,990 --> 00:30:46,040 som du forsøger at skrive en app i Swift. 556 00:30:46,040 --> 00:30:47,660 >> Det er faktisk en meget kraftfuld funktion. 557 00:30:47,660 --> 00:30:49,826 Og du vil bare nødt til at tage mit ord for det for nu. 558 00:30:49,826 --> 00:30:52,620 Men vi vil se denne konstruktion og nogle andre kan lide det 559 00:30:52,620 --> 00:30:56,740 i nogle af de andre kildekode, vi vil vise dig i bare en lille smule. 560 00:30:56,740 --> 00:31:00,440 >> Er der nogen indledende spørgsmål her? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Så det vigtige takeaway er, at en valgfri type er en slags metatype. 563 00:31:08,690 --> 00:31:12,500 Det enten har en værdi, og hvis den gør, så er det 564 00:31:12,500 --> 00:31:18,110 vil måske have denne værdi er forbundet med det, eller det har overhovedet ingen værdi, 565 00:31:18,110 --> 00:31:19,620 og er repræsenteret ved nul. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 Resten af ​​dette er måske som du ville forvente. 568 00:31:28,870 --> 00:31:32,900 >> Så lad os rampe op vanskeligheder endnu en gang. 569 00:31:32,900 --> 00:31:37,070 Og denne gang, lad os tage et kig på nogle andre typer, der rent faktisk eksisterer data. 570 00:31:37,070 --> 00:31:41,290 En af dem er ordbøger, som er meget lig Python ordbøger. 571 00:31:41,290 --> 00:31:48,270 Det er noget der ligner en hash tabel i C. Det er hovedsageligt en kortlægning af nøgler 572 00:31:48,270 --> 00:31:49,820 hvor nøgler kan være strenge. 573 00:31:49,820 --> 00:31:52,670 Og når man ser op disse nøgler, disse nøgler vil have en værdi. 574 00:31:52,670 --> 00:31:56,020 Så det er ikke helt et array, men i stedet, mere tæt forbundet 575 00:31:56,020 --> 00:31:58,810 til en hash kort eller et hashtabel. 576 00:31:58,810 --> 00:32:02,420 >> Lad os se, hvordan dette er meningen til at arbejde, før vi faktisk 577 00:32:02,420 --> 00:32:05,210 gå i kildekoden selv. 578 00:32:05,210 --> 00:32:07,680 Hvis jeg bare køre dette, intet virkelig sker. 579 00:32:07,680 --> 00:32:12,430 Det fortæller mig, at jeg forventer nogle parametre af følgende type. 580 00:32:12,430 --> 00:32:16,050 Så jeg har tænkt mig at give det nogle problem sat navne, 581 00:32:16,050 --> 00:32:18,490 så pset0, måske jeg fik 100. 582 00:32:18,490 --> 00:32:20,790 Og pset1, fik jeg en 5. 583 00:32:20,790 --> 00:32:24,630 Og derefter på den eksamen, jeg gjorde det rigtig godt og fik 30. 584 00:32:24,630 --> 00:32:27,180 Og ups, jeg ramte en plads her. 585 00:32:27,180 --> 00:32:30,940 >> Når jeg ramte Enter, kan du se det udfører en beregning. 586 00:32:30,940 --> 00:32:33,740 Den siger gradebook er tre kvaliteter, pset1, pset0, eksamen. 587 00:32:33,740 --> 00:32:36,120 Og gradebook har denne særlige gennemsnit. 588 00:32:36,120 --> 00:32:38,370 Så igen, vi arbejder med denne gradebook idé, 589 00:32:38,370 --> 00:32:44,650 men vi vil fortsætte iteration med kompleksiteten i vores funktion. 590 00:32:44,650 --> 00:32:47,650 >> Så i starten, vi er bare kommer til at oprette en funktion, 591 00:32:47,650 --> 00:32:49,390 er ansvarlig for trykning af brugen. 592 00:32:49,390 --> 00:32:51,920 Og der er denne udgang funktion, som vil bare 593 00:32:51,920 --> 00:32:53,710 magt afslutte programmet. 594 00:32:53,710 --> 00:32:56,530 Det er ikke noget, , du vil bruge i iOS-app. 595 00:32:56,530 --> 00:32:59,750 Dette er kun i dette tilfælde, med en kommandolinje argument. 596 00:32:59,750 --> 00:33:01,990 Næste vil vi begynde at bevæge sig i retning Xcode. 597 00:33:01,990 --> 00:33:07,760 Men det er specifikt for en kommando line stil program i Swift. 598 00:33:07,760 --> 00:33:11,490 >> Lad os tage et kig på nogle af de interessante ting her. 599 00:33:11,490 --> 00:33:15,150 Lad os se, kun et par interessante ting at nævne måske 600 00:33:15,150 --> 00:33:19,930 er, at i min funktion udskrivning af antallet af karakterer, 601 00:33:19,930 --> 00:33:26,090 du måske huske, at jeg havde denne liste af items-- pset1, pset0, og eksamen. 602 00:33:26,090 --> 00:33:29,130 Du kan faktisk hurtigt og nemt gøre dette 603 00:33:29,130 --> 00:33:34,490 ved at tage gradebook, som er en ordbogen som har nøgler og værdier. 604 00:33:34,490 --> 00:33:38,730 Find alle af nøglen er gennem Prikken nøgler metoden her, 605 00:33:38,730 --> 00:33:43,180 og derefter bruge denne joinWithSeparator, som derefter vil tage alle nøglerne 606 00:33:43,180 --> 00:33:48,590 at vi havde skrevet i, pset1-- eller undskyld, pset0, pset1, og exam-- 607 00:33:48,590 --> 00:33:53,030 og sammenkæde dem sammen ved hjælp af et komma og et mellemrum 608 00:33:53,030 --> 00:33:55,400 at oprette en lang streng. 609 00:33:55,400 --> 00:34:00,190 Dette slutte operation er bare fænomenalt nyttige i en række sammenhænge. 610 00:34:00,190 --> 00:34:03,450 Og så er det denne joinWithSeparator. 611 00:34:03,450 --> 00:34:06,939 >> Og det er en ting, der er ændret fra Swift 1 til Swift 2. 612 00:34:06,939 --> 00:34:08,730 Der plejede at være en Python style-- hvis du er 613 00:34:08,730 --> 00:34:13,219 fortrolig med Python-- en Python stil slutte metode på strenge. 614 00:34:13,219 --> 00:34:15,699 Men det er ikke længere tilfældet i Swift 2. 615 00:34:15,699 --> 00:34:19,400 Du ønsker at bruge dette, hvis du vil at sammenkæde en række ting 616 00:34:19,400 --> 00:34:23,380 sammen med en snor. 617 00:34:23,380 --> 00:34:27,889 >> Så måske så i vores diskussion af gennemsnittet før, 618 00:34:27,889 --> 00:34:32,659 det gør lidt mere mening for os at sætte den gennemsnitlige funktion 619 00:34:32,659 --> 00:34:36,610 at være en valgfri dobbelt snarere end blot en eksplicit dobbelt. 620 00:34:36,610 --> 00:34:39,239 Fordi vi havde at usædvanlig tilstand, hvor, 621 00:34:39,239 --> 00:34:41,550 hvad nu hvis gradebook faktisk har ingen værdier inden det? 622 00:34:41,550 --> 00:34:44,280 Hvad skal det gennemsnitlige afkast? 623 00:34:44,280 --> 00:34:46,350 >> Nå måske i C du ville have gjort noget 624 00:34:46,350 --> 00:34:50,040 ligesom forudsat en sentinel værdi, ligesom 0,0, eller måske et negativt tal, 625 00:34:50,040 --> 00:34:53,690 eller noget blot repræsenterer det faktum at der var nogle fejltilstand 626 00:34:53,690 --> 00:34:57,910 og du måske ikke rent faktisk har evnen til at beregne gennemsnittet. 627 00:34:57,910 --> 00:35:05,590 Nå skønhed angive en valgfri type ville være at gøre det. 628 00:35:05,590 --> 00:35:09,540 Og jeg nu siger alle disse Ord, men dette rent faktisk ikke bruger optionals. 629 00:35:09,540 --> 00:35:12,970 Men vi vil se, at i blot minutter, hvor vi kan indstille gennemsnit 630 00:35:12,970 --> 00:35:17,230 at være en valgfri datatype, så hvis det rent faktisk returnerer nogle data, så 631 00:35:17,230 --> 00:35:18,470 vi vil vende tilbage, at data. 632 00:35:18,470 --> 00:35:20,570 Ellers vil vi vende tilbage nul, siger, at dette 633 00:35:20,570 --> 00:35:22,200 ikke har nogen meningsfuld beregning. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Lad os gå videre til noget andet. 636 00:35:28,570 --> 00:35:35,910 Så herfra, har vi kigget på alle disse eksempler i kommandolinjen. 637 00:35:35,910 --> 00:35:39,470 Men virkelig, hvad du vil til at beskæftige sig med, er Xcode. 638 00:35:39,470 --> 00:35:43,720 Og en af ​​de gode ting ved Xcode er, og specielt i Swift, 639 00:35:43,720 --> 00:35:47,450 er, at vi har denne ting kaldet en legeplads. 640 00:35:47,450 --> 00:35:51,470 Og en legeplads er slet ikke en iOS-app. 641 00:35:51,470 --> 00:35:54,751 Men det giver dig mulighed for at eksperimentere med Swift i en meget nem måde. 642 00:35:54,751 --> 00:35:56,000 Du kan indtaste alle dine kode. 643 00:35:56,000 --> 00:35:58,140 Det er pænt syntaks i fremhævet her. 644 00:35:58,140 --> 00:36:01,600 Når du opretter en ny fil, vil det bede dig, hvis du vil oprette en legeplads. 645 00:36:01,600 --> 00:36:08,720 Men det gode ved Playground er, til højre for dit vindue, 646 00:36:08,720 --> 00:36:12,020 betyder det faktisk vise dig output fra din kode. 647 00:36:12,020 --> 00:36:16,110 Så hvis jeg rulle ned, kan vi se, hvad der produktionen af ​​forskellige linjer kode 648 00:36:16,110 --> 00:36:17,200 faktisk sker for at være. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Så i dette tilfælde, vil vi ændre retninger bare en lille smule 651 00:36:26,790 --> 00:36:30,960 og taler om noget, der er virkelig vigtigt at dette høje niveau måde 652 00:36:30,960 --> 00:36:34,020 at Swift opererer, og det er denne idé om lukninger. 653 00:36:34,020 --> 00:36:36,960 Og du har sikkert set dette en lille smule i JavaScript. 654 00:36:36,960 --> 00:36:40,770 For dem af jer, er i CS50, lukninger 655 00:36:40,770 --> 00:36:47,240 er meget populære, meget god måde at gøre højt niveau ting i moderne sprog. 656 00:36:47,240 --> 00:36:50,270 Men det er også slags vanskeligt at wrap dit hoved omkring første gang. 657 00:36:50,270 --> 00:36:52,269 Så hvis du ser på denne første gang, det er OK. 658 00:36:52,269 --> 00:36:56,740 Bare se på kildekoden og se hvis du kan finde ud af det derhjemme. 659 00:36:56,740 --> 00:37:01,050 >> Så i dette tilfælde, lad os sige, at vi ønsker at skabe en masse eksponenter 660 00:37:01,050 --> 00:37:04,134 med nogle fast værdi. 661 00:37:04,134 --> 00:37:05,800 Så i dette tilfælde kan jeg oprette en funktion. 662 00:37:05,800 --> 00:37:09,270 Jeg har tænkt mig at kalde det magt 2 hvis eneste formål i livet 663 00:37:09,270 --> 00:37:15,770 er at tage nogle input og dobbelt det, og returnere denne værdi. 664 00:37:15,770 --> 00:37:21,210 Bemærk, at her er jeg at acceptere én type data. 665 00:37:21,210 --> 00:37:23,137 Det kommer til at være en variabel kaldet x. 666 00:37:23,137 --> 00:37:23,970 Det er af typen dobbelt. 667 00:37:23,970 --> 00:37:26,190 Og jeg har tænkt mig at returnere en dobbelt her. 668 00:37:26,190 --> 00:37:29,100 Og jeg bare gøre et meget ærligt, pretty 669 00:37:29,100 --> 00:37:32,650 naiv måde at fordoble denne værdi. 670 00:37:32,650 --> 00:37:35,600 Og jeg vil vise dig, hvorfor dette er nyttig i bare et sekund. 671 00:37:35,600 --> 00:37:40,418 >> Bemærk, at her har vi denne serie igen. efter noget i 1, prik 672 00:37:40,418 --> 00:37:44,130 dot dot, 2, hvilket betyder, at denne løkke vil køre to gange. 673 00:37:44,130 --> 00:37:46,480 Men dette repræsenterer en dummy variabel. 674 00:37:46,480 --> 00:37:49,650 Det betyder, at jeg er ikke rigtig kommer til at bruge denne variabel overalt 675 00:37:49,650 --> 00:37:51,070 inde i denne sløjfe. 676 00:37:51,070 --> 00:37:55,380 Jeg vil bare have denne linje kode til at køre to gange, 677 00:37:55,380 --> 00:37:58,980 uden at behøve at kende værdien af ​​dette interval. 678 00:37:58,980 --> 00:38:02,570 >> Så i dette tilfælde jeg kører resultat gange to gange på x, som i det væsentlige 679 00:38:02,570 --> 00:38:06,560 betyder, at jeg kvadratur denne værdi. 680 00:38:06,560 --> 00:38:10,230 Og det sker til arbejde som vi ville forvente. 681 00:38:10,230 --> 00:38:16,410 Power of 2, der passerer en værdi på 2,0 giver os en effekt på mindst 4. 682 00:38:16,410 --> 00:38:18,810 3.2 værker for 10,24. 683 00:38:18,810 --> 00:38:22,660 >> Nu kan vi gøre en lignende ting om magten på 3. 684 00:38:22,660 --> 00:38:25,330 Men nu kun ændre området. 685 00:38:25,330 --> 00:38:28,840 For dummy variabel i 1 gennem 3, gange 3 gange, 686 00:38:28,840 --> 00:38:29,830 og gøre det samme. 687 00:38:29,830 --> 00:38:32,240 >> Så det kan føle sig lidt forceret. 688 00:38:32,240 --> 00:38:34,270 Men der er en vigtig ting her som 689 00:38:34,270 --> 00:38:37,770 er, at se på disse to funktioner, der er 690 00:38:37,770 --> 00:38:43,600 kun én ting, der er anderledes, som er denne værdi i området. 691 00:38:43,600 --> 00:38:46,910 Alt andet om disse to funktioner, magt på 3 og effekt af 2, 692 00:38:46,910 --> 00:38:50,440 er faktisk identiske, fordi de arbejder på samme måde. 693 00:38:50,440 --> 00:38:53,460 >> Så på dette punkt, lidt alarmklokke skal gå af. 694 00:38:53,460 --> 00:38:56,200 Forhåbentlig, hvad du siger, du ved, det føles en lille smule 695 00:38:56,200 --> 00:38:59,250 ligesom dobbeltarbejde. 696 00:38:59,250 --> 00:39:02,950 Måske er der en måde, at jeg ville kunne indkapsle alt dette 697 00:39:02,950 --> 00:39:06,630 og giver en funktion eller oprette en funktion, 698 00:39:06,630 --> 00:39:11,550 gør præcis, hvad jeg vil, uden brug for at skrive det ud eksplicit. 699 00:39:11,550 --> 00:39:15,732 Og dette er, hvad magt af en lukning giver os mulighed for at gøre. 700 00:39:15,732 --> 00:39:16,940 Så lad os tage et kig på denne. 701 00:39:16,940 --> 00:39:18,700 Og jeg vil tilbringe et par minutter på denne, fordi dette 702 00:39:18,700 --> 00:39:20,310 er temmelig vigtigt for Swift. 703 00:39:20,310 --> 00:39:22,900 Vi ser det hele tiden. 704 00:39:22,900 --> 00:39:24,550 Vi kommer til at definere en funktion. 705 00:39:24,550 --> 00:39:26,380 Det kommer til at blive kaldt powerOf. 706 00:39:26,380 --> 00:39:29,470 Det kommer til at acceptere en parameter kaldet y af typen Int. 707 00:39:29,470 --> 00:39:32,220 Men tag et kig på afkastet type. 708 00:39:32,220 --> 00:39:38,730 Afkastet type er, i parenteser, Dobbelt pil Double. 709 00:39:38,730 --> 00:39:43,370 Hvilket betyder, at denne funktion, denne funktion powerOf, 710 00:39:43,370 --> 00:39:46,550 returnerer en funktion. 711 00:39:46,550 --> 00:39:50,845 Det er at acceptere en Double og returnere en dobbelt. 712 00:39:50,845 --> 00:39:53,720 Så det lyder måske slags skøre, men lad os rulle ned en lille smule 713 00:39:53,720 --> 00:39:55,060 og se på, hvad der sker. 714 00:39:55,060 --> 00:39:57,910 Vi er inde i denne funktion powerOf. 715 00:39:57,910 --> 00:40:00,760 Vi skaber en ny funktion kaldet exponentiator, 716 00:40:00,760 --> 00:40:02,900 men det er ligegyldigt, hvad det er. 717 00:40:02,900 --> 00:40:06,410 >> Læg mærke til, at dette har et input værdi af x. 718 00:40:06,410 --> 00:40:09,910 Og det tager i et dobbelt og returnere en dobbelt. 719 00:40:09,910 --> 00:40:16,320 Og det er den samme kode, som vi så ovenfor, bortset fra, at værdien af ​​2 720 00:40:16,320 --> 00:40:20,060 eller værdien af ​​3, at øvre grænse i dette område, 721 00:40:20,060 --> 00:40:23,210 er blevet erstattet med denne værdi af y, som 722 00:40:23,210 --> 00:40:27,230 var den oprindelige parameter vores powerOf funktion. 723 00:40:27,230 --> 00:40:31,700 Og på dette punkt, vi returnere exponentiator. 724 00:40:31,700 --> 00:40:33,345 Vi vender tilbage funktionen. 725 00:40:33,345 --> 00:40:36,300 726 00:40:36,300 --> 00:40:39,550 >> Det er lidt ligesom en lille sind blæser. 727 00:40:39,550 --> 00:40:44,360 Men lad os forestille os, hvad der sker når jeg kalder denne funktion powerOf 728 00:40:44,360 --> 00:40:47,610 og passere ind det en vis værdi som 2. 729 00:40:47,610 --> 00:40:50,020 Hvad dette betyder, er, at Jeg har nu værdien 730 00:40:50,020 --> 00:40:55,130 2 for y, hvilket betyder, at denne værdi å i denne exponentiator funktion 731 00:40:55,130 --> 00:40:56,410 vil være, at værdien 2. 732 00:40:56,410 --> 00:41:01,290 Men jeg returnere dette exponentiator funktion. 733 00:41:01,290 --> 00:41:05,900 >> Så mærke til, hvad Swift siger jeg har skabt i dette tilfælde. 734 00:41:05,900 --> 00:41:10,550 lad kvadrat er en definition, er det en funktion, der accepterer en dobbelt 735 00:41:10,550 --> 00:41:12,610 og returnerer en dobbelt. 736 00:41:12,610 --> 00:41:16,590 Jeg har oprettet en funktion at firkanter noget 737 00:41:16,590 --> 00:41:19,782 ved hjælp af denne mekanisme lige her. 738 00:41:19,782 --> 00:41:22,490 Og virkelig, hvad der sker, er at det vender tilbage denne funktion 739 00:41:22,490 --> 00:41:26,390 exponentiator, men denne værdi y er pakket inde i den. 740 00:41:26,390 --> 00:41:31,080 Og så nu hver gang jeg bruger denne variabel eller denne konstant kaldet 741 00:41:31,080 --> 00:41:35,180 firkantet, det går det at opføre sig som en funktion. 742 00:41:35,180 --> 00:41:39,960 Og så jeg kan derefter kalde denne variabel ligesom jeg ville kalde en funktion, 743 00:41:39,960 --> 00:41:43,830 og passerer ind i det et nummer, som i dette tilfælde 3. 744 00:41:43,830 --> 00:41:45,910 Og jeg vil så firkantet denne værdi. 745 00:41:45,910 --> 00:41:53,340 Så 3 kvadreret vil derefter bliver 9, som vi kan se her. 746 00:41:53,340 --> 00:41:56,530 >> Virkelig vanvittigt, men dette nu giver mig mulighed for 747 00:41:56,530 --> 00:41:59,040 at skabe andre powerOf funktioner. 748 00:41:59,040 --> 00:42:03,680 Ligesom jeg kan sige, OK, godt nu ønsker jeg at oprette en ny funktion, powerOf (3), 749 00:42:03,680 --> 00:42:06,290 og gemme det i en konstant kaldes terning. 750 00:42:06,290 --> 00:42:10,220 Og nu terning bliver en separat funktion som også vil 751 00:42:10,220 --> 00:42:14,800 tage en vis værdi som input og kube, værdi, som vi kan se i den nederste linje 752 00:42:14,800 --> 00:42:16,420 her. 753 00:42:16,420 --> 00:42:18,590 terning af 2 vil resultere i 8. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Forhåbentlig temmelig pæn ting. 756 00:42:22,680 --> 00:42:25,920 Du har aldrig set det før. 757 00:42:25,920 --> 00:42:29,990 Jeg vil opfordre dig til at se på lukninger og undersøge dette lidt mere. 758 00:42:29,990 --> 00:42:33,570 Det er virkelig kraftfuld ting, vi ser en masse i JavaScript og nogle andre sprog. 759 00:42:33,570 --> 00:42:37,160 Det er virkelig vigtigt at forståelse API samt 760 00:42:37,160 --> 00:42:38,620 at vi vil komme til at på bare et sekund. 761 00:42:38,620 --> 00:42:39,456 Ja? 762 00:42:39,456 --> 00:42:43,740 >> PUBLIKUM: Når du gør powerOf (2), parentes, og derefter 763 00:42:43,740 --> 00:42:48,764 anden parentes, en anden input-- du dybest set erstatte pladsen. 764 00:42:48,764 --> 00:42:50,930 DAN AMRMENDARIZ: Så kig i allersidste linje her. 765 00:42:50,930 --> 00:42:55,930 Det er faktisk helt muligt at gør at kæde som du foreslog. 766 00:42:55,930 --> 00:43:00,990 Så powerOf (5) betyder, at vi skal hen at have en exponentiator af 5 heroppe. 767 00:43:00,990 --> 00:43:04,160 Så dette er hovedsagelig vil være det samme som 4 til femte strøm, 768 00:43:04,160 --> 00:43:07,200 fordi vi har skabt et exponentiating fungere til femte strøm, 769 00:43:07,200 --> 00:43:09,920 og vi passerer ind der fungerer værdien 4. 770 00:43:09,920 --> 00:43:12,619 Og vi får denne værdi at vi forventer, 1024. 771 00:43:12,619 --> 00:43:14,785 PUBLIKUM: Og det er ikke et navn, så det gør det nemmere 772 00:43:14,785 --> 00:43:16,570 at læse, pladsen uanset hvad. 773 00:43:16,570 --> 00:43:17,903 >> DAN AMRMENDARIZ: Right, nøjagtigt. 774 00:43:17,903 --> 00:43:21,120 Så før jeg bare sætte det i en konstant her så 775 00:43:21,120 --> 00:43:23,808 at det gjorde det nemt at bruge det navn. 776 00:43:23,808 --> 00:43:24,308 Ja? 777 00:43:24,308 --> 00:43:26,942 >> PUBLIKUM: I denne sammenhæng powerOf, det er en del 778 00:43:26,942 --> 00:43:30,774 af programmeringssproget i modsætning til den måde, du 779 00:43:30,774 --> 00:43:33,952 tænk på powerOf i [uhørligt]? 780 00:43:33,952 --> 00:43:35,660 DAN AMRMENDARIZ: Så i dette tilfælde, powerOf 781 00:43:35,660 --> 00:43:39,280 er simpelthen navnet på den funktion, som jeg definerede heroppe. 782 00:43:39,280 --> 00:43:41,801 Så det er ikke iboende til selve sproget, 783 00:43:41,801 --> 00:43:43,550 men i stedet, det er bare en funktion, der har 784 00:43:43,550 --> 00:43:45,628 det navn, fordi jeg giver det det navn. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 Andre spørgsmål? 787 00:43:51,920 --> 00:43:52,800 Okay. 788 00:43:52,800 --> 00:43:54,750 >> Nu er dette er stor. 789 00:43:54,750 --> 00:43:58,170 Men du kommer ikke til at se en masse lukning funktioner, 790 00:43:58,170 --> 00:44:03,440 er ligesom dette, hvor du definerer, inde af én funktion, en anden funktion. 791 00:44:03,440 --> 00:44:04,320 Og du kan gøre det. 792 00:44:04,320 --> 00:44:06,430 Men det er slags ikke virkelig nødvendigt, ikke? 793 00:44:06,430 --> 00:44:09,189 Ligesom hvorfor jeg definere denne funktion kaldet exponentiator 794 00:44:09,189 --> 00:44:10,480 og derefter straks returnere den. 795 00:44:10,480 --> 00:44:15,220 Hvorfor kan jeg ikke bare med det samme returnere denne funktion? 796 00:44:15,220 --> 00:44:18,890 >> Og i virkeligheden, det er netop ideen bag et koncept kaldet 797 00:44:18,890 --> 00:44:22,410 anonyme funktioner, hvor anonyme funktioner faktisk ikke 798 00:44:22,410 --> 00:44:25,270 har et navn, fordi de behøver ikke at have en. 799 00:44:25,270 --> 00:44:28,700 Og så i dette tilfælde, i 7B, vi kan finde netop det. 800 00:44:28,700 --> 00:44:31,470 Det er alle den samme kode, gør præcis det samme, 801 00:44:31,470 --> 00:44:35,570 men nu har vi ændret det lidt, så at denne powerOf straks, 802 00:44:35,570 --> 00:44:37,750 returnerer en funktion. 803 00:44:37,750 --> 00:44:44,150 Bemærk, at efter tilbagevenden, der er en åben krøllet beslag. 804 00:44:44,150 --> 00:44:46,410 Det forventer denne indgang Dobbelt. 805 00:44:46,410 --> 00:44:48,560 Det forventer, at produktionen Dobbelt. 806 00:44:48,560 --> 00:44:52,175 Og så i nøgleordet adskiller selve koden. 807 00:44:52,175 --> 00:44:53,550 Så dette er en anonym funktion. 808 00:44:53,550 --> 00:44:57,030 Det behøver faktisk ikke har et navn, mens før det blev kaldt exponentiator. 809 00:44:57,030 --> 00:45:00,229 Men som vi så, bare virkelig ikke henvise til exponentiator 810 00:45:00,229 --> 00:45:01,270 uden for denne funktion. 811 00:45:01,270 --> 00:45:02,470 Så det gjorde ikke noget. 812 00:45:02,470 --> 00:45:06,300 Så denne anonyme funktion er såkaldte fordi det er navnløs, 813 00:45:06,300 --> 00:45:09,107 men det er stadig bliver brugt i forbindelse med denne kode. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> De næste par dem jeg er vil fortsætte forhåbentlig 816 00:45:16,079 --> 00:45:17,370 blæser dit sind en lille smule. 817 00:45:17,370 --> 00:45:20,410 Vi kan forenkle dette endnu mere. 818 00:45:20,410 --> 00:45:24,490 Fordi som var astutely påpegede tidligere, 819 00:45:24,490 --> 00:45:29,100 måske vi faktisk kender, ved udlede denne kode, hvad 820 00:45:29,100 --> 00:45:31,750 produktionen af ​​denne kode vil være. 821 00:45:31,750 --> 00:45:38,180 Og i virkeligheden, i denne anonyme funktion, Vi kan faktisk udlede de typer af data. 822 00:45:38,180 --> 00:45:41,650 >> Så i denne ene, vi ikke længere nødt til eksplicit at definere 823 00:45:41,650 --> 00:45:44,850 den type data, der bliver input og output fra denne funktion 824 00:45:44,850 --> 00:45:45,890 for et par grunde. 825 00:45:45,890 --> 00:45:51,390 Den ene er, at vi har defineret, op på den prototype af den omsluttende funktion, 826 00:45:51,390 --> 00:45:55,770 hvilken type data denne anonyme funktionen skal input og output. 827 00:45:55,770 --> 00:45:57,900 Og fra den anden, vi kan udlede koden 828 00:45:57,900 --> 00:46:01,930 ned her, at vi accepterer input, der er af typen Dobbelt 829 00:46:01,930 --> 00:46:03,670 og returnere en dobbelt. 830 00:46:03,670 --> 00:46:07,890 >> Bemærk, at vi her ikke har eksplicit defineret navnene på de argumenter 831 00:46:07,890 --> 00:46:11,220 at denne funktion er at acceptere. 832 00:46:11,220 --> 00:46:16,180 Og så ser vi, vi kan henvise til disse parametre ved hjælp $ 0, $ 1, 833 00:46:16,180 --> 00:46:20,140 så videre og så videre, afhængig af antallet af denne parameter anvendes 834 00:46:20,140 --> 00:46:20,850 i denne funktion. 835 00:46:20,850 --> 00:46:23,370 836 00:46:23,370 --> 00:46:29,740 >> Det er noget, som du vil at se en masse er denne åbne krøllet beslag 837 00:46:29,740 --> 00:46:32,797 definition efterfulgt af en $ 0, og derefter nogle drift, 838 00:46:32,797 --> 00:46:34,130 og derefter en lukket krøllet beslag. 839 00:46:34,130 --> 00:46:38,630 Det er en anonym funktion der udfører denne operation. 840 00:46:38,630 --> 00:46:42,940 Det har denne parameter, hvor det er type er udledes. 841 00:46:42,940 --> 00:46:44,860 Det første parameter er $ 0. 842 00:46:44,860 --> 00:46:49,010 Og nogle operation er sker på det $ 0. 843 00:46:49,010 --> 00:46:52,100 >> PUBLIKUM: Så dollartegn betyder parameter som udgangspunkt, 844 00:46:52,100 --> 00:46:53,429 og 0 betyder den første? 845 00:46:53,429 --> 00:46:54,720 DAN ARMENDARIZ: Det er korrekt. 846 00:46:54,720 --> 00:46:59,100 Så dollartegn dybest set betyder parameter, og 0 betyder den første. 847 00:46:59,100 --> 00:47:02,760 Men det fungerer specifikt i dette tilfælde, hvor jeg ikke har navngivet 848 00:47:02,760 --> 00:47:07,940 argumenterne i mit anonyme funktion. 849 00:47:07,940 --> 00:47:11,119 >> PUBLIKUM: Er Perl eller noget har denne dollartegn, dollar 0 derinde? 850 00:47:11,119 --> 00:47:12,702 DAN ARMENDARIZ: Er der, jeg er ked af? 851 00:47:12,702 --> 00:47:15,360 PUBLIKUM: Er Perl har denne dollaren 0, dollar 1-- 852 00:47:15,360 --> 00:47:17,318 DAN ARMENDARIZ: Jeg er ikke alt for bekendt med Perl, 853 00:47:17,318 --> 00:47:21,340 men PHP hvad definerer variabler baseret på dollartegn. 854 00:47:21,340 --> 00:47:26,120 Og der kan være nogle sprog der har funktioner som denne. 855 00:47:26,120 --> 00:47:28,240 Faktisk Swift låner masse funktioner som denne 856 00:47:28,240 --> 00:47:29,489 fra en masse andre sprog. 857 00:47:29,489 --> 00:47:32,380 Vi ser antydninger af Python i det. 858 00:47:32,380 --> 00:47:35,800 Denne definition af type synes at komme fra OCaml. 859 00:47:35,800 --> 00:47:38,932 Og vi har bare en hel masse ting fra masser af forskellige sprog. 860 00:47:38,932 --> 00:47:40,640 Det er en af ​​de nice ting om Swift 861 00:47:40,640 --> 00:47:43,390 er, at det tager en masse af de bedste ideer fra en flok af sprog 862 00:47:43,390 --> 00:47:47,229 og skohorn dem alle sammen i en super sprog. 863 00:47:47,229 --> 00:47:49,520 Faktisk, hvis du tillader mig at fortsætte med at blæse dit sind, 864 00:47:49,520 --> 00:47:51,000 så vi har gjort alt dette. 865 00:47:51,000 --> 00:47:56,690 Vi kan måske forenkle denne lidt bit ved at indse, at, selvfølgelig, 866 00:47:56,690 --> 00:48:02,120 Swift har en exponentiating funktion indbygget. 867 00:48:02,120 --> 00:48:04,660 Hvis jeg importere Darwin, som er blot det bibliotek, 868 00:48:04,660 --> 00:48:09,680 udstyret med denne funktion kaldes pow, nu Jeg kan forenkle min magt for funktion 869 00:48:09,680 --> 00:48:11,830 til at være følgende. 870 00:48:11,830 --> 00:48:15,860 Det vil vende tilbage disse anonyme funktion. 871 00:48:15,860 --> 00:48:17,950 >> Men se på, hvordan enkle det er nu. 872 00:48:17,950 --> 00:48:22,780 Dette er en anonym funktion, accepterer en form for data, 873 00:48:22,780 --> 00:48:26,600 og det vil være en argument specifikt 874 00:48:26,600 --> 00:48:29,320 refereres på $ 0 der er af typen dobbelt. 875 00:48:29,320 --> 00:48:32,680 Det kommer til at returnere en type dobbelt. 876 00:48:32,680 --> 00:48:35,760 Men afkastet erklæring nu implicit. 877 00:48:35,760 --> 00:48:39,990 >> Og det er netop denne stil, der er meget, meget udbredt i Swift, 878 00:48:39,990 --> 00:48:40,790 over det hele. 879 00:48:40,790 --> 00:48:43,190 Vi kommer til at se denne hele tiden i Swift. 880 00:48:43,190 --> 00:48:46,150 Så jeg viser alt dette til du på grund af denne syntaks. 881 00:48:46,150 --> 00:48:49,070 Dette er meget almindeligt at se, hvilket betyder, at det 882 00:48:49,070 --> 00:48:51,420 er en anonym funktion der udfører 883 00:48:51,420 --> 00:48:54,640 nogle operation på disse argumenter. 884 00:48:54,640 --> 00:48:56,940 Og der er en implicit afkast. 885 00:48:56,940 --> 00:49:01,850 Så det er absolut det samme for os at sige det, lige her. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> Fordi denne krøllede beslag er en funktion, 888 00:49:08,150 --> 00:49:10,480 vi er udføre denne operation på det første argument. 889 00:49:10,480 --> 00:49:12,170 Vi kommer til at returnere det. 890 00:49:12,170 --> 00:49:14,815 Men denne ydre afkast er tilbage, at hele funktionen, 891 00:49:14,815 --> 00:49:19,855 at hele anonym funktion at vi netop har oprettet. 892 00:49:19,855 --> 00:49:21,689 Andre spørgsmål? 893 00:49:21,689 --> 00:49:23,980 Okay, jeg ved ikke, om du fyre er klar til dette, 894 00:49:23,980 --> 00:49:27,455 men vi kan gå endnu mere skørt med Swift. 895 00:49:27,455 --> 00:49:28,560 Er du klar? 896 00:49:28,560 --> 00:49:29,930 OK, det er fantastisk. 897 00:49:29,930 --> 00:49:35,310 >> Nu vi faktisk har mulighed til, i Swift, på grund af hvordan modulær 898 00:49:35,310 --> 00:49:39,650 og hvordan protokol baseret det er, at definere vores egne freaking operatører. 899 00:49:39,650 --> 00:49:44,060 Ligesom i dette tilfælde, havde vi ingen operatør for exponentiation-- godt, 900 00:49:44,060 --> 00:49:47,990 til at udføre beføjelser noget. 901 00:49:47,990 --> 00:49:53,632 Men jeg kan, i Swift, definere et nyt operatør, der gør netop det. 902 00:49:53,632 --> 00:49:55,590 Så i dette tilfælde er der en flok af syntaks her. 903 00:49:55,590 --> 00:49:59,980 Og jeg vil give dig mulighed for at se på det hjemme, når man ser på dette. 904 00:49:59,980 --> 00:50:06,890 Men vi definerer denne Infix operatør, **, som derefter vil give os mulighed for, 905 00:50:06,890 --> 00:50:09,840 ved at definere, hvad det funktion ** faktisk 906 00:50:09,840 --> 00:50:15,010 betyder, at acceptere en venstre hånd side og en højre side, 907 00:50:15,010 --> 00:50:21,190 og derefter at returnere eksponenten af ​​denne venstre side til højre side. 908 00:50:21,190 --> 00:50:24,850 >> Og så nu lige pludselig, jeg har skabt en ny tæller. 909 00:50:24,850 --> 00:50:29,490 Så 2 ** 3 betyder 2 til den tredje magt. 910 00:50:29,490 --> 00:50:34,420 [Husk blæser SOUND] Dette ved selv bør gøre dig være ligesom, 911 00:50:34,420 --> 00:50:37,960 OK, skrue C. Jeg har tænkt mig Swift hele vejen. 912 00:50:37,960 --> 00:50:38,740 Det her er godt. 913 00:50:38,740 --> 00:50:40,140 Dette er temmelig fantastisk. 914 00:50:40,140 --> 00:50:42,240 >> Selvom dette er et godt eksempel. 915 00:50:42,240 --> 00:50:45,570 Men jeg har aldrig en gang udenfor i dette eksempel faktisk 916 00:50:45,570 --> 00:50:46,800 defineret min egen operatør. 917 00:50:46,800 --> 00:50:49,710 Men stadig, det viser en masse af magt Swift 918 00:50:49,710 --> 00:50:54,050 og hvorfor det er faktisk virkelig meget cool. 919 00:50:54,050 --> 00:50:55,832 OK, ja? 920 00:50:55,832 --> 00:50:57,790 PUBLIKUM: Hvis du er definere din egen operatør, 921 00:50:57,790 --> 00:51:02,940 hvordan kan du vide, at du ikke ved et uheld forsøge at skabe en operatør, der er 922 00:51:02,940 --> 00:51:06,040 i et sted i C, som skjult et sted i Swift, 923 00:51:06,040 --> 00:51:12,210 som en obskur, du måske ikke har set før. 924 00:51:12,210 --> 00:51:15,050 >> DAN ARMENDARIZ: Så hvis du forsøger at definere dine egne operatører, 925 00:51:15,050 --> 00:51:20,970 der er risiko for at definere en over en eksisterende operatør. 926 00:51:20,970 --> 00:51:24,870 Det går ind i en detaljeringsgrad, Jeg tror ikke, vi har tid til at gå over. 927 00:51:24,870 --> 00:51:27,620 Men det er en risiko. 928 00:51:27,620 --> 00:51:31,320 Og det er i virkeligheden selve grunden Jeg brugte ikke indsætningstegn symbol, som 929 00:51:31,320 --> 00:51:36,210 når vi skriver ud magt, vi normalt bruge 4 lidt indskudsmærke 5 eller noget 930 00:51:36,210 --> 00:51:40,560 sådan, netop når vi er Gchatting venner eller hvad. 931 00:51:40,560 --> 00:51:43,660 Men i dette tilfælde, der rent faktisk ville have forårsaget en kollision. 932 00:51:43,660 --> 00:51:46,450 Og så jeg undgik det, bare fordi Jeg sket til at vide, i dette tilfælde 933 00:51:46,450 --> 00:51:50,430 at det ville medføre, at kollision. 934 00:51:50,430 --> 00:51:52,270 >> Okay. 935 00:51:52,270 --> 00:51:55,080 Nu desværre, for de sidste syv minutter, 936 00:51:55,080 --> 00:51:57,410 Jeg er nødt til at holde blæser jeres sind en lille smule. 937 00:51:57,410 --> 00:52:00,230 Så tillad mig at vise dig nogle andre ting også. 938 00:52:00,230 --> 00:52:03,710 >> Vi har vist dig denne idé om have disse anonyme funktioner, 939 00:52:03,710 --> 00:52:07,040 disse lukninger, der giver dig mulighed for at slags pass funktioner rundt. 940 00:52:07,040 --> 00:52:08,100 Du kan returnere dem. 941 00:52:08,100 --> 00:52:09,490 Du kan manipulere dem. 942 00:52:09,490 --> 00:52:11,790 Du kan gøre alle mulige skøre ting. 943 00:52:11,790 --> 00:52:14,850 >> Men en anden ting, sker for at være nyttige 944 00:52:14,850 --> 00:52:19,740 er evnen til at, i modsætning til at returnere disse funktioner 945 00:52:19,740 --> 00:52:25,146 i en funktion, til at passere en funktion som en parameter til en anden funktion. 946 00:52:25,146 --> 00:52:30,430 Du kan tænke godt hvorfor på jorden ville jeg ønsker at gøre sådan noget? 947 00:52:30,430 --> 00:52:33,660 >> Nå, lad os sige, at jeg vil have at tage denne operatør, som jeg 948 00:52:33,660 --> 00:52:40,260 arbejdet så hårdt for at skabe og anvende det til en masse forskellige numre 949 00:52:40,260 --> 00:52:41,770 i et array. 950 00:52:41,770 --> 00:52:46,700 Så i dette tilfælde har jeg en bred vifte af integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 Og jeg ønsker at fordoble dem alle. 952 00:52:48,080 --> 00:52:50,430 Den måde, som vi ville typisk gøre det er bare at skrive 953 00:52:50,430 --> 00:52:53,440 en simpel for løkke, gentager end dem alle 954 00:52:53,440 --> 00:52:57,140 og udfører en slags firkantet drift over dem, 955 00:52:57,140 --> 00:53:02,700 indlæsning af disse nye værdier i en ny variabel, eller rettere, en ny matrix her. 956 00:53:02,700 --> 00:53:07,370 Og værdien af ​​produktionen af Resultatet er derefter alle disse arrays, 957 00:53:07,370 --> 00:53:10,200 eller rettere alle de elementer nu potens. 958 00:53:10,200 --> 00:53:12,680 >> Og vi kunne gøre det samme ting for cubing det, 959 00:53:12,680 --> 00:53:15,360 men lidt alarmklokke bør være at gå ud 960 00:53:15,360 --> 00:53:17,360 siger, at måske er der en måde, som vi ville 961 00:53:17,360 --> 00:53:19,860 kunne forenkle denne lidt. 962 00:53:19,860 --> 00:53:21,130 Og i virkeligheden er der. 963 00:53:21,130 --> 00:53:25,320 Hvad hvis vi kunne skabe en funktion, der giver os 964 00:53:25,320 --> 00:53:28,350 at acceptere, som et rovdyr, en funktion? 965 00:53:28,350 --> 00:53:30,350 Så i dette tilfælde, tage en se på disse argumenter. 966 00:53:30,350 --> 00:53:33,220 Vi kommer til at acceptere en liste over double. 967 00:53:33,220 --> 00:53:35,030 Og så vil vi at acceptere en funktion 968 00:53:35,030 --> 00:53:40,990 i en variabel kaldet f, der vil at tage en dobbelt og returnere en Double. 969 00:53:40,990 --> 00:53:43,320 Og hele produktionen af hele denne funktion 970 00:53:43,320 --> 00:53:47,310 kaldes mapper vil returnere et array kaldet dobbelt. 971 00:53:47,310 --> 00:53:52,380 >> Hvad det ville så tillade mig at gøre, er at gentage over listen 972 00:53:52,380 --> 00:53:56,350 og gøre de samme ting, men nu anvende denne funktion på hver 973 00:53:56,350 --> 00:53:58,970 af de enkelte værdier i denne liste. 974 00:53:58,970 --> 00:54:00,750 Så jeg ved ikke rigtig, hvad f er. 975 00:54:00,750 --> 00:54:02,010 Det betyder ikke noget for mig. 976 00:54:02,010 --> 00:54:06,530 Men så længe det tager i en dobbelt, udfører en operation på det, 977 00:54:06,530 --> 00:54:08,640 og derefter returnerer en Dobbelt, ville jeg så være 978 00:54:08,640 --> 00:54:13,415 stand til at kortlægge denne funktion på tværs hvert enkelt element i listen. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> Og denne form for programmering er kaldet højere ordens funktioner, 981 00:54:20,930 --> 00:54:24,440 hvor vi passerer funktioner rundt som parametre 982 00:54:24,440 --> 00:54:26,430 og gøre tingene med funktioner. 983 00:54:26,430 --> 00:54:29,640 Det er lidt ligesom at tage alle disse idéer, som vi har lært i CS50 984 00:54:29,640 --> 00:54:31,390 og tage dem sortere af til det næste niveau. 985 00:54:31,390 --> 00:54:34,140 Og det er alt CS51 stil stuff. 986 00:54:34,140 --> 00:54:37,080 Og så vil vi gå i dybden mere i klasserne som. 987 00:54:37,080 --> 00:54:38,930 >> Men det er også vigtigt her, fordi vi 988 00:54:38,930 --> 00:54:42,010 se en masse funktioner som anvendes i Swift 989 00:54:42,010 --> 00:54:45,590 at stort set gør dette, hvor vi har 990 00:54:45,590 --> 00:54:48,300 nogle numre, hvoraf nogle matrix af tal. 991 00:54:48,300 --> 00:54:50,850 Vi kommer til at videregive denne array i vores Mapper. 992 00:54:50,850 --> 00:54:55,770 Og vi vil også passerer en funktion, som 993 00:54:55,770 --> 00:54:57,950 vi har allerede defineret heroppe. 994 00:54:57,950 --> 00:54:59,690 Det kommer til at være firkantet. 995 00:54:59,690 --> 00:55:02,220 Og vi vil da square alle disse numre 996 00:55:02,220 --> 00:55:04,710 og gemme disse i dette resultat her. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Så dette tilfælde har vi defineret vores egen funktion kaldet Mapper. 999 00:55:11,000 --> 00:55:15,370 Men netop dette ting er, faktisk indbygget i Swift. 1000 00:55:15,370 --> 00:55:18,960 Der er en række funktioner kaldes kort. 1001 00:55:18,960 --> 00:55:21,520 Der er et kort-funktion, der er en reduktion funktion, 1002 00:55:21,520 --> 00:55:25,630 og der er et filter-funktion, som i det væsentlige anvender funktioner 1003 00:55:25,630 --> 00:55:30,782 til hver enkelt element i en liste til at ændre dem på nogen måde. 1004 00:55:30,782 --> 00:55:34,510 >> PUBLIKUM: Så da du omdanne data i et andet format 1005 00:55:34,510 --> 00:55:36,134 gennem en function-- 1006 00:55:36,134 --> 00:55:37,050 DAN ARMENDARIZ: Right. 1007 00:55:37,050 --> 00:55:39,420 Ja, så funktionen at vi accepterer 1008 00:55:39,420 --> 00:55:41,790 er at omdanne data i en eller anden måde. 1009 00:55:41,790 --> 00:55:44,700 I dette tilfælde var vi enten kvadratur det, eller vi cubing det, 1010 00:55:44,700 --> 00:55:50,060 eller virkelig, kunne vi udføre ingen operation på det overhovedet. 1011 00:55:50,060 --> 00:55:54,150 >> Men lad mig vise dig så, hvordan dette kommer til at se i praksis. 1012 00:55:54,150 --> 00:55:56,681 Og igen, jeg kører en lidt tid. så jeg er ikke 1013 00:55:56,681 --> 00:55:59,430 vil være i stand til at gå over alle af kildekoden i detaljer her. 1014 00:55:59,430 --> 00:56:00,721 Men jeg vil opfordre dig til at gøre det. 1015 00:56:00,721 --> 00:56:03,850 Vi vil sende den så hurtigt som muligt efter denne snak. 1016 00:56:03,850 --> 00:56:07,610 >> Men hvis du tager et kig på dette, antage, at vi har en liste af tal, 1017 00:56:07,610 --> 00:56:10,260 et array af numre i denne variable kaldte numre. 1018 00:56:10,260 --> 00:56:16,670 Så ønsker vi at udføre denne filter operation på disse numre. 1019 00:56:16,670 --> 00:56:19,730 Så filter er et højere For funktion, 1020 00:56:19,730 --> 00:56:24,660 accepterer et array og også en funktion. 1021 00:56:24,660 --> 00:56:28,760 Og på hvert element i det array, det udfører denne funktion. 1022 00:56:28,760 --> 00:56:31,990 >> Hvis denne funktion returnerer sandt, det holder denne post. 1023 00:56:31,990 --> 00:56:36,100 Hvis denne funktion returnerer falsk, det kaster væk, at elementet. 1024 00:56:36,100 --> 00:56:40,480 Og så er det returnerer en liste som derefter består alle 1025 00:56:40,480 --> 00:56:44,360 af disse elementer, der er blevet filtreret. 1026 00:56:44,360 --> 00:56:47,150 >> Så i et andet ord, dette er den samme idé, Karakterbog. 1027 00:56:47,150 --> 00:56:50,800 Vi kan have en række forskellige kvaliteter i denne værdi kaldes numre. 1028 00:56:50,800 --> 00:56:55,590 Kunne være 100, og 70, og 40, så videre og så videre. 1029 00:56:55,590 --> 00:56:59,110 Hvad dette filter gør, er varsel at dette er, at syntaktisk sukker 1030 00:56:59,110 --> 00:57:01,310 for en anonym funktion. 1031 00:57:01,310 --> 00:57:05,980 Dette er en anonym funktion siger at den parameter, som jeg accepterer 1032 00:57:05,980 --> 00:57:09,690 vil være, hvis den er større end 70, 1033 00:57:09,690 --> 00:57:15,837 så vil returnere sandt, hvilket betyder, at denne post vil blive holdt i dette filter. 1034 00:57:15,837 --> 00:57:17,920 Så lad os være en lille smule mere konkret om dette. 1035 00:57:17,920 --> 00:57:25,760 Hvis jeg har denne vifte af numre og det består af 100, 70 og 40, 1036 00:57:25,760 --> 00:57:29,730 Jeg udfører dette filter drift på hver af dem. 1037 00:57:29,730 --> 00:57:33,270 Således at første er denne værdi på 100. 1038 00:57:33,270 --> 00:57:36,770 100 større end eller lig til 70 er korrekt, hvilket 1039 00:57:36,770 --> 00:57:41,950 betyder, at 100 er holdt i denne nye kopi af dette array. 1040 00:57:41,950 --> 00:57:44,290 70 også passerer. 1041 00:57:44,290 --> 00:57:46,020 Men 40 ikke. 1042 00:57:46,020 --> 00:57:54,290 Så hvad der er tilbage i passingCount er den vifte af elementerne 100 og 70-- 1043 00:57:54,290 --> 00:57:57,410 100, komma, 70. 1044 00:57:57,410 --> 00:57:59,870 De var de eneste to elementer, der blev holdt. 1045 00:57:59,870 --> 00:58:03,740 Og så grunden til at jeg hurtigt gik igennem en masse af disse slags høj orden 1046 00:58:03,740 --> 00:58:08,680 ting er, fordi dette er, at fælles ting, som du vil se i Swift temmelig 1047 00:58:08,680 --> 00:58:16,810 hyppigt, udfører nogle operation ved hjælp af denne anonyme funktion syntaks. 1048 00:58:16,810 --> 00:58:18,450 >> Der er nogle seje ting. 1049 00:58:18,450 --> 00:58:24,730 Skifter er virkelig kraftfuld i Swift, Jeg mener bare som en sindssyg, skør kraftfuld. 1050 00:58:24,730 --> 00:58:28,250 Du kan bruge switch, og du kan faktisk anvende dem 1051 00:58:28,250 --> 00:58:33,160 til intervaller, hvilket slags skøre, og har lyst til den slags. 1052 00:58:33,160 --> 00:58:37,540 >> Men i de sidste par minutter, Jeg ønsker at springe fremad temmelig langt 1053 00:58:37,540 --> 00:58:46,940 og vise dig et konkret eksempel på, hvordan vi kan skabe i iOS app ved hjælp af Swift. 1054 00:58:46,940 --> 00:58:49,040 Så når du laver dette, vil du nødt til at tage 1055 00:58:49,040 --> 00:58:51,990 et kig at-- på Apples dokumentation, de 1056 00:58:51,990 --> 00:58:56,084 har en masse rigtig gode tutorials for at skabe din første ansøgning. 1057 00:58:56,084 --> 00:58:58,250 Og jeg vil opfordre dig til at gøre at fordi de tager dig 1058 00:58:58,250 --> 00:59:04,110 gennem alle trinene hvad til klik på for at oprette en iOS ansøgning. 1059 00:59:04,110 --> 00:59:07,290 >> Men her har vi denne iOS app. 1060 00:59:07,290 --> 00:59:10,960 Og det er en temmelig simpel app virkelig. 1061 00:59:10,960 --> 00:59:13,840 Hvis jeg køre dette, lad mig vise dig, hvad det ligner. 1062 00:59:13,840 --> 00:59:19,480 Alt det væsentlige gør, er det trækker fra internettet en JSON-fil 1063 00:59:19,480 --> 00:59:22,300 at jeg har lagret på en server. 1064 00:59:22,300 --> 00:59:26,310 Og det JSON fil definerer billeder, der tillader 1065 00:59:26,310 --> 00:59:31,680 mig derefter cykle igennem, på min app, billeder fra min web-server. 1066 00:59:31,680 --> 00:59:32,880 >> Så jeg har her getNextImage. 1067 00:59:32,880 --> 00:59:37,100 Den indlæser et billede fra internettet, og så viser det på skærmen. 1068 00:59:37,100 --> 00:59:38,200 >> Så det er ret simpelt. 1069 00:59:38,200 --> 00:59:41,550 Men målet her er at vise dig, hvordan vi kan kombinere tingene 1070 00:59:41,550 --> 00:59:47,820 fra sidstnævnte par uger CS50 til en egentlig iOS ansøgning. 1071 00:59:47,820 --> 00:59:53,140 Med andre ord, måske en af ​​de ting, som du gerne vil gøre 1072 00:59:53,140 --> 00:59:56,340 er at have en iOS program, kan trække data fra internettet 1073 00:59:56,340 --> 00:59:59,070 og vise brugeren nogle oplysninger. 1074 00:59:59,070 --> 01:00:03,130 Det er helt punktet af denne kildekode her. 1075 01:00:03,130 --> 01:00:07,890 >> Så der er en masse at sige om hvordan man gør selve iOS udvikling. 1076 01:00:07,890 --> 01:00:12,860 Der er en masse skøre syntaks at vi ikke har set helt endnu 1077 01:00:12,860 --> 01:00:15,580 som en klasse, hvad en klasse egentlig er. 1078 01:00:15,580 --> 01:00:19,470 Vi kan stort set ignorere at for tiden. 1079 01:00:19,470 --> 01:00:23,250 >> Men se, at vi har indeholdt inden for denne en række ting 1080 01:00:23,250 --> 01:00:27,720 at vi allerede har set ligesom funktioner, der har specifikke navne. 1081 01:00:27,720 --> 01:00:32,650 Og når vi giver dem fungerer de korrekte navne 1082 01:00:32,650 --> 01:00:36,530 der forventes af iOS, i virkeligheden det føles en lille smule magisk. 1083 01:00:36,530 --> 01:00:40,300 Men når du opretter en iOS applikation, der 1084 01:00:40,300 --> 01:00:47,590 er særlige funktion navne, bliver kaldt af selve telefonen 1085 01:00:47,590 --> 01:00:52,440 som ansøgningen indlæser at prøve at skabe den proces, der faktisk 1086 01:00:52,440 --> 01:00:54,787 kører din ansøgning. 1087 01:00:54,787 --> 01:00:58,120 Så igen, der er en masse ting, som jeg nødt til at glans over her i rækkefølge for os 1088 01:00:58,120 --> 01:01:00,570 at tale om dette specifikt. 1089 01:01:00,570 --> 01:01:06,050 Men jeg vil opfordre dig til at se på måske den anden iOS seminaret, men også nogle 1090 01:01:06,050 --> 01:01:09,290 af tutorials online, som gør en langt bedre stykke arbejde med at beskrive 1091 01:01:09,290 --> 01:01:11,030 de specifikke oplysninger. 1092 01:01:11,030 --> 01:01:15,760 >> Men vi kan se et par ting, er interessante fra koden her. 1093 01:01:15,760 --> 01:01:17,950 Bemærk, at vi har, hvis udsagn. 1094 01:01:17,950 --> 01:01:20,400 Af den måde, en vigtig ting om hvis udsagn 1095 01:01:20,400 --> 01:01:24,860 er, at parenteserne omkring Boolsk udtryk er valgfri. 1096 01:01:24,860 --> 01:01:30,800 Men de krøllede parenteser ikke er valgfri, uanset hvor få eller mange linjer kode 1097 01:01:30,800 --> 01:01:32,360 du har i en if-sætning. 1098 01:01:32,360 --> 01:01:38,670 Du kan ikke have en, hvis udsagn uden krøllede parenteser i Swift. 1099 01:01:38,670 --> 01:01:41,000 >> Og det er, godt, en slags fjollet. 1100 01:01:41,000 --> 01:01:43,910 Men der er historiske grunde til. 1101 01:01:43,910 --> 01:01:46,180 Det er meningen at redde dig fra dig selv. 1102 01:01:46,180 --> 01:01:49,899 Ligesom dette for eksempel, kan du ikke fjerne de krøllede parenteser omkring, 1103 01:01:49,899 --> 01:01:50,440 hvis erklæring. 1104 01:01:50,440 --> 01:01:52,730 De er faktisk kræves. 1105 01:01:52,730 --> 01:01:54,480 Så jeg opfordre dig til at tage et kig på dette. 1106 01:01:54,480 --> 01:01:56,230 Men der er endnu en konstruere, at jeg ønsker 1107 01:01:56,230 --> 01:02:02,640 til at vise dig om Swift, der er nyt for Swift 2,0 sammenlignet 1108 01:02:02,640 --> 01:02:08,460 til ældre versioner af Swift, som er følgende. 1109 01:02:08,460 --> 01:02:11,620 Lad os se, hvor jeg sætte det her? 1110 01:02:11,620 --> 01:02:16,630 >> Så i denne funktion kaldes fetchJSON, denne funktion 1111 01:02:16,630 --> 01:02:23,450 er ansvarlig for at trække, at JSON fil fra en URL, der bare så sker 1112 01:02:23,450 --> 01:02:26,310 at køre på min CS50 IDE. 1113 01:02:26,310 --> 01:02:28,580 Jeg er lige begyndt Apache, sætte min JSON fil der, 1114 01:02:28,580 --> 01:02:32,110 og jeg er i stand til træk derefter at data fra internettet ved hjælp af 1115 01:02:32,110 --> 01:02:36,430 denne funktion, og denne webadresse, som leveres af telefonen. 1116 01:02:36,430 --> 01:02:40,490 Det er forudsat af en bibliotek, som du bruger, når 1117 01:02:40,490 --> 01:02:43,140 du laver nogle iOS app udvikling. 1118 01:02:43,140 --> 01:02:49,690 >> Bemærk her, at der er denne usædvanlige syntaktiske konstruktion kaldet vagt. 1119 01:02:49,690 --> 01:02:53,530 Og virkelig alt dette er i Swift er en måde at kontrollere 1120 01:02:53,530 --> 01:02:56,870 at nogle ting har blevet opfyldt, før du 1121 01:02:56,870 --> 01:03:00,000 fortsætte med resten af ​​funktionen. 1122 01:03:00,000 --> 01:03:04,260 Så jeg kunne have, hjælp denne valgfri type, 1123 01:03:04,260 --> 01:03:10,530 Jeg kunne have fundet den URL ved kører denne NSURL funktion 1124 01:03:10,530 --> 01:03:16,640 og lagring af det til en URL konstant, og derefter kontrollere 1125 01:03:16,640 --> 01:03:20,820 at se, om URL var nul, fordi det skulle returnere en valgfri type. 1126 01:03:20,820 --> 01:03:25,660 Og hvis det var lig nul, så ville jeg udskrive en fejl, og derefter vende tilbage. 1127 01:03:25,660 --> 01:03:29,970 >> Men i stedet, hvad vagt lader os gør, er, at meget ting, 1128 01:03:29,970 --> 01:03:34,550 men sikre, at det er faktisk sådan, at url 1129 01:03:34,550 --> 01:03:38,020 er blevet korrekt indstillet af NSURL. 1130 01:03:38,020 --> 01:03:41,810 Og hvis det er, så er det springer i dette, og det 1131 01:03:41,810 --> 01:03:46,110 vil tillade dig at gå videre med URL blevet defineret korrekt. 1132 01:03:46,110 --> 01:03:48,830 Men hvis det er tilfældet, at url er ikke ordentligt defineret, 1133 01:03:48,830 --> 01:03:52,550 hvis denne funktion returnerer en fejl eller nogle andre uventede ting 1134 01:03:52,550 --> 01:03:58,030 faktisk finder sted, denne afskærmning konstruktion giver os mulighed for derefter output denne fejl 1135 01:03:58,030 --> 01:04:00,390 og vende tilbage med det samme. 1136 01:04:00,390 --> 01:04:00,890 Ja? 1137 01:04:00,890 --> 01:04:04,839 >> PUBLIKUM: Så det er slags ligesom en hvis da ellers? 1138 01:04:04,839 --> 01:04:07,130 DAN ARMENDARIZ: Det er lidt ligesom en hvis da ellers, ja, 1139 01:04:07,130 --> 01:04:14,200 bortset fra at denne url er så defineret for alt under dette. 1140 01:04:14,200 --> 01:04:20,420 Hvis det passerer denne afskærmning, så er det faktisk vil blive fyldt med data 1141 01:04:20,420 --> 01:04:29,500 og anvendelige i den resterende kildekoden i din funktion. 1142 01:04:29,500 --> 01:04:33,790 Så jeg formoder, at du kommer til at begynde at se denne afskærmning samt. 1143 01:04:33,790 --> 01:04:36,670 Og være opmærksomme på det. 1144 01:04:36,670 --> 01:04:46,270 >> Så bare at kigge på et par andre ting, denne ret her er hvad, 1145 01:04:46,270 --> 01:04:53,377 tror du, blot baseret på hvad vi talte om før? 1146 01:04:53,377 --> 01:04:56,650 >> PUBLIKUM: Tænk det vil køre på listen? 1147 01:04:56,650 --> 01:04:59,100 >> DAN ARMENDARIZ: Så det er tæt på. 1148 01:04:59,100 --> 01:05:02,360 Dette er en funktion, som vi definerer. 1149 01:05:02,360 --> 01:05:07,240 Og vi indtaster denne funktion som et argument for denne funktion her. 1150 01:05:07,240 --> 01:05:09,120 >> PUBLIKUM: [uhørligt], hvis ikke nul. 1151 01:05:09,120 --> 01:05:11,470 Så det er på listen, ikke? 1152 01:05:11,470 --> 01:05:15,450 >> DAN ARMENDARIZ: Hvis fejlen ikke er nul, så is-- så jeg er nødt til at rulle. 1153 01:05:15,450 --> 01:05:18,060 Nå, lad os se, jeg kan ikke rigtig rul til højre her. 1154 01:05:18,060 --> 01:05:23,161 fejl er et argument, der er ved at blive føres til denne anonyme funktion. 1155 01:05:23,161 --> 01:05:24,410 Dette er en anonym funktion. 1156 01:05:24,410 --> 01:05:25,480 Det har ikke noget navn. 1157 01:05:25,480 --> 01:05:29,850 Men vi accepterer disse tre argumenter, data, respons og fejl. 1158 01:05:29,850 --> 01:05:33,590 Og det vil vende tilbage ugyldige, hvilket det kommer ikke til at vende tilbage noget. 1159 01:05:33,590 --> 01:05:37,910 Og det er indholdet af denne funktion. 1160 01:05:37,910 --> 01:05:41,961 Og så har vi adgang inde, funktion til hver af disse argumenter. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Så det er en hvirvelvind rundtur i sproget. 1163 01:05:48,679 --> 01:05:50,470 Men jeg håber med dette, forhåbentlig som du tager 1164 01:05:50,470 --> 01:05:54,490 et kig på nogle af de tutorials specifik til iOS udvikling med Swift, 1165 01:05:54,490 --> 01:05:57,481 især hvis du går til Apples udvikler web page-- 1166 01:05:57,481 --> 01:05:59,980 de har en masse virkelig god tutorials til at få dig i gang. 1167 01:05:59,980 --> 01:06:05,010 Men forhåbentlig bare denne time for at tale om syntaksen selv har givet 1168 01:06:05,010 --> 01:06:08,760 du nok til at komme i gang med det. 1169 01:06:08,760 --> 01:06:12,950 >> Vi vil sende hele denne kilde kode på seminaret hjemmeside 1170 01:06:12,950 --> 01:06:17,800 så hurtigt som muligt, og også slides så du har en reference for alle dem. 1171 01:06:17,800 --> 01:06:20,530 Men held og lykke med dine projekter. 1172 01:06:20,530 --> 01:06:23,640 Og tak alle meget for at komme. 1173 01:06:23,640 --> 01:06:26,990 >> [BIFALD] 1174 01:06:26,990 --> 01:06:28,026