1 00:00:00,000 --> 00:00:11,270 2 00:00:11,270 --> 00:00:14,340 >> DANIEL ARMENDARIZ: Hej, alle, velkommen til iOS app udvikling 3 00:00:14,340 --> 00:00:15,020 med hurtig. 4 00:00:15,020 --> 00:00:15,870 Jeg er Dan Armendariz. 5 00:00:15,870 --> 00:00:18,920 Jeg er precepter af computer videnskab her på skolen 6 00:00:18,920 --> 00:00:21,200 Teknisk Applied Sciences. 7 00:00:21,200 --> 00:00:24,310 Og hurtig er faktisk slags af en virkelig sirlige sprog. 8 00:00:24,310 --> 00:00:27,190 Og jeg har nogle planer for i dag. 9 00:00:27,190 --> 00:00:31,430 Så over den næste time eller så vi skal hen at se på iOS app udvikling selv 10 00:00:31,430 --> 00:00:36,640 hjælp Xcode og faktisk at skabe nogle Meget grundlæggende, meget simple applikationer. 11 00:00:36,640 --> 00:00:40,070 Og se på den måde, du faktisk tage disse ansøgninger, 12 00:00:40,070 --> 00:00:42,887 og bygge dem, og faktisk læg dem på en iOS-enhed. 13 00:00:42,887 --> 00:00:44,970 Nogle af de ting, Vi kommer ikke til at se på 14 00:00:44,970 --> 00:00:47,540 vil omfatte ting som faktisk at tage en ansøgning 15 00:00:47,540 --> 00:00:48,940 og sætte det på app store. 16 00:00:48,940 --> 00:00:52,930 Der er en masse tutorials på nettet, vil hjælpe dig med dette aspekt af det. 17 00:00:52,930 --> 00:00:56,230 Men også fordi som del af CS50, får du 18 00:00:56,230 --> 00:00:59,780 at slutte sig til Apple udvikling team, CS50 app udviklingsteam. 19 00:00:59,780 --> 00:01:02,790 Hvis du ikke har gjort det endnu, og du er tilknyttet CS50, 20 00:01:02,790 --> 00:01:04,810 Jeg anbefaler, at du gøre, fordi det 21 00:01:04,810 --> 00:01:08,820 er, hvordan du er i stand til at skabe nogle programmer i Xcode, 22 00:01:08,820 --> 00:01:11,890 bygge dem, og faktisk lægge dem på nogle af dine iOS-enheder 23 00:01:11,890 --> 00:01:14,087 hvis du rent faktisk har en fysisk iOS-enhed. 24 00:01:14,087 --> 00:01:16,670 Hvis du ikke har en fysisk iOS enhed, der er mere end fint. 25 00:01:16,670 --> 00:01:19,810 Du kan faktisk udvikle til iOS. 26 00:01:19,810 --> 00:01:22,390 Og Xcode har en simulator, der giver dig 27 00:01:22,390 --> 00:01:26,570 at se din ansøgning i handling på computeren. 28 00:01:26,570 --> 00:01:30,440 Men det slags er en pæn ting til rent faktisk at spille og interagere 29 00:01:30,440 --> 00:01:34,235 med din ansøgning på en egentlig enhed. 30 00:01:34,235 --> 00:01:37,360 Så der er et par krav til rent faktisk gør alt dette udvikling. 31 00:01:37,360 --> 00:01:39,151 En af dem er, at du er nødt til at have en Mac. 32 00:01:39,151 --> 00:01:44,770 Det skal køre 10.9.4 eller nyere for at gøre udvikling med hurtig. 33 00:01:44,770 --> 00:01:47,770 >> Du kan bruge en tidligere version udvikle 34 00:01:47,770 --> 00:01:50,810 med Objective C til iOS og Mac. 35 00:01:50,810 --> 00:01:53,990 Men jeg anbefaler, og en masse af det eksempler, vi ser i dag, 36 00:01:53,990 --> 00:01:55,700 Brug 10.10 Yosemite. 37 00:01:55,700 --> 00:02:00,910 Så hvis du endnu ikke har opgraderet, er det en god undskyldning for at gøre det. 38 00:02:00,910 --> 00:02:05,480 Nu Xcode 6.1 er den nyeste version af det integrerede udviklingsmiljø 39 00:02:05,480 --> 00:02:08,979 at Apple leverer gratis at du kan hente fra App Store. 40 00:02:08,979 --> 00:02:11,220 Og jeg anbefaler, at du også køre den nyeste version. 41 00:02:11,220 --> 00:02:14,700 >> Hvis du tilfældigvis til at køre en tidligere version Xcode 5 og under blot 42 00:02:14,700 --> 00:02:16,741 simpelthen ikke understøtter overhovedet hurtigt. 43 00:02:16,741 --> 00:02:19,490 Og de betaversioner af seks, som blev løsladt i løbet af sommeren, 44 00:02:19,490 --> 00:02:21,770 gøre støtte hurtig, men der er været et enormt antal 45 00:02:21,770 --> 00:02:25,220 af ændringer i sproget, nok således at den kode, du er 46 00:02:25,220 --> 00:02:28,320 kommer til at se på, og at du kan finde på internettet 47 00:02:28,320 --> 00:02:33,294 vil faktisk ikke kompilere korrekt i disse tidligere versioner af Xcode. 48 00:02:33,294 --> 00:02:35,460 Så igen, hvis du endnu ikke har en udvikler konto, 49 00:02:35,460 --> 00:02:38,560 Jeg vil anbefale dig at gå til developer.apple.com. 50 00:02:38,560 --> 00:02:42,240 Tilmeld dig, oprette en udvikler konto, og deltag i CS50 app udvikling team. 51 00:02:42,240 --> 00:02:45,530 Det vil give dig en mulighed at kompilere dine programmer 52 00:02:45,530 --> 00:02:47,840 og læg dem på din enhed. 53 00:02:47,840 --> 00:02:49,222 OK, så lad os komme i gang. 54 00:02:49,222 --> 00:02:50,930 Det allerførste vi kommer til at gøre, er 55 00:02:50,930 --> 00:02:55,140 til faktisk at skabe en meget simpelt projekt i Xcode 56 00:02:55,140 --> 00:02:59,530 der vil give dig mulighed for indgive en ansøgning. 57 00:02:59,530 --> 00:03:03,170 >> Så hvis du endnu ikke har Xcode åben, gå videre og åbne den 58 00:03:03,170 --> 00:03:04,270 og oprette et nyt projekt. 59 00:03:04,270 --> 00:03:06,570 En særlig splash skærm vil åbne og vil give dig 60 00:03:06,570 --> 00:03:08,800 nogle muligheder om, hvad det er, at du ønsker at gøre. 61 00:03:08,800 --> 00:03:12,170 Bare sig, at du vil oprette et nyt projekt, en ny ansøgning. 62 00:03:12,170 --> 00:03:15,650 Dette vindue vil poppe op, antager du bruger Xcode 6.1. 63 00:03:15,650 --> 00:03:17,650 Lige nu, og for varighed dette seminar, 64 00:03:17,650 --> 00:03:19,990 vi kommer til at bruge Enkelt billede applikationer, bare 65 00:03:19,990 --> 00:03:22,590 sortering af en oprindelig ansøgning at få våde fødder. 66 00:03:22,590 --> 00:03:25,200 Og du kan forgrene sig på din egen derfra. 67 00:03:25,200 --> 00:03:27,660 >> Klik på Næste på dette tidspunkt. 68 00:03:27,660 --> 00:03:30,796 Nu her er der et par ting at du måske ønsker at komme ind. 69 00:03:30,796 --> 00:03:32,670 Produktet hedder det navn på dit projekt. 70 00:03:32,670 --> 00:03:34,859 I dette tilfælde er jeg bare vil kalde det Seminar1 71 00:03:34,859 --> 00:03:36,150 fordi det er vores første eksempel. 72 00:03:36,150 --> 00:03:38,290 Organisation navn, i denne sag er bare mit navn. 73 00:03:38,290 --> 00:03:41,760 Du kan selvfølgelig ændre det til dit eget navn, eller CS50. 74 00:03:41,760 --> 00:03:46,160 Organisation id, hvis du tilfældigvis har en hjemmeside bare tage 75 00:03:46,160 --> 00:03:49,940 domænenavnet i omvendt, com.yourname. 76 00:03:49,940 --> 00:03:54,200 og derefter navnet på produktet vises automatisk 77 00:03:54,200 --> 00:03:55,820 efter, som bundtet identifikator. 78 00:03:55,820 --> 00:03:59,200 >> Naturligvis det sprog, vi er skal bruge for i dag er hurtig. 79 00:03:59,200 --> 00:04:02,590 Du kan selvfølgelig bruge Objective C for det, men i dag vil være hurtig. 80 00:04:02,590 --> 00:04:04,920 Og vi vil nu sige universelle enheder, så 81 00:04:04,920 --> 00:04:06,900 at det virker på både iPad og iPhone. 82 00:04:06,900 --> 00:04:10,040 Og vi vil forlade kerne data ukontrollerede at holde 83 00:04:10,040 --> 00:04:12,830 projektet relativt enkel for tiden. 84 00:04:12,830 --> 00:04:14,430 Så lad os gå videre og klik på Næste. 85 00:04:14,430 --> 00:04:16,471 Og det kommer til at spørge mig hvor jeg vil gemme det. 86 00:04:16,471 --> 00:04:19,250 Jeg vil bare gemme den på mit skrivebord for nu. 87 00:04:19,250 --> 00:04:22,267 >> Okay, så nu det er det, vil ske, når du faktisk åbne Xcode. 88 00:04:22,267 --> 00:04:24,100 Og bemærk, at meget første, du ser 89 00:04:24,100 --> 00:04:28,770 er dette udråbstegn som siger nej underskrivelsen identitet fundet. 90 00:04:28,770 --> 00:04:31,520 Jeg bevidst gjorde det på min computer, og jeg er 91 00:04:31,520 --> 00:04:34,220 håber, at jeg har tænkt mig at være i stand til rent faktisk løse det, 92 00:04:34,220 --> 00:04:37,860 fordi jeg vil have dig til at se, hvordan dette rent faktisk vil arbejde på din egen maskine. 93 00:04:37,860 --> 00:04:40,400 >> Gå videre og klik fix problem. 94 00:04:40,400 --> 00:04:45,400 Den vil spørge dig, hvis du har en eksisterende Apple Developer konto. 95 00:04:45,400 --> 00:04:48,330 Det er her at deltage i CS50 app udviklingsteam 96 00:04:48,330 --> 00:04:51,240 er vigtigt, så du ikke kun har en app-konto, 97 00:04:51,240 --> 00:04:53,690 men du har også evne til at underskrive de apps 98 00:04:53,690 --> 00:04:56,420 og læg dem på din iOS-enhed. 99 00:04:56,420 --> 00:04:58,957 Dette er not-- klikke fix spørgsmål er ikke nødvendig 100 00:04:58,957 --> 00:05:01,040 hvis du bare kommer til at opbygge og udvikle lokalt, 101 00:05:01,040 --> 00:05:03,520 helt inden for iOS simulator. 102 00:05:03,520 --> 00:05:05,820 >> Men for nu vil jeg til at udvikle og sætte dem 103 00:05:05,820 --> 00:05:08,160 på min iPad, som vil være i stand til at udsende så godt. 104 00:05:08,160 --> 00:05:10,770 Så jeg ønsker at faktisk tilføje dette. 105 00:05:10,770 --> 00:05:13,670 Og det kommer til at spørge mig for mit Apple-id. 106 00:05:13,670 --> 00:05:15,700 Så det vil være dette. 107 00:05:15,700 --> 00:05:18,940 Og jeg er nødt til at hente min adgangskode, som er herovre. 108 00:05:18,940 --> 00:05:27,760 Så giv mig bare et sekund for at finde det, og kopiere det, og indsæt den herovre. 109 00:05:27,760 --> 00:05:28,580 >> Klik på Tilføj. 110 00:05:28,580 --> 00:05:31,095 Det kommer til at spørge mig hvilket hold jeg ønsker at deltage. 111 00:05:31,095 --> 00:05:33,240 Jeg har tænkt mig at gøre School of Engineering. 112 00:05:33,240 --> 00:05:35,680 Klik Deltag. 113 00:05:35,680 --> 00:05:37,780 Ups, det er den forkerte. 114 00:05:37,780 --> 00:05:40,730 Lad os gøre denne ene. 115 00:05:40,730 --> 00:05:42,060 Forhåbentlig, at man vil arbejde. 116 00:05:42,060 --> 00:05:44,220 At man stadig ikke virker. 117 00:05:44,220 --> 00:05:46,610 Vi kører ud af gode her. 118 00:05:46,610 --> 00:05:48,260 OK, bør denne ene fungere. 119 00:05:48,260 --> 00:05:50,816 Luk nu det. 120 00:05:50,816 --> 00:05:54,450 Lad os nu gøre skole engineering, klikke på Vælg. 121 00:05:54,450 --> 00:06:00,190 >> Og nu forhåbentlig efter en par sekunder, du can-- OK, 122 00:06:00,190 --> 00:06:02,550 Jeg vil tilbagekalde og anmodning. 123 00:06:02,550 --> 00:06:05,410 Åh mand, vil dette ikke. 124 00:06:05,410 --> 00:06:08,890 OK, jeg vil prøve en anden. 125 00:06:08,890 --> 00:06:11,167 Lad os gøre denne ene her. 126 00:06:11,167 --> 00:06:17,020 127 00:06:17,020 --> 00:06:19,310 Levende demoer svigter mig. 128 00:06:19,310 --> 00:06:22,540 Vi kan have til at vende tilbage til blot bygge helt lokalt, 129 00:06:22,540 --> 00:06:25,050 men det ville være OK i dette tilfælde. 130 00:06:25,050 --> 00:06:28,560 >> Så her, mens dette er faktisk arbejdsdag, hvad vi vil gøre, er blot 131 00:06:28,560 --> 00:06:31,190 skabe en meget enkel Hello World program. 132 00:06:31,190 --> 00:06:32,340 Så dette er Xcode. 133 00:06:32,340 --> 00:06:37,300 Og hvis du ikke har set det endnu, det kan være lidt skræmmende i starten. 134 00:06:37,300 --> 00:06:41,430 Der er en masse ruder, er der en masse doodads på forskellige områder. 135 00:06:41,430 --> 00:06:44,300 Men bare indse, at der er virkelig flere hovedkomponenter 136 00:06:44,300 --> 00:06:46,580 til dette udviklingsmiljø. 137 00:06:46,580 --> 00:06:51,090 Længst til venstre er alle filerne , der gælder for dit program 138 00:06:51,090 --> 00:06:52,997 eller til din projekt. 139 00:06:52,997 --> 00:06:55,080 Vi vil klikke rundt på nogle af dem, og vi vil 140 00:06:55,080 --> 00:06:57,660 påpege mest vigtigste over tid. 141 00:06:57,660 --> 00:06:59,650 På det yderste højre, vi har et sæt af attributter. 142 00:06:59,650 --> 00:07:02,920 Og alle disse egenskaber, der er forskellige ruder for attributterne. 143 00:07:02,920 --> 00:07:06,770 Ruderne vil ændre sig afhængigt af forbindelse med de vigtigste indhold, som 144 00:07:06,770 --> 00:07:08,290 sker i midten. 145 00:07:08,290 --> 00:07:11,740 Nu midten kan faktisk vise du en række ting, f.eks 146 00:07:11,740 --> 00:07:13,290 din kode selv. 147 00:07:13,290 --> 00:07:17,070 Eller du kan faktisk have-- når du klikker på storyboardet som 148 00:07:17,070 --> 00:07:21,270 er, ved den måde, bare en grafisk repræsentation af din bruger 149 00:07:21,270 --> 00:07:25,350 interface til din application-- derefter attributterne ruden 150 00:07:25,350 --> 00:07:27,334 på meget langt til højre faktisk vil ændre sig. 151 00:07:27,334 --> 00:07:29,750 Nu er der et par andre ting, som jeg gerne vil pege. 152 00:07:29,750 --> 00:07:33,360 Du kan slags udforske omkring i miljøet på egen hånd. 153 00:07:33,360 --> 00:07:35,730 Men en af ​​de ting, der har været meget nyttig 154 00:07:35,730 --> 00:07:38,470 er denne knap Her øverst til højre i vinduet. 155 00:07:38,470 --> 00:07:41,230 Der er denne knap, ser ud på langt 156 00:07:41,230 --> 00:07:46,090 forlod det har et afsnit efterfulgt af to cirkler, og sortere 157 00:07:46,090 --> 00:07:49,540 af to pile, der peger væk fra hinanden. 158 00:07:49,540 --> 00:07:52,640 Hvis du skifter mellem standard editor, som 159 00:07:52,640 --> 00:07:55,560 er længst til venstre en, den ene der er valgt som standard, 160 00:07:55,560 --> 00:08:01,040 og de to cirkler overlappende hinanden, hvad du rent faktisk får 161 00:08:01,040 --> 00:08:02,210 er en dobbelt rude udsigt. 162 00:08:02,210 --> 00:08:04,240 >> Og det er faktisk vil være nyttigt for os 163 00:08:04,240 --> 00:08:07,330 når vi har brug for at knytte emner i brugergrænsefladen til koden. 164 00:08:07,330 --> 00:08:09,330 Og vi vil tale mere om at på bare et øjeblik. 165 00:08:09,330 --> 00:08:12,050 Men indse, at hvis du får endnu flere ruder som denne, 166 00:08:12,050 --> 00:08:15,830 du kan forenkle din visning bare en lille smule ved at klikke tilbage 167 00:08:15,830 --> 00:08:20,680 på din enkelt editor. 168 00:08:20,680 --> 00:08:21,580 Så vidt så godt. 169 00:08:21,580 --> 00:08:24,560 Så dybest set har vi koden på venstre attributter til højre, 170 00:08:24,560 --> 00:08:28,260 og hvad det er vi arbejder her i centrum. 171 00:08:28,260 --> 00:08:30,390 >> Så her jeg har klikket på de vigtigste storyboard. 172 00:08:30,390 --> 00:08:33,350 Og storyboard, igen, er en vej i Xcode 173 00:08:33,350 --> 00:08:38,110 at du rent faktisk kan oprette din bruger interface ved hjælp af bare trække og slippe 174 00:08:38,110 --> 00:08:39,130 teknikker. 175 00:08:39,130 --> 00:08:41,190 Og så for vores meget første ansøgning denne 176 00:08:41,190 --> 00:08:42,720 er netop, hvad vi skal gøre. 177 00:08:42,720 --> 00:08:45,950 Vi kommer til at gå til meget langt nederste højre del 178 00:08:45,950 --> 00:08:49,900 af skærmen, som indeholder en række af brugernes elementer 179 00:08:49,900 --> 00:08:53,270 at du derefter kan klikke og trække at oprette din brugergrænseflade. 180 00:08:53,270 --> 00:08:55,550 >> Nu er alle disse elementer kaldes visninger 181 00:08:55,550 --> 00:08:57,370 fordi de leverer en slags visning. 182 00:08:57,370 --> 00:09:00,190 Der er et billede visning, for eksempel, faktisk at vise 183 00:09:00,190 --> 00:09:01,740 et billede på brugergrænsefladen. 184 00:09:01,740 --> 00:09:04,310 Der er en tabel for at faktisk viser en tabel. 185 00:09:04,310 --> 00:09:05,190 Så videre og så videre. 186 00:09:05,190 --> 00:09:08,250 Der er en bred vifte af visninger, som du kan vælge her. 187 00:09:08,250 --> 00:09:11,100 Så bare for nu vil vi at søge efter en etiket. 188 00:09:11,100 --> 00:09:13,550 Du kan bare rulle gennem alle de lister, der er der. 189 00:09:13,550 --> 00:09:15,460 Men der er søgningen bar i bunden 190 00:09:15,460 --> 00:09:19,460 der gør det lettere at identificere specifikke synspunkter, som du rent faktisk 191 00:09:19,460 --> 00:09:22,020 ønsker at trække ind i din brugergrænseflade. 192 00:09:22,020 --> 00:09:23,560 >> Fundet min etiket. 193 00:09:23,560 --> 00:09:28,430 Jeg har tænkt mig at trække det her, direkte på min prøve ansøgning. 194 00:09:28,430 --> 00:09:30,130 Lige der i midten ser godt ud. 195 00:09:30,130 --> 00:09:33,180 Og jeg har tænkt mig at skrive "Hello World!" 196 00:09:33,180 --> 00:09:33,810 Hit Enter. 197 00:09:33,810 --> 00:09:34,877 Nu har jeg en etiket. 198 00:09:34,877 --> 00:09:36,960 Det ser ikke ud som om det er centreret helt korrekt. 199 00:09:36,960 --> 00:09:38,500 Så jeg kan forsøge at re-center det. 200 00:09:38,500 --> 00:09:42,100 Heldigvis det giver disse guider til at gøre tingene meget lettere. 201 00:09:42,100 --> 00:09:44,130 Jeg har tænkt mig at forsøge at kompilere det. 202 00:09:44,130 --> 00:09:46,570 Forhåbentlig vil det rent faktisk arbejder her. 203 00:09:46,570 --> 00:09:52,870 Og hvis det ikke i et øjeblik det vil faktisk blive vist på min iPad. 204 00:09:52,870 --> 00:09:54,360 Det er lige her. 205 00:09:54,360 --> 00:09:55,060 Der er det. 206 00:09:55,060 --> 00:09:56,590 >> OK, så det er det. 207 00:09:56,590 --> 00:09:57,160 Vi er færdig. 208 00:09:57,160 --> 00:09:58,868 Vi har skabt vores helt første ansøgning. 209 00:09:58,868 --> 00:10:01,330 Nu naturligvis dette ikke gør noget. 210 00:10:01,330 --> 00:10:02,280 Det er bare et mærke. 211 00:10:02,280 --> 00:10:07,350 Der er ingen forbindelse mellem brugergrænsefladen og koden. 212 00:10:07,350 --> 00:10:10,130 Så hvis vi faktisk ønskede at skabe denne sammenhæng, 213 00:10:10,130 --> 00:10:14,790 hvis vi faktisk ønskede at have en slags af kommunikation mellem elementerne 214 00:10:14,790 --> 00:10:17,540 der findes på skærm og den kode, 215 00:10:17,540 --> 00:10:19,810 tillader os at styre de elementer, derefter 216 00:10:19,810 --> 00:10:23,570 vi faktisk har brug for se på selve koden. 217 00:10:23,570 --> 00:10:27,000 >> Så dette er, hvad der kaldes ViewController.swift. 218 00:10:27,000 --> 00:10:30,080 Og for, især for din første par programmer, 219 00:10:30,080 --> 00:10:33,120 dette vil være en slags den hovedparten af ​​den kode, du enter-- 220 00:10:33,120 --> 00:10:35,980 vil være i dette dokument her. 221 00:10:35,980 --> 00:10:38,390 Der er en masse ting der er i her hidtil, ikke? 222 00:10:38,390 --> 00:10:42,660 Der er import UI kit klasse, tilsidesætte, [? funk,?] alle disse forskellige ting. 223 00:10:42,660 --> 00:10:45,820 Og det er ikke helt klart, hvad det er, at alt dette betyder. 224 00:10:45,820 --> 00:10:48,570 Så lad os tage et skridt tilbage væk fra Xcode for en lille smule 225 00:10:48,570 --> 00:10:52,420 og se på selve sproget, hurtig. 226 00:10:52,420 --> 00:10:56,370 >> Så med hurtig, det var i design og udvikling 227 00:10:56,370 --> 00:10:58,645 hos Apple for omkring fire år til min forståelse. 228 00:10:58,645 --> 00:11:01,270 Og der er et par funktioner om det, der er virkelig pæne. 229 00:11:01,270 --> 00:11:03,910 Først og fremmest er det kompileret sprog, ligesom C. 230 00:11:03,910 --> 00:11:06,120 Så skal du først kompilere det og derefter køre den 231 00:11:06,120 --> 00:11:09,580 før du kan faktisk udføre koden, der resulterer. 232 00:11:09,580 --> 00:11:14,250 Men der er i modsætning til C, en interaktiv bede, at du rent faktisk kan køre 233 00:11:14,250 --> 00:11:16,680 og skriv vilkårlige kommandoer ind. 234 00:11:16,680 --> 00:11:20,280 Og meget gerne en JavaScript-konsol, som du kan være bekendt med nu, 235 00:11:20,280 --> 00:11:24,506 det faktisk vil vurdere dem kommandoer og leverer til dig outputtet. 236 00:11:24,506 --> 00:11:26,380 Og de har selv taget at til det næste niveau 237 00:11:26,380 --> 00:11:29,100 og de har skabt noget kaldet legepladser i Xcode 238 00:11:29,100 --> 00:11:31,720 der gør det muligt at visuelt arbejde med kode. 239 00:11:31,720 --> 00:11:34,910 Og vi vil faktisk se nogle eksempler af, at på bare en lille smule. 240 00:11:34,910 --> 00:11:41,680 Det er baseret på C. C ligger til grund det, fordi alle de compilere 241 00:11:41,680 --> 00:11:46,820 skabe kode ud af C og oprette objektet kode fra det. 242 00:11:46,820 --> 00:11:49,240 Men det virkelig aktier relativt lidt syntaks. 243 00:11:49,240 --> 00:11:50,721 Det vil se nogenlunde anderledes. 244 00:11:50,721 --> 00:11:51,970 Der vil være nogle ligheder. 245 00:11:51,970 --> 00:11:54,140 Men der vil være ganske få forskelle 246 00:11:54,140 --> 00:11:57,200 sammenlignet med, siger, JavaScript eller PHP. 247 00:11:57,200 --> 00:11:59,070 Og vi vil pege disse ud på bare et øjeblik. 248 00:11:59,070 --> 00:12:01,420 >> Nu er en af ​​de største ting om hurtigt det er rart 249 00:12:01,420 --> 00:12:05,650 er, især sammenlignet til C, er det meningen, at være sikker. 250 00:12:05,650 --> 00:12:08,100 Alt i det er meningen, at være meget stærkt skrevet i. 251 00:12:08,100 --> 00:12:10,780 Faktisk er det næsten irriterende i første omgang, når du først 252 00:12:10,780 --> 00:12:15,610 begynde at arbejde med hurtig, præcis hvor meget det håndhæver typer overalt. 253 00:12:15,610 --> 00:12:17,860 Alt, hvad der er en streng skal forblive en streng. 254 00:12:17,860 --> 00:12:22,100 Det er meget svært at sortere i konvertere det eller tvinge det i en anden form. 255 00:12:22,100 --> 00:12:23,800 >> Og igen, viser vi eksempler på dette. 256 00:12:23,800 --> 00:12:26,830 Men i sidste ende indse, at dette menes at beskytte dig, 257 00:12:26,830 --> 00:12:32,010 og ved du jeg mener din kode, fra nedbrud i nogle forfærdelige måde, når 258 00:12:32,010 --> 00:12:34,330 du har en form for uoverensstemmende type. 259 00:12:34,330 --> 00:12:36,040 Og igen, arbejde med det. 260 00:12:36,040 --> 00:12:40,210 Fordi det vil være frustrerende først som du forsøger at finde ud af hvorfor netop 261 00:12:40,210 --> 00:12:43,070 du får denne usædvanlige error beskæftiger sig med typer. 262 00:12:43,070 --> 00:12:45,350 Men det vil være det værd i sidste ende. 263 00:12:45,350 --> 00:12:47,267 >> Det betyder behandle med automatisk hukommelse ledelse, 264 00:12:47,267 --> 00:12:49,100 så ikke længere gør du nødt til at beskæftige sig med ting 265 00:12:49,100 --> 00:12:51,400 ligesom malloc og fri og alle af den slags ting. 266 00:12:51,400 --> 00:12:53,066 Og det er også designet til almindeligheder. 267 00:12:53,066 --> 00:12:58,360 Så mens vi kan bruge en Xcode til skabe iOS apps og Mac-programmer, 268 00:12:58,360 --> 00:13:00,380 Vi kan også bare bruge det som et scriptsprog. 269 00:13:00,380 --> 00:13:03,660 Og så vi kan bruge det sortere af stedet for PHP eller i stedet 270 00:13:03,660 --> 00:13:07,800 af Python faktisk hurtigt parse og proces 271 00:13:07,800 --> 00:13:09,800 nogle data, som vi har på vores computer. 272 00:13:09,800 --> 00:13:13,290 >> Det har en bred vifte af moderne funktioner, optionals, foranderlighed, 273 00:13:13,290 --> 00:13:17,900 generiske lægemidler, lukninger, og en masse af dette ting du måske eller måske ikke genkende. 274 00:13:17,900 --> 00:13:22,810 Og det er bare slags en uheldig del af det sprog, at nogle af disse 275 00:13:22,810 --> 00:13:26,700 slags futuristisk, moderne elementer, er indeholdt i elementerne er 276 00:13:26,700 --> 00:13:34,520 så dybt indgroet, at jeg rent faktisk vil nødt til at lære dig CS50.5 en lille smule. 277 00:13:34,520 --> 00:13:37,305 >> Vi er nødt til at lære lidt mere om nogle af funktionerne i rækkefølge 278 00:13:37,305 --> 00:13:40,180 for virkelig at forstå, hvad der foregår på og så du kan se på koden 279 00:13:40,180 --> 00:13:42,450 og ikke føle sig helt tabt. 280 00:13:42,450 --> 00:13:44,820 Og du vil se hvad jeg mener ved, at på bare et minut. 281 00:13:44,820 --> 00:13:47,830 OK, så let's-- nok af dette slags teoretisk ting. 282 00:13:47,830 --> 00:13:52,450 Lad os faktisk se på vores allerførste hurtig program. 283 00:13:52,450 --> 00:13:53,590 Det er en linje kode. 284 00:13:53,590 --> 00:13:57,690 Linje 14 lige her, det siger print l n hej CS50. 285 00:13:57,690 --> 00:14:01,160 >> Så der er et par ting, der er meget anderledes om dette forhold 286 00:14:01,160 --> 00:14:04,140 til ting, som du kunne være vant til fra C, for eksempel. 287 00:14:04,140 --> 00:14:08,390 En af dem er, at der ikke er nogen intmain, er der ingen inkluderer sektion, 288 00:14:08,390 --> 00:14:10,790 der er ingen af ​​denne ekstra ting. 289 00:14:10,790 --> 00:14:13,790 Den indbefatter, ligesom standard I / O, som bibliotekerne 290 00:14:13,790 --> 00:14:16,580 der faktisk give standard funktioner i sproget, 291 00:14:16,580 --> 00:14:19,180 medtages automatisk som del af hurtige standard bibliotek 292 00:14:19,180 --> 00:14:20,680 og som importeres automatisk. 293 00:14:20,680 --> 00:14:23,740 Du behøver ikke at gøre at importere manuelt. 294 00:14:23,740 --> 00:14:27,360 >> Intmain ikke eksisterer, fordi den vigtigste indgang for koden 295 00:14:27,360 --> 00:14:29,470 er faktisk på begyndelsen af ​​koden. 296 00:14:29,470 --> 00:14:32,000 Så enhver kode, som du har fra starten 297 00:14:32,000 --> 00:14:34,940 rent faktisk vil blive gennemført i starten. 298 00:14:34,940 --> 00:14:36,520 Så det virkelig forenkler. 299 00:14:36,520 --> 00:14:38,470 Bemærk også, at der ikke er nogen semikolon. 300 00:14:38,470 --> 00:14:41,040 Der er ingen semikoloner i dette sprog. 301 00:14:41,040 --> 00:14:43,261 Du sætter en erklæring på en individuel linje 302 00:14:43,261 --> 00:14:45,510 og derefter den næste linje repræsenterer den anden opgørelse. 303 00:14:45,510 --> 00:14:47,420 Hvis du ønsker at sætte mulitiple udsagn online, 304 00:14:47,420 --> 00:14:49,086 så har du adskille den af ​​semikolon. 305 00:14:49,086 --> 00:14:50,940 Men for det meste, for god stil, er vi 306 00:14:50,940 --> 00:14:56,530 aldrig kommer til at se semikoloner for Med henblik på at adskille udsagn 307 00:14:56,530 --> 00:14:58,420 i hurtig. 308 00:14:58,420 --> 00:14:59,820 Så hvordan gør dette rent faktisk arbejder? 309 00:14:59,820 --> 00:15:04,080 Nå meget gerne C vi faktisk nødt til at oversætte dette. 310 00:15:04,080 --> 00:15:10,640 Og så vi kan gøre det ved hjælp af hurtig c og derefter 1.swift. 311 00:15:10,640 --> 00:15:13,850 Og så efter et par minutter vil kompilere 312 00:15:13,850 --> 00:15:16,340 og så kan jeg køre punkt et. 313 00:15:16,340 --> 00:15:19,691 Og end det vil bare sige "Hej CS50." 314 00:15:19,691 --> 00:15:20,690 Awesome, så der vi gå. 315 00:15:20,690 --> 00:15:22,273 Der er vores første hej verden program. 316 00:15:22,273 --> 00:15:24,790 Lad os gå videre til nummer to. 317 00:15:24,790 --> 00:15:30,450 >> Nu i denne-- dette har ændret en smule, fordi der normalt du 318 00:15:30,450 --> 00:15:34,720 do-- faktisk altid har du at udarbejde en hurtig ansøgning, før du 319 00:15:34,720 --> 00:15:37,180 faktisk køre it-- én af de store funktioner 320 00:15:37,180 --> 00:15:40,230 at jeg hentydede til før, var, at hurtig faktisk kan bruges i Sort 321 00:15:40,230 --> 00:15:43,390 en pseudo-fortolkende funktion, der er i virkeligheden ligesom en tolk. 322 00:15:43,390 --> 00:15:46,690 Men hvad det vil gøre, er der er i virkeligheden en hurtig gennemførelse 323 00:15:46,690 --> 00:15:47,520 at du kan køre. 324 00:15:47,520 --> 00:15:51,050 >> Så for eksempel, hvis du bare skrive hurtig her, hvad der vil ske 325 00:15:51,050 --> 00:15:52,330 er, at du vil få en prompt. 326 00:15:52,330 --> 00:15:59,040 Og du kan skrive din hurtige kode, udskrive hej, og køre den. 327 00:15:59,040 --> 00:16:01,867 Og det vil faktisk print-- godt, det ikke udskrive i denne sag 328 00:16:01,867 --> 00:16:04,450 fordi det udskrives centreret ud, som ikke er synlig her. 329 00:16:04,450 --> 00:16:06,660 Men det er faktisk i stand til at fungere. 330 00:16:06,660 --> 00:16:09,580 Og så i dette tilfælde, jeg er bare kommer til at bruge dette som et script. 331 00:16:09,580 --> 00:16:11,259 Og jeg kan faktisk køre denne kode der. 332 00:16:11,259 --> 00:16:13,800 Så den måde, at jeg faktisk køre det vil være lidt anderledes, 333 00:16:13,800 --> 00:16:15,710 men du vil se, at på bare et øjeblik. 334 00:16:15,710 --> 00:16:18,890 Nu, i dette tilfælde, hvad vi vil at gøre er at først definere en variabel. 335 00:16:18,890 --> 00:16:22,160 Så dette er, hvordan vi definerer en variabel i hurtig, 336 00:16:22,160 --> 00:16:25,900 er vi bruger lad søgeord, efterfulgt af navnet på den variable, 337 00:16:25,900 --> 00:16:29,280 og så giver vi nogle initialisering af data eventuelt. 338 00:16:29,280 --> 00:16:34,660 Så dette tilfælde vi definerer en konstant kaldet navn, 339 00:16:34,660 --> 00:16:37,775 og vi vil bruge det i produktionen af ​​vores print linje 340 00:16:37,775 --> 00:16:39,590 i bunden, hej navn. 341 00:16:39,590 --> 00:16:43,260 >> Bemærk nu, at frem for at bruge% s, vi kan indkapsle navnet på denne 342 00:16:43,260 --> 00:16:49,960 variabel i / () og være i stand til sammenkæde i indholdet af denne 343 00:16:49,960 --> 00:16:51,790 streng i denne streng. 344 00:16:51,790 --> 00:16:56,510 Nu modsætning C, streng er en faktiske real type hurtig. 345 00:16:56,510 --> 00:16:59,240 Og så kan den sammenlignes med int'er og sideløbende 346 00:16:59,240 --> 00:17:02,220 fordobler meget let og naturligt forhold 347 00:17:02,220 --> 00:17:05,450 til nogle af de andre sprog, som vi har set. 348 00:17:05,450 --> 00:17:07,980 Så det ville faktisk fungerer ligesom du ville forvente. 349 00:17:07,980 --> 00:17:10,540 >> Jeg kan køre 2.swift. 350 00:17:10,540 --> 00:17:14,390 Og vi ser, at mit navn er faktisk splejset i, "Hello Dan." 351 00:17:14,390 --> 00:17:16,050 OK, awesome. 352 00:17:16,050 --> 00:17:17,485 Flytning til nummer tre. 353 00:17:17,485 --> 00:17:19,359 Nu var det en lille smule af en hvid løgn, at jeg 354 00:17:19,359 --> 00:17:23,369 sagde, at den måde, at vi erklærer variabler var at bruge lad søgeord. 355 00:17:23,369 --> 00:17:27,640 Så mange gange, som du overhovedet kan du gøre ønsker at bruge lade, fordi det, der gør 356 00:17:27,640 --> 00:17:29,280 er det definerer en konstant. 357 00:17:29,280 --> 00:17:33,010 Og der fortæller hurtigt, at det kan optimere hastigheden på din ansøgning 358 00:17:33,010 --> 00:17:36,230 fordi den ved, at der variabel kommer ikke til at ændre sig. 359 00:17:36,230 --> 00:17:38,760 >> Så vurdere omhyggeligt når du kommer til at bruge 360 00:17:38,760 --> 00:17:41,382 en variabel for henblik på at ændre det. 361 00:17:41,382 --> 00:17:43,340 Og når du kommer til at oprette en variabel bare 362 00:17:43,340 --> 00:17:47,010 til at holde nogle data, og det er faktisk ikke kommer til at ændre sig. 363 00:17:47,010 --> 00:17:50,150 Så dette begreb uforanderlighed, det er faktisk ikke til at ændre, 364 00:17:50,150 --> 00:17:53,740 er en vigtig ligesom langt ned som definerer variabler. 365 00:17:53,740 --> 00:17:56,870 Så her har vi defineret et navn, Lad navn, og i dette tilfælde 366 00:17:56,870 --> 00:18:02,120 Det er en konstant, der er af typen streng, og den er lig med Dan. 367 00:18:02,120 --> 00:18:05,580 >> Så mens der i tidligere versionen, det infers-- og med "det" 368 00:18:05,580 --> 00:18:08,220 Jeg mener swift-- hurtig udleder den type data 369 00:18:08,220 --> 00:18:10,850 at vi har indgået variablen. 370 00:18:10,850 --> 00:18:12,930 I dette tilfælde kan vi være eksplicit. 371 00:18:12,930 --> 00:18:17,590 Så lad derefter navnet på denne variabel er navn og derefter et kolon. 372 00:18:17,590 --> 00:18:21,350 Og efter kolon gør vi specificere den type data. 373 00:18:21,350 --> 00:18:24,694 Så ikke længere er det int navn eller string navn eller noget lignende. 374 00:18:24,694 --> 00:18:26,860 Men i stedet lade mærke, vi er definere, hvorvidt 375 00:18:26,860 --> 00:18:29,090 det er konstant eller variabel, efterfulgt af navnet, 376 00:18:29,090 --> 00:18:31,870 efterfulgt af typen valgfrit. 377 00:18:31,870 --> 00:18:34,730 >> Så i dette tilfælde, vi definerer dette navn er en streng. 378 00:18:34,730 --> 00:18:35,790 Vi siger, er Dan. 379 00:18:35,790 --> 00:18:39,270 Og nu har jeg en anden variabel, i dette tilfælde det kaldes etiket. 380 00:18:39,270 --> 00:18:42,090 Men bemærk, at det er foranstillet nøgleordet var. 381 00:18:42,090 --> 00:18:44,430 Nøgleordet var midler at denne variabel kan 382 00:18:44,430 --> 00:18:48,720 ændres på et senere tidspunkt i tid, et eller andet sted nede i koden 383 00:18:48,720 --> 00:18:52,480 kan vi faktisk ændre det, og det vil ikke give os nogen bestemt fejl. 384 00:18:52,480 --> 00:18:56,760 >> Vi kan gøre standard concatenating operatør her ved hjælp af plus-symbolet 385 00:18:56,760 --> 00:19:00,130 til rent faktisk at tilføje vores navn til denne streng. 386 00:19:00,130 --> 00:19:02,921 Og så kan vi udskrive som vi så for et øjeblik siden. 387 00:19:02,921 --> 00:19:04,920 Lad os nu sige, at du ønsker at skabe en variabel 388 00:19:04,920 --> 00:19:06,586 men du ikke ønsker at initialisere det endnu. 389 00:19:06,586 --> 00:19:08,590 Du kan endnu ikke ønsker at sætte alle data i det. 390 00:19:08,590 --> 00:19:11,760 Nå du nødt til at fortælle hurtig hvad den type data 391 00:19:11,760 --> 00:19:16,430 vil være, før du kan faktisk definere det ordentligt. 392 00:19:16,430 --> 00:19:20,360 >> Så i dette tilfælde, når vi har defineret en variabel kaldet klasse vi skal være 393 00:19:20,360 --> 00:19:24,450 eksplicit om dens type, fordi det kan ikke udlede bare at kigge 394 00:19:24,450 --> 00:19:27,300 på data med startværdier at du giver den. 395 00:19:27,300 --> 00:19:30,050 Det vil give os en fejl, hvis du bare typen var kvalitet, for eksempel, 396 00:19:30,050 --> 00:19:31,830 fordi det har ingen type derfor. 397 00:19:31,830 --> 00:19:33,353 Så kvalitet = 100. 398 00:19:33,353 --> 00:19:35,790 Så 100 er et heltal, er det passer meget fint ind der. 399 00:19:35,790 --> 00:19:36,998 Den vil fortsætte med at fungere. 400 00:19:36,998 --> 00:19:40,350 401 00:19:40,350 --> 00:19:43,022 Vi kan se, hvor så vi kan sammenkæde dette. 402 00:19:43,022 --> 00:19:44,730 Nu kan du blive fristet, hvis du rent faktisk 403 00:19:44,730 --> 00:19:48,610 ønskede at sammenkæde den kvalitet i en anden tekststreng 404 00:19:48,610 --> 00:19:52,560 ind i en anden streng, at du ville bare bruge den samme concatenating operatør. 405 00:19:52,560 --> 00:19:54,630 Og det ville normalt være sandt. 406 00:19:54,630 --> 00:20:00,540 Men hurtig vil ikke tillade dig at implicit ændre typen af ​​data. 407 00:20:00,540 --> 00:20:03,440 Så i dette tilfælde er line, 25, vil mislykkes 408 00:20:03,440 --> 00:20:06,650 fordi kvalitet er en heltal og ikke en streng. 409 00:20:06,650 --> 00:20:08,760 Og så der er et misforhold sæt af typer. 410 00:20:08,760 --> 00:20:11,780 Så du er nødt til at være eksplicit, når du vil ændre disse data, 411 00:20:11,780 --> 00:20:14,080 når du ønsker at tvinge dette data i en anden type 412 00:20:14,080 --> 00:20:17,250 og sige, OK, jeg ønsker at tage denne klasse, som er et helt tal, 413 00:20:17,250 --> 00:20:19,050 og konvertere den til en streng. 414 00:20:19,050 --> 00:20:23,970 >> Så jeg tager en kapital s String alle typer, vil du bemærke, aktiveres, 415 00:20:23,970 --> 00:20:26,280 Int, Dobbelt, String, så videre og så videre. 416 00:20:26,280 --> 00:20:28,930 Alle af dem aktiveres bare for at gøre tingene lettere. 417 00:20:28,930 --> 00:20:32,240 Og vi vil sige kapitalisere String passere ind i den klasse. 418 00:20:32,240 --> 00:20:35,020 Og det vil skabe en streng ud af det heltal. 419 00:20:35,020 --> 00:20:37,970 Og så kan vi sammenkæde de to meget pænt. 420 00:20:37,970 --> 00:20:40,500 Eventuelle spørgsmål om det her indtil videre? 421 00:20:40,500 --> 00:20:43,770 Okay, lad os pløje igennem til nummer fire. 422 00:20:43,770 --> 00:20:47,870 >> Lad os nu tale om nogle mere avancerede strukturer, som arrays og løkker. 423 00:20:47,870 --> 00:20:54,920 Og i modsætning til C, arrays i Swift ikke er repræsenteret ved pointere. 424 00:20:54,920 --> 00:20:58,730 Pejlemærker i hurtig, selv om de findes, kaldet 425 00:20:58,730 --> 00:21:02,840 ligesom usikre pointers eller en lignende type som det, 426 00:21:02,840 --> 00:21:04,950 de er ikke udsat for du normalt. 427 00:21:04,950 --> 00:21:07,300 Så det bliver meget vanskeligt for dig at manipulere 428 00:21:07,300 --> 00:21:10,020 hukommelsen direkte på din computer. 429 00:21:10,020 --> 00:21:11,670 >> Så arrays er bare en datatype. 430 00:21:11,670 --> 00:21:16,830 Og de er refereres ved hjælp af denne slags nu standard firkantede beslag notation 431 00:21:16,830 --> 00:21:18,280 at du har set før. 432 00:21:18,280 --> 00:21:21,130 Men når du rent faktisk ønsker at definere en type variabel 433 00:21:21,130 --> 00:21:24,330 som en matrix af nogle bestemt type, så er du 434 00:21:24,330 --> 00:21:27,150 sætte denne type i skarp parentes. 435 00:21:27,150 --> 00:21:30,260 Så hvad jeg siger her, er, at Jeg skaber en variabel kaldet 436 00:21:30,260 --> 00:21:33,930 kvaliteter af typen int matrix. 437 00:21:33,930 --> 00:21:37,380 Og jeg sætte det lig med nogle klargjorte data, som i dette tilfælde 438 00:21:37,380 --> 00:21:42,960 er 100, 0, 90, 85, som er blot en samling af vilkårlige kvaliteter her. 439 00:21:42,960 --> 00:21:46,480 Nu i dette tilfælde jeg kunne, Husk, fjern den type, 440 00:21:46,480 --> 00:21:49,580 og det ville være i stand til at udlede det baseret på de klargjorte data. 441 00:21:49,580 --> 00:21:51,990 Men hvis jeg fjernede det og Jeg havde brug for at sætte den senere, 442 00:21:51,990 --> 00:21:56,840 så ville jeg nødt til at sikre at jeg har den type der. 443 00:21:56,840 --> 00:21:58,750 Okay, lad os gå sammen. 444 00:21:58,750 --> 00:22:03,010 Så vi can-- arrays giver os en bred vifte 445 00:22:03,010 --> 00:22:07,130 af metoder gennem at dot notation ved du sikkert nu kender. 446 00:22:07,130 --> 00:22:10,360 Så grades.count, for eksempel, fortæller os netop det antal 447 00:22:10,360 --> 00:22:13,680 elementer, som er indeholdt i denne matrix. 448 00:22:13,680 --> 00:22:17,260 >> Hvis jeg ønsker at tilføje additional-- nu mærke til at dette er en var 449 00:22:17,260 --> 00:22:20,140 og not-- dette er en variabel og ikke en konstant, som 450 00:22:20,140 --> 00:22:24,410 betyder, at jeg kan ændre indholdet af dette array, kan jeg tilføje objekter til det. 451 00:22:24,410 --> 00:22:28,870 Men jeg kan ikke bare sige kvaliteter og derefter i skarp parentes 452 00:22:28,870 --> 00:22:33,280 fire, fordi det vil være en out of bounds fejl i dette tilfælde. 453 00:22:33,280 --> 00:22:36,190 Hvis jeg vil faktisk forandring størrelsen af ​​denne matrix, 454 00:22:36,190 --> 00:22:41,140 Jeg er nødt til at bruge dot append metoden til tilføje noget til den bitre ende af det. 455 00:22:41,140 --> 00:22:46,900 Jeg kan dog ændre individuelle indekser. 456 00:22:46,900 --> 00:22:48,920 >> Så jeg kunne bruge kvaliteter Og så firkantede parenteser 457 00:22:48,920 --> 00:22:52,480 nul til manipulere denne første indeks og så videre, ligesom du normalt ville forvente. 458 00:22:52,480 --> 00:22:56,530 Og jeg kan gøre det samme til rent faktisk modtage data fra, at så godt. 459 00:22:56,530 --> 00:23:00,420 Nu er der også en slags fancy metode at gøre dette, stilling plus ligemænd 460 00:23:00,420 --> 00:23:02,525 og derefter en anden indeks, som vil append-- 461 00:23:02,525 --> 00:23:04,400 eller ikke andet index-- men en anden liste, som 462 00:23:04,400 --> 00:23:07,340 vil tilføje denne liste på bagsiden af ​​kvaliteter. 463 00:23:07,340 --> 00:23:09,780 Og karaktererne vil så indeholder alt det. 464 00:23:09,780 --> 00:23:13,850 Men det er slags en ekstra ting at jeg bare har tænkt at vise dig for sjov. 465 00:23:13,850 --> 00:23:14,910 >> Nu er der en for-løkke. 466 00:23:14,910 --> 00:23:18,970 Og dette er starten på, hvor tingene begynder at ændre en lille smule. 467 00:23:18,970 --> 00:23:22,920 Læg mærke til, hvordan denne for-løkke er forskellig fra efter sløjfer i C. 468 00:23:22,920 --> 00:23:26,470 Nu vil jeg bemærke, at efter sløjfer i Swift kan 469 00:23:26,470 --> 00:23:30,650 komme til at se ud for sløjfer i C, men der er en masse mere brugbare konstruktioner 470 00:23:30,650 --> 00:23:37,840 i det væsentlige eliminere behovet at have for var jeg lig 0 semikolon i 471 00:23:37,840 --> 00:23:40,340 er mindre end en vis længde, så videre og så videre, ikke? 472 00:23:40,340 --> 00:23:42,940 Og denne konstruktion er kun én af dem. 473 00:23:42,940 --> 00:23:49,030 >> For indeks indeks er nyt variabel, i dette tilfælde i området. 474 00:23:49,030 --> 00:23:52,730 Og hvad jeg siger, er, at der er et interval fra 0 hele vejen op til 475 00:23:52,730 --> 00:23:55,870 men ikke inklusive grades.count. 476 00:23:55,870 --> 00:23:58,470 Så denne prik prik mindre end tegn repræsenterer 477 00:23:58,470 --> 00:24:05,040 et interval af værdier startende fra nul hele vejen op til grades.count minus 1. 478 00:24:05,040 --> 00:24:07,070 Der er en separat operatør, der eksisterer, 479 00:24:07,070 --> 00:24:13,320 der er dot dot dot, hvilket ville betyder, at jeg ønsker, at området fra nul 480 00:24:13,320 --> 00:24:16,310 til karakterer tæller inklusive. 481 00:24:16,310 --> 00:24:19,130 >> Men i dette tilfælde, fordi disse arrays er nul indeks, vi selvfølgelig 482 00:24:19,130 --> 00:24:23,290 ikke ønsker at gå til maksimale antal karakterer. 483 00:24:23,290 --> 00:24:26,390 Jeg kan opsummere karaktererne, som du måske forventer, og output alt dette ting. 484 00:24:26,390 --> 00:24:29,620 OK, vi går videre. 485 00:24:29,620 --> 00:24:32,270 Lad os nu tale om funktioner. 486 00:24:32,270 --> 00:24:35,465 For at definere en funktion du bruger funk søgeord. 487 00:24:35,465 --> 00:24:38,090 Og igen, i Swift du nødt til at være meget forsigtig med de typer. 488 00:24:38,090 --> 00:24:41,530 Du giver det parametre ved at definere, for eksempel, 489 00:24:41,530 --> 00:24:45,440 navn parameter og så i colin, den type data 490 00:24:45,440 --> 00:24:47,690 at du forventer, at parameter at acceptere. 491 00:24:47,690 --> 00:24:50,700 >> Så i dette tilfælde har vi en funktion kaldet print kvalitet tæller. 492 00:24:50,700 --> 00:24:54,630 Det accepterer en variabel kaldet gradebook, eller snarere en parameter kaldet Karakterbog. 493 00:24:54,630 --> 00:24:59,267 Og vi forventer, at gradebook at være et array af heltal. 494 00:24:59,267 --> 00:25:01,350 Hvis det gradebook er tom, vi vil printe en ting. 495 00:25:01,350 --> 00:25:06,090 Ellers vil vi udskrive nummeret af kvaliteter, at dette faktisk er. 496 00:25:06,090 --> 00:25:09,470 >> Nu, hvis vi ønsker at vende tilbage en vis værdi, så den måde, 497 00:25:09,470 --> 00:25:14,595 at vi ændre denne definition er til rent faktisk at bruge denne pil søgeord, 498 00:25:14,595 --> 00:25:16,870 eller for at bruge denne pil signifier. 499 00:25:16,870 --> 00:25:19,440 Så her vil vi definere en funktion kaldet gennemsnit. 500 00:25:19,440 --> 00:25:21,940 Vi kommer til at acceptere en liste over numre. 501 00:25:21,940 --> 00:25:25,430 Og vi kommer til at returnere en dobbelt, som forhåbentlig 502 00:25:25,430 --> 00:25:31,270 er gennemsnittet af dette array. 503 00:25:31,270 --> 00:25:34,570 Og for at gøre det, for til rent faktisk at beregne dette gennemsnit, 504 00:25:34,570 --> 00:25:38,651 Vi vil tage en sum, og vi vil på kursus opsummere alle de objekter 505 00:25:38,651 --> 00:25:39,400 inden for dette array. 506 00:25:39,400 --> 00:25:41,480 >> Bemærk, at der er en ny stil for løkke her. 507 00:25:41,480 --> 00:25:45,450 Vi behøver ikke at være eksplicit om iteration over hver enkelt element, 508 00:25:45,450 --> 00:25:48,280 men vi kan i stedet sige til klasse og gradebook, mening 509 00:25:48,280 --> 00:25:50,930 at for hver enkelt element, vi har i dette, 510 00:25:50,930 --> 00:25:53,482 bestemme, at produkt i dette variabel kaldet klasse. 511 00:25:53,482 --> 00:25:54,940 Og jeg ønsker at gøre noget med det. 512 00:25:54,940 --> 00:26:00,350 Så jeg har tænkt mig at opsummere alt dette data og faktisk returnere dobbelt division. 513 00:26:00,350 --> 00:26:04,436 >> Nu opdager igen her er der Begrebet heltalsdivision i Swift. 514 00:26:04,436 --> 00:26:06,810 Hvis du ønsker at fordoble division fordi du vil have decimaler, 515 00:26:06,810 --> 00:26:09,460 så har du til at være eksplicit, ikke kun om den ene side, 516 00:26:09,460 --> 00:26:14,030 fordi det ikke kommer til at give dig at tvinge data på begge sider af denne, 517 00:26:14,030 --> 00:26:17,030 du er nødt til rent faktisk kurs begge sider i double 518 00:26:17,030 --> 00:26:19,440 så du er meget eksplicit om at sikre 519 00:26:19,440 --> 00:26:23,370 at du laver dobbelt division. 520 00:26:23,370 --> 00:26:26,150 >> Lad os gå videre. 521 00:26:26,150 --> 00:26:31,150 Så hvis jeg rent faktisk ønsker at accept-- så i dette særlige eksempel, 522 00:26:31,150 --> 00:26:34,260 det er stadig en kommando line baseret applikation. 523 00:26:34,260 --> 00:26:37,920 Og vi er begyndt at se nogle af begrænsningerne i den unge sprog 524 00:26:37,920 --> 00:26:41,850 ved, at selv om vi kan adgang argumenter ved hjælp 525 00:26:41,850 --> 00:26:44,940 dette process.arguments, det er stadig ikke nødvendigvis den reneste 526 00:26:44,940 --> 00:26:46,200 ting, som vi nogensinde har set. 527 00:26:46,200 --> 00:26:49,142 Men dybest set vil jeg opfordre dig at slags se på denne kode 528 00:26:49,142 --> 00:26:51,100 og forsøge at finde ud hvad der foregår. 529 00:26:51,100 --> 00:26:55,030 >> Væsentlige, hvad der sker, er, at vi tager en liste med argumenter 530 00:26:55,030 --> 00:26:57,610 og blev tvinge dem ind heltal, og så er vi 531 00:26:57,610 --> 00:27:03,620 vil bruge det som en måde at udskrive ud gennemsnittet af alle vores kvaliteter. 532 00:27:03,620 --> 00:27:06,150 533 00:27:06,150 --> 00:27:07,350 Bevæger sig på. 534 00:27:07,350 --> 00:27:11,190 Nu er der en anden type data-- anden data type i stedet for arrays 535 00:27:11,190 --> 00:27:14,940 kaldet ordbøger, som er meget ligner hash tabeller eller hash kort 536 00:27:14,940 --> 00:27:18,560 og ligner også PHP er associative arrays. 537 00:27:18,560 --> 00:27:20,770 Så de har den opfattelse af nøgler og værdier. 538 00:27:20,770 --> 00:27:23,780 >> Og de er defineret også med dette torv beslag notation, 539 00:27:23,780 --> 00:27:26,750 men forskellen er at ordbøger har 540 00:27:26,750 --> 00:27:29,370 indersiden af ​​firkantede beslag, et kolon. 541 00:27:29,370 --> 00:27:33,850 Og kolon adskiller data skriv det er nøglen, og værdien. 542 00:27:33,850 --> 00:27:38,540 Så i dette tilfælde, vil jeg skabe en ordbog til at acceptere nogle kvaliteter. 543 00:27:38,540 --> 00:27:44,200 Og det vil være snor seværdighed: int, 544 00:27:44,200 --> 00:27:46,940 hvilket betyder, at alle de nøgler vil være strenge, 545 00:27:46,940 --> 00:27:53,080 og alle værdierne af disse nøgler vil være heltal. 546 00:27:53,080 --> 00:27:55,780 >> Hvad dette betyder er, at jeg kan derefter henvise til specifikke data 547 00:27:55,780 --> 00:28:00,490 at jeg ønsker at bruge disse nøgler snarere end at bruge numeriske indeks ligesom jeg 548 00:28:00,490 --> 00:28:04,350 ville have for en standard array. 549 00:28:04,350 --> 00:28:06,470 Lad os nu se, er der en vigtig ting 550 00:28:06,470 --> 00:28:10,790 at jeg vil også gerne nævne om denne særlige sekvens kode. 551 00:28:10,790 --> 00:28:12,910 Og det er, at der er en anden type data, 552 00:28:12,910 --> 00:28:15,580 eller rettere der er denne idé om data, der er 553 00:28:15,580 --> 00:28:18,340 indeholdt i Swift kaldet optionals. 554 00:28:18,340 --> 00:28:21,270 >> Og hvad optionals betyder at det anerkender, 555 00:28:21,270 --> 00:28:27,500 at nogle gange er du ikke kommer til at få de data, du rent faktisk forventer. 556 00:28:27,500 --> 00:28:31,400 Og så hvad jeg mener med det is-- lad os tage et kig på denne sekvens af kode 557 00:28:31,400 --> 00:28:38,910 som gentager over hele den argumenter, der blev videregivet til denne kode 558 00:28:38,910 --> 00:28:43,460 og forsøger at konvertere dem, forsøger at opdele i en række strenge, 559 00:28:43,460 --> 00:28:47,310 fordi den accepterer en meget bestemt type argument. 560 00:28:47,310 --> 00:28:51,530 Og så er det vil forsøge at tvinge strengene, der repræsenterer tal 561 00:28:51,530 --> 00:28:55,460 i hele tal, der er kvaliteter, at jeg så kan beregne. 562 00:28:55,460 --> 00:28:58,230 >> Så dybest set jeg har tænkt mig at bruge denne split funktion, 563 00:28:58,230 --> 00:29:00,080 findes inden for Swift standard bibliotek. 564 00:29:00,080 --> 00:29:03,720 Jeg har tænkt mig at gå ind i det streng, som jeg vil opdele. 565 00:29:03,720 --> 00:29:06,980 Og så i at bruge dette slags funky syntaks, som 566 00:29:06,980 --> 00:29:09,670 Jeg ved ikke, om vi får komme til, men måske, vi 567 00:29:09,670 --> 00:29:14,320 rent faktisk vil angive den præcise tegn, som vi ønsker at splitte på. 568 00:29:14,320 --> 00:29:16,030 Så hvad betyder det egentlig ud? 569 00:29:16,030 --> 00:29:18,740 Lad os tage et kig på faktisk kører denne kode. 570 00:29:18,740 --> 00:29:22,000 >> Så for eksempel, lad os sige, at jeg har en quiz og jeg fik 50 på det. 571 00:29:22,000 --> 00:29:23,960 Og jeg har en PSETs og Jeg fik en hundrede på det. 572 00:29:23,960 --> 00:29:29,180 Og jeg got-- der er en anden quiz og jeg fik en 40 på det. 573 00:29:29,180 --> 00:29:33,520 Jeg trykker på Enter, og i sidste ende, hvad vil ske er, at hvad det gør 574 00:29:33,520 --> 00:29:37,730 tager disse parametre, opsplitning strengene på disse koloner, 575 00:29:37,730 --> 00:29:41,390 erkender, at der er to elementer i hver enkelt, 576 00:29:41,390 --> 00:29:43,700 og det er det væsentlige holde styr på hver. 577 00:29:43,700 --> 00:29:49,226 >> Så jeg har i min ordbog en quiz, hvis værdi er repræsenteret ved tallet 50, 578 00:29:49,226 --> 00:29:54,290 Jeg har en Pset der har værdi på 100, og en quiz en, der har en værdi på 40. 579 00:29:54,290 --> 00:29:57,400 Derefter senere i koden I faktisk gennemsnit alle disse værdier 580 00:29:57,400 --> 00:30:01,160 og liste alle nøglerne til at særlig ordbog. 581 00:30:01,160 --> 00:30:03,217 Men det er vigtigt så du kan mærke 582 00:30:03,217 --> 00:30:06,050 hvad der sker, er, at det, vi ønsker at gøre, er at tage denne streng 583 00:30:06,050 --> 00:30:11,450 og opdele det på denne karakter, som vi kan gøre igen med denne split 584 00:30:11,450 --> 00:30:15,690 funktion ved hjælp af denne slags interessant syntaks, der eksisterer her. 585 00:30:15,690 --> 00:30:17,880 >> Bare for nu, at det er OK. 586 00:30:17,880 --> 00:30:19,980 Vi ser mere på dette på bare et lille stykke tid. 587 00:30:19,980 --> 00:30:23,230 Men nu er der en interessant aspekt, at vi faktisk 588 00:30:23,230 --> 00:30:27,250 vil forsøge at konvertere dette streng til et heltal. 589 00:30:27,250 --> 00:30:29,720 Men på andre sprog hvad der kan ske, er 590 00:30:29,720 --> 00:30:33,440 at vi ville sandsynligvis forsøge at gøre det, og enten komme tilbage 591 00:30:33,440 --> 00:30:36,185 en slags sentinel værdi som negativ 592 00:30:36,185 --> 00:30:39,420 eller måske et nul eller noget lignende. 593 00:30:39,420 --> 00:30:41,070 Eller måske ville det bare forårsaget en fejl. 594 00:30:41,070 --> 00:30:42,820 Og vi skulle derefter fange denne fejl 595 00:30:42,820 --> 00:30:44,820 og derefter forsøge at gøre noget, der bygger på det faktum, 596 00:30:44,820 --> 00:30:48,280 at denne omdannelse til et heltal mislykkedes. 597 00:30:48,280 --> 00:30:50,460 Det er, hvor denne idé af optionals kommer ind. 598 00:30:50,460 --> 00:30:56,120 Du kan faktisk lave en datatype, er en int spørgsmålstegn, f.eks. 599 00:30:56,120 --> 00:30:59,140 600 00:30:59,140 --> 00:31:01,910 Det betyder, at denne heltal er i virkeligheden, valgfrit. 601 00:31:01,910 --> 00:31:05,980 Og hvad vil der ske, er, at det kan indeholde et heltal, eller den kan ikke. 602 00:31:05,980 --> 00:31:10,650 Det kan faktisk være denne anden idé, helt kaldet nill. 603 00:31:10,650 --> 00:31:14,900 I hvilke det betyder, at der er ingen overhovedet i denne værdi. 604 00:31:14,900 --> 00:31:16,810 Det er ikke engang nul, der er bare ingen værdi. 605 00:31:16,810 --> 00:31:18,790 Der er absolut ingen værdi repræsenteret. 606 00:31:18,790 --> 00:31:21,650 >> Og det er det, denne linje 71 gør. 607 00:31:21,650 --> 00:31:25,990 At det er at sige, at jeg vil prøve at sætte en værdi, 608 00:31:25,990 --> 00:31:31,790 en variabel kaldet klasse, svarende til omdannelse af denne streng i en int. 609 00:31:31,790 --> 00:31:34,010 Så jeg har taget denne streng, denne første komponenter, 610 00:31:34,010 --> 00:31:37,680 eller rettere den anden komponenter, fordi dette 611 00:31:37,680 --> 00:31:40,770 er nul indekseret af denne streng, som jeg har delt. 612 00:31:40,770 --> 00:31:42,930 Og jeg ønsker at konvertere at til et heltal. 613 00:31:42,930 --> 00:31:46,730 Men det kan ikke altid gå normalt, fordi forestille 614 00:31:46,730 --> 00:31:50,710 hvad der ville ske, hvis i stedet for typen et nummer, jeg skriver selvfølgelig gerne asdf. 615 00:31:50,710 --> 00:31:51,534 >> Det kommer til at mislykkes. 616 00:31:51,534 --> 00:31:54,200 Det er faktisk ikke til at være i stand til at konvertere det til et heltal 617 00:31:54,200 --> 00:31:55,510 som jeg ville forvente. 618 00:31:55,510 --> 00:31:58,660 Så i stedet for at sparke en slags fejl, 619 00:31:58,660 --> 00:32:01,210 vi har denne idé om en valgfri. 620 00:32:01,210 --> 00:32:04,240 Og det betyder, at brugen af dette spørgsmålstegn, jeg kan sige, 621 00:32:04,240 --> 00:32:09,100 OK, er det muligt, at jeg kan tage dette konverteres til en int, 622 00:32:09,100 --> 00:32:12,630 og sætte det ind i en variabel, der vil også være en int. 623 00:32:12,630 --> 00:32:15,420 Hvis ja, så det betyder at dette var vellykket 624 00:32:15,420 --> 00:32:18,720 og denne første del af blokken kan fortsætte. 625 00:32:18,720 --> 00:32:21,040 >> Ellers det mislykkedes. 626 00:32:21,040 --> 00:32:25,840 Der er ingen værdi i grade-- eller snarere er der ingen værdi i eksisterende, 627 00:32:25,840 --> 00:32:30,220 og jeg faktisk nødt til at prøve at håndtere denne fejltilstand. 628 00:32:30,220 --> 00:32:33,340 Du kommer til at se denne spørgsmålstegn hele tiden 629 00:32:33,340 --> 00:32:35,990 i Swift og i eksempel kode til Swift. 630 00:32:35,990 --> 00:32:40,980 Og faktisk nill operatør denne slags af spørgsmålstegn, den optionals del, 631 00:32:40,980 --> 00:32:45,057 bliver sandsynligvis en af de mere vanskelige ting 632 00:32:45,057 --> 00:32:47,640 at slags wrap dit hoved omkring som du rent faktisk arbejder med det. 633 00:32:47,640 --> 00:32:48,490 >> Det kan være fornuftigt nu. 634 00:32:48,490 --> 00:32:50,760 Og i virkeligheden, da jeg var skriftlig prøve kode til dette, 635 00:32:50,760 --> 00:32:52,780 sikkert jeg forstod hvad der foregik, 636 00:32:52,780 --> 00:32:55,570 men stadig fanget mig ved overraskelse alle så ofte 637 00:32:55,570 --> 00:32:58,370 når jeg ville finde, nogle data var faktisk 638 00:32:58,370 --> 00:33:04,024 en nul-version, en valgfri udgave af de data, jeg forventede. 639 00:33:04,024 --> 00:33:06,190 Så bare indse, at hvis du har en valgfri udgave 640 00:33:06,190 --> 00:33:09,360 du er nødt til at pakke det data fra denne boks. 641 00:33:09,360 --> 00:33:15,870 >> Så det er lidt ligesom I-- forestille mig, hvis du har en kasse, og det indeholder noget. 642 00:33:15,870 --> 00:33:18,490 Og hvad du skal gøre er at stille spørgsmålet, 643 00:33:18,490 --> 00:33:22,800 er det muligt, at denne boks faktisk indeholder de data, jeg leder efter? 644 00:33:22,800 --> 00:33:28,180 Hvis ja, så træk at data ud og sætte det ind i denne variabel eksisterende. 645 00:33:28,180 --> 00:33:32,080 Hvis ikke, så jeg bare nødt til at se bort fra indholdet af denne boks 646 00:33:32,080 --> 00:33:34,310 helt, fordi det bogstaveligt indeholder ingenting. 647 00:33:34,310 --> 00:33:36,880 648 00:33:36,880 --> 00:33:40,400 >> Eventuelle spørgsmål vedrørende denne? 649 00:33:40,400 --> 00:33:44,430 OK, lad os gå væk fra dette slags kommandolinjen baseret ting 650 00:33:44,430 --> 00:33:47,610 og begynde at kigge på nogle af teknologi 651 00:33:47,610 --> 00:33:53,060 at Xcode giver til os i form af legepladser. 652 00:33:53,060 --> 00:33:56,669 Så der er en masse kapacitet her med Swift. 653 00:33:56,669 --> 00:33:59,210 Og hvis du åbner op Xcode og det spørger dig, hvad du vil gøre, 654 00:33:59,210 --> 00:34:01,340 du kan åbne op på legepladsen og bare lege 655 00:34:01,340 --> 00:34:06,200 med en masse forskellige strukturer og aspekter af sproget 656 00:34:06,200 --> 00:34:11,800 før du selv begynder at røre iOS SDK eller Mac SDK. 657 00:34:11,800 --> 00:34:15,670 >> Så denne sag, lad os sige, at jeg have-- Jeg har en forholdsvis konstruerede eksempel 658 00:34:15,670 --> 00:34:18,460 her, men bær over med mig som vi sortere af arbejde gennem dette eksempel. 659 00:34:18,460 --> 00:34:22,639 Lad os sige, at vi er nødt til at gøre en masse eksponenter med en fast værdi, 660 00:34:22,639 --> 00:34:26,397 ligesom vi ved, at vi får brug for gøre en masse firkantede beføjelser, f.eks. 661 00:34:26,397 --> 00:34:28,980 Så vi kommer til at tage en vis værdi x, vi vil firkantet det, 662 00:34:28,980 --> 00:34:30,540 vi kommer til at tage en vis værdi y og vi vil square. 663 00:34:30,540 --> 00:34:31,780 Så videre og så videre. 664 00:34:31,780 --> 00:34:35,549 >> Nu kan vi faktisk bare oprette en effekt på 2 funktion for dette, ikke? 665 00:34:35,549 --> 00:34:37,090 Så vi ville skabe en effekt på 2 funktion. 666 00:34:37,090 --> 00:34:38,600 Vi vil acceptere en dobbelt. 667 00:34:38,600 --> 00:34:41,489 Vi output-- eller vi vil returnere en dobbelt type. 668 00:34:41,489 --> 00:34:46,159 Vi tager dette resultat og derefter til to gange 669 00:34:46,159 --> 00:34:52,040 hvad vi faktisk tage de resultater, som blev initialiseret til værdien af ​​en, 670 00:34:52,040 --> 00:34:53,090 og gange det med x. 671 00:34:53,090 --> 00:34:56,540 Så i det væsentlige, vi har x gange x her. 672 00:34:56,540 --> 00:35:01,860 >> Og så så jeg kan så, som vi måske forventer, tage, køre magt 2, 673 00:35:01,860 --> 00:35:03,680 leverer til det nogle data, jeg kan lide 2.0. 674 00:35:03,680 --> 00:35:05,756 Og vi får at se resultaterne her 4,0. 675 00:35:05,756 --> 00:35:09,200 Kør magt 2 på 3,2, og vi får at se vores resultat, 10,24. 676 00:35:09,200 --> 00:35:10,840 Så langt så godt, ikke? 677 00:35:10,840 --> 00:35:12,070 Nu er vi tænker, ja, OK. 678 00:35:12,070 --> 00:35:15,530 Nu har jeg faktisk nødt til at gøre en masse kræfter på 3. 679 00:35:15,530 --> 00:35:19,180 Så jeg vil kopiere indsætte alt dette kodeks, ændre navnet på den funktion fra 680 00:35:19,180 --> 00:35:24,440 potens af 2 til effekt på 3, og alt vil være den samme bortset fra denne værdi 681 00:35:24,440 --> 00:35:26,740 her, dette interval, 1 ... 2. 682 00:35:26,740 --> 00:35:29,590 >> Så i stedet for at gentage denne løkke to gange, 683 00:35:29,590 --> 00:35:31,880 Jeg ønsker at gentage denne løkke tre gange. 684 00:35:31,880 --> 00:35:36,330 Så jeg bare ændre denne værdi fra 1 til 3-- eller snarere fra 2 til 3. 685 00:35:36,330 --> 00:35:39,230 Så igen, den samme kode, det er den eneste ændring. 686 00:35:39,230 --> 00:35:40,080 Nu er dette også virker. 687 00:35:40,080 --> 00:35:43,860 Power of 3 tilvejebragt i en vis værdi på 2. 688 00:35:43,860 --> 00:35:44,420 Vi får 8. 689 00:35:44,420 --> 00:35:45,370 Så 2 kubik. 690 00:35:45,370 --> 00:35:48,060 Og 3,2 kubik er 32,768. 691 00:35:48,060 --> 00:35:50,597 Og så langt så godt, ikke? 692 00:35:50,597 --> 00:35:52,930 Men forhåbentlig er lidt lidt af et rødt flag for dig 693 00:35:52,930 --> 00:35:55,530 i, at vi nu har dobbeltarbejde af kode 694 00:35:55,530 --> 00:35:58,800 bortset fra nogle meget mindre skifte fra den ene til den næste. 695 00:35:58,800 --> 00:36:02,170 Så er der nogen måde at vi måske være i stand til at forenkle 696 00:36:02,170 --> 00:36:06,080 dette problem, hvor vi rent faktisk kan, under kørslen, finde ud af nogle, 697 00:36:06,080 --> 00:36:11,320 giver os nogle funktion, der har netop magt, at vi ønsker. 698 00:36:11,320 --> 00:36:13,960 >> Og der er denne idé om lukninger, som er virkelig, virkelig 699 00:36:13,960 --> 00:36:18,180 vigtigt i forbindelse med Swift, og i mange andre sprog. 700 00:36:18,180 --> 00:36:21,580 Men sandsynligvis vil du se det brugt mere i Swift 701 00:36:21,580 --> 00:36:23,650 fordi det er indlejret i sprog 702 00:36:23,650 --> 00:36:28,280 end du vil i andre også moderne sprog. 703 00:36:28,280 --> 00:36:31,140 Så ideen om en lukning er det, at vi 704 00:36:31,140 --> 00:36:35,430 kan have en funktion, der er beregnet til at være en generisk funktion, en generisk magt 705 00:36:35,430 --> 00:36:36,860 funktion. 706 00:36:36,860 --> 00:36:41,010 >> Og denne funktion vil acceptere denne eksponent, at vi faktisk 707 00:36:41,010 --> 00:36:42,990 vil oprette. 708 00:36:42,990 --> 00:36:46,550 Så for eksempel den allerførste Eksempelvis vi ønskede en potens af 2. 709 00:36:46,550 --> 00:36:50,050 Så vi ville give magt og derefter i parentes 2. 710 00:36:50,050 --> 00:36:52,490 Og nu mærke til hvad dette rent faktisk vender tilbage. 711 00:36:52,490 --> 00:36:57,680 Dette tager en indgang af en primer kaldet y, der er et heltal, 712 00:36:57,680 --> 00:37:03,090 og den returnerer denne vanvittige leder ting i parentheses-- parentes 713 00:37:03,090 --> 00:37:06,230 dobbelt og derefter pil dobbelt. 714 00:37:06,230 --> 00:37:10,270 >> Hvad dette betyder, er, at jeg er vil returnere en funktion. 715 00:37:10,270 --> 00:37:13,510 Jeg er ikke returnere en anden type data, er jeg 716 00:37:13,510 --> 00:37:16,350 faktisk returnere en funktion der har denne parameter, at 717 00:37:16,350 --> 00:37:22,680 accepterer en dobbelt som input og udgange en dobbelt som en returværdi. 718 00:37:22,680 --> 00:37:29,750 Og som et resultat, for nu har jeg kaldt magt, der passerer i en vis værdi for y, 719 00:37:29,750 --> 00:37:32,280 og jeg er ved at oprette denne anden function-- meddelelse, at der er 720 00:37:32,280 --> 00:37:35,980 en anden funktion, der bliver skabt indersiden af ​​denne-- hvad jeg gør 721 00:37:35,980 --> 00:37:37,830 er jeg så ændre denne værdi, at man 722 00:37:37,830 --> 00:37:41,010 værdi, som jeg havde ændret fra 2 til 3, jeg gør det nu y. 723 00:37:41,010 --> 00:37:42,500 >> Og det fortsætter. 724 00:37:42,500 --> 00:37:48,530 Så hver gang jeg kalder magt af væsentlige, hvad der sker 725 00:37:48,530 --> 00:37:51,030 er, at jeg får returneret en funktion. 726 00:37:51,030 --> 00:37:54,310 Bemærk, at her har jeg defineret en ny variabel kaldet firkant. 727 00:37:54,310 --> 00:37:59,340 Jeg har sat det lig magt, forudsat denne værdi 2 til magt. 728 00:37:59,340 --> 00:38:02,030 Og hvad det returnerede er den funktion. 729 00:38:02,030 --> 00:38:05,970 Så firkantet, den variable firkantet, nu er af typen funktion 730 00:38:05,970 --> 00:38:11,390 der har denne-- Ups, skal du rulle op en lille bit-- der har denne signatur, 731 00:38:11,390 --> 00:38:15,560 acceptere en dobbelt og output en dobbelt. 732 00:38:15,560 --> 00:38:17,330 >> Så nu, hvad jeg har gjort er jeg har i det væsentlige 733 00:38:17,330 --> 00:38:22,890 oprettet en funktion kaldet firkant, påtager sig noget værdi og vil square. 734 00:38:22,890 --> 00:38:24,960 Vi kan se, hvad der sker hernede. 735 00:38:24,960 --> 00:38:29,960 Square 3 for eksempel betyder, at jeg har tænkt mig at tage værdien 3 og kvadreret det. 736 00:38:29,960 --> 00:38:32,010 Så hvordan præcist gør dette arbejde? 737 00:38:32,010 --> 00:38:37,800 Når jeg passerer magt 2-- når jeg pass 2 ind i denne magt funktion, 738 00:38:37,800 --> 00:38:44,430 denne variabel y er befolket med at værdien 2. 739 00:38:44,430 --> 00:38:46,340 Og det er slags gemt i hukommelsen. 740 00:38:46,340 --> 00:38:49,430 Det er lidt ligesom afholdt i tilstand eller andet sted i computeren, 741 00:38:49,430 --> 00:38:51,980 vi ikke rigtig pleje hvordan eller hvor på dette punkt. 742 00:38:51,980 --> 00:38:54,692 >> Men jeg vender tilbage denne funktion kaldet exponentiate. 743 00:38:54,692 --> 00:38:57,400 Og igen, det er faktisk ligegyldigt hvad denne funktion kaldes, 744 00:38:57,400 --> 00:39:01,730 vi virkelig kan kalde det noget, at accepterer en dobbelt og returnerer en dobbelt, 745 00:39:01,730 --> 00:39:05,640 men anvender denne værdi y inde i den. 746 00:39:05,640 --> 00:39:09,290 Så selv om det er denne funktion, denne exponentiater funktion, der er 747 00:39:09,290 --> 00:39:13,600 blevet returneret tilbage til mit variabel, jeg kaldte firkantet, 748 00:39:13,600 --> 00:39:17,980 det har indeholdt i den denne opfattelse af, hvad y var. 749 00:39:17,980 --> 00:39:19,070 Og det husker det. 750 00:39:19,070 --> 00:39:24,810 >> Så hver gang jeg kalder denne funktion, som kaldes nu firkantet, bruger det. 751 00:39:24,810 --> 00:39:27,990 Men det betyder også, at jeg kan oprette en anden variabel ved hjælp 752 00:39:27,990 --> 00:39:29,120 en anden magt. 753 00:39:29,120 --> 00:39:33,240 Så jeg kan lave en terning variabel, for eksempel give den magt 3. 754 00:39:33,240 --> 00:39:37,230 Nu terning vil faktisk tage nogle værdi og kube, og returnere det. 755 00:39:37,230 --> 00:39:39,570 Så vi kan se, at jeg får en værdi på 8 ud af det. 756 00:39:39,570 --> 00:39:42,720 >> Men denne værdi y har ikke ændret, fordi de er 757 00:39:42,720 --> 00:39:44,980 afholdt i slags uafhængige variable. 758 00:39:44,980 --> 00:39:47,480 De slags holdes i uafhængige rum i hukommelsen. 759 00:39:47,480 --> 00:39:51,290 Så terning vil altid have x til potensen af ​​3. 760 00:39:51,290 --> 00:39:55,380 Og pladsen vil altid have x til potensen af ​​2, som 761 00:39:55,380 --> 00:39:58,470 betyder, at pladsen vil altid firkantede numre, som jeg forventer. 762 00:39:58,470 --> 00:40:01,794 Og terning vil altid kubik numre, som jeg forventer. 763 00:40:01,794 --> 00:40:04,960 Det betyder også, at nogle gange kan man få en slags funky ud syntaks 764 00:40:04,960 --> 00:40:09,030 hvor du har magt i det nederst på skærmen her, på mindst 5. 765 00:40:09,030 --> 00:40:11,410 Og du passerer ind i resultatet. 766 00:40:11,410 --> 00:40:14,670 Kalder du det funktion, der er blevet returneret med nummer 4. 767 00:40:14,670 --> 00:40:17,440 Og så hvad det væsentlige dette er 4 til den femte strøm, 768 00:40:17,440 --> 00:40:20,830 Vi kan se resultaterne der. 769 00:40:20,830 --> 00:40:23,690 Med mig indtil videre? 770 00:40:23,690 --> 00:40:26,620 >> Så denne idé kaldes en lukning, fordi det, vi dybest set gør 771 00:40:26,620 --> 00:40:30,610 er vi indkapsler nogle data into-- slags 772 00:40:30,610 --> 00:40:33,050 omslutte disse data ind i en funktion, og vi er 773 00:40:33,050 --> 00:40:36,240 være i stand til at genbruge denne funktion. 774 00:40:36,240 --> 00:40:41,480 Nu er denne syntaks selv kan faktisk forenkles et stort beløb. 775 00:40:41,480 --> 00:40:45,005 Og der er masser af mulighed i Swift for denne forenkling. 776 00:40:45,005 --> 00:40:47,780 Og det er, hvad slags det efterfølgende dem, der faktisk se på. 777 00:40:47,780 --> 00:40:51,400 Så i 7b f.eks vi tage netop dette samme kode. 778 00:40:51,400 --> 00:40:54,360 >> Men nu i stedet faktisk definere en funktion 779 00:40:54,360 --> 00:40:57,910 indersiden af ​​denne beføjelse fungere og give den et navn, 780 00:40:57,910 --> 00:41:00,150 og derefter returnere navnet af denne funktion, som 781 00:41:00,150 --> 00:41:02,357 derefter anvendes som en del af denne lukning, i stedet er vi 782 00:41:02,357 --> 00:41:03,440 bare at forenkle det. 783 00:41:03,440 --> 00:41:06,580 Vi har ikke brug for denne funktion, der skal navngives. 784 00:41:06,580 --> 00:41:09,760 Så dette er begrebet anonym funktion, hvor vi kan så 785 00:41:09,760 --> 00:41:15,180 accepterer som input i parentes her, variablen x, der er af typen double. 786 00:41:15,180 --> 00:41:17,250 >> Vi kommer til at returnere typen double. 787 00:41:17,250 --> 00:41:19,830 Og derefter nøgleord, n, er begyndelsen af ​​denne funktion. 788 00:41:19,830 --> 00:41:22,180 Så bemærke, at alt dette er inden krøllede parenteser 789 00:41:22,180 --> 00:41:25,310 og vi definerer en Anonym funktion her. 790 00:41:25,310 --> 00:41:29,910 Bare en enklere måde at definere præcis det samme. 791 00:41:29,910 --> 00:41:30,810 OK? 792 00:41:30,810 --> 00:41:36,740 Men hold fast, Swift faktisk tillader os at gå videre og forenkle endnu mere, 793 00:41:36,740 --> 00:41:40,180 fordi virkelig vi ikke pleje, at denne parameter er 794 00:41:40,180 --> 00:41:41,700 navngivet nogen særlig ting. 795 00:41:41,700 --> 00:41:48,090 Det kan virkelig blive kaldt noget og vi kan stadig bruge denne første parameter. 796 00:41:48,090 --> 00:41:53,800 >> Så i virkeligheden er der denne særlige type data i anonym funktioner, 797 00:41:53,800 --> 00:41:57,710 der er denne særlige navn variabler i anonyme funktioner 798 00:41:57,710 --> 00:42:00,280 at starte med dollartegn og repræsenterer 799 00:42:00,280 --> 00:42:03,785 numre parameteren, nul indekseret til denne funktion. 800 00:42:03,785 --> 00:42:05,410 Så der er et par ting foregår. 801 00:42:05,410 --> 00:42:08,550 Her vil jeg vende tilbage, og derefter en krøllet klammeparentes repræsenterer en funktion, 802 00:42:08,550 --> 00:42:09,050 ret? 803 00:42:09,050 --> 00:42:13,920 >> Bemærk, at jeg ikke har defineret parameter typer eller afkastet type. 804 00:42:13,920 --> 00:42:16,460 Det kan faktisk udledes på grund af signaturen 805 00:42:16,460 --> 00:42:18,360 af denne oprindelige funktion. 806 00:42:18,360 --> 00:42:20,500 Så vi kan eliminere det som en mulighed. 807 00:42:20,500 --> 00:42:25,120 Men også jeg kan bruge dollartegn nul til repræsentere denne første parameter, der er 808 00:42:25,120 --> 00:42:28,200 ledes ind i denne anonyme funktion. 809 00:42:28,200 --> 00:42:31,630 Så forenkle det endnu mere. 810 00:42:31,630 --> 00:42:32,750 OK? 811 00:42:32,750 --> 00:42:33,820 Så vidt, så godt? 812 00:42:33,820 --> 00:42:36,980 >> Nu er det denne Motortype- gøre dig huske denne dollartegn nul 813 00:42:36,980 --> 00:42:40,130 at vi så i denne krøllede klammeparentes at vi så bare lidt 814 00:42:40,130 --> 00:42:43,870 siden her i Swift seks eksempel? 815 00:42:43,870 --> 00:42:46,560 Det var lige her. 816 00:42:46,560 --> 00:42:48,430 Bemærk det er præcis hvad vi kigger på, 817 00:42:48,430 --> 00:42:51,580 er, at vi har passeret ind i dette split funktion 818 00:42:51,580 --> 00:42:55,140 en anonym funktion, kontrollerer den første parameter 819 00:42:55,140 --> 00:42:57,830 for at se om det er lig tyktarmen symbol. 820 00:42:57,830 --> 00:42:59,830 Og det er præcis, hvad der er sker, er, at alle 821 00:42:59,830 --> 00:43:02,320 vi doing-- tilbagevenden søgeord er underforstået 822 00:43:02,320 --> 00:43:05,800 i denne case-- vi vender tilbage denne værdi, hvor vi sammenligner 823 00:43:05,800 --> 00:43:10,020 den første parameter mod denne karakter colon. 824 00:43:10,020 --> 00:43:11,730 Og så den slags afmystificerer dette. 825 00:43:11,730 --> 00:43:17,210 Og du kommer til at se denne konstruktion meget i Swift syntaks, så gør holde det 826 00:43:17,210 --> 00:43:19,400 i tankerne, når du er tage et kig på dette. 827 00:43:19,400 --> 00:43:21,970 Nu kan vi komme i gang skinnerne lidt 828 00:43:21,970 --> 00:43:25,460 og gå virkelig dekorativ, der viser selv nogle flere af Swift magt. 829 00:43:25,460 --> 00:43:27,950 Du kan endda se nogle af disse i prøven koder. 830 00:43:27,950 --> 00:43:29,790 Så det er derfor, jeg har tænkt mig at vise det til dig. 831 00:43:29,790 --> 00:43:37,260 >> Dybest set, hvad vi kan gøre, er, at det første af alt, det var slags overflødigt for mig 832 00:43:37,260 --> 00:43:41,710 at gennemføre alt dette magt kode, fordi hvis du importerer Darwin 833 00:43:41,710 --> 00:43:46,490 bibliotek, det faktisk indeholder en funktion kaldet pow, der gør dette for dig. 834 00:43:46,490 --> 00:43:50,570 Så vi kan forenkle det endnu mere og har vores magt up funktion nu blot 835 00:43:50,570 --> 00:43:54,890 være en vidunderlig én liner, hvor vi bare returnere dette anonyme funktion, 836 00:43:54,890 --> 00:44:00,780 accepterer dollartegn 0 som sin base og y som sin eksponent. 837 00:44:00,780 --> 00:44:02,582 >> Men vi kan blive rigtig, virkelig dekorativ når vi 838 00:44:02,582 --> 00:44:04,790 indse, at Swift har en meget strøm under kølerhjelmen. 839 00:44:04,790 --> 00:44:07,010 En masse af de aktører, der Vi har været der beskæftiger sig med, 840 00:44:07,010 --> 00:44:11,270 plus tegn og division symboler og alle disse ting, som du normalt 841 00:44:11,270 --> 00:44:15,620 operere med med datatyper i et programmeringssprog, 842 00:44:15,620 --> 00:44:17,600 faktisk strækbare i Swift. 843 00:44:17,600 --> 00:44:21,460 Så hvad det betyder i, at vi kan definere vores egne aktører. 844 00:44:21,460 --> 00:44:26,020 >> Så nu er jeg træt af at skrive i alt dette pow og derefter en parentes, og derefter 845 00:44:26,020 --> 00:44:26,520 basen. 846 00:44:26,520 --> 00:44:27,520 Jeg ønsker ikke at gøre det. 847 00:44:27,520 --> 00:44:30,190 Jeg rent faktisk ønsker at have en operatør, der tillader mig at gøre det. 848 00:44:30,190 --> 00:44:34,510 Så jeg kan fortælle Swift, som jeg vil at skabe en operatør, stjerne 849 00:44:34,510 --> 00:44:39,472 star-- ved den måde, jeg kan ikke bruge karat fordi karat er en operatør, der 850 00:44:39,472 --> 00:44:40,680 gør noget helt andet. 851 00:44:40,680 --> 00:44:42,720 Så jeg ønsker ikke at sortere af kollidere med det. 852 00:44:42,720 --> 00:44:45,750 Og så det, du ser i en række af sprog, herunder Python, 853 00:44:45,750 --> 00:44:48,810 er ligesom star star operatør at repræsentere eksponenter. 854 00:44:48,810 --> 00:44:50,730 >> Så det er den eneste grund hvorfor jeg har gjort det. 855 00:44:50,730 --> 00:44:53,067 Og det kommer til at blive en Infix typen operatør. 856 00:44:53,067 --> 00:44:54,900 Og jeg nødt til at give til det nogle oplysninger 857 00:44:54,900 --> 00:44:58,386 om forrang for denne operatør, så det er venstre associativ. 858 00:44:58,386 --> 00:45:00,260 Det er ligesom relativt høj forrang i forhold 859 00:45:00,260 --> 00:45:02,432 summation eller formering. 860 00:45:02,432 --> 00:45:04,140 Det er højere forrang end alle dem. 861 00:45:04,140 --> 00:45:04,931 Så videre og så videre. 862 00:45:04,931 --> 00:45:07,410 Og så jeg definere funktion, der faktisk 863 00:45:07,410 --> 00:45:10,070 dikterer, hvad denne operatør gør. 864 00:45:10,070 --> 00:45:14,150 Så antager, at jeg har en venstre side og højre side, 865 00:45:14,150 --> 00:45:17,330 hvilket ville være måske en bedre variabelnavn for dette. 866 00:45:17,330 --> 00:45:20,690 Venstre side og højre side. 867 00:45:20,690 --> 00:45:26,740 Jeg kan derefter tage denne magt venstre side til højre side 868 00:45:26,740 --> 00:45:28,980 og returnere denne værdi. 869 00:45:28,980 --> 00:45:30,370 Så nu er det super søde. 870 00:45:30,370 --> 00:45:33,790 Alt, hvad vi skal gøre, er 2 star star 3 og der er 2 til tredje potens, 871 00:45:33,790 --> 00:45:35,290 og vi får en værdi på 8. 872 00:45:35,290 --> 00:45:40,280 2 star star 10 er 2 til 10. magt, får vi 1.024. 873 00:45:40,280 --> 00:45:43,630 >> Så nu vores magt for funktion, som igen er forskellige, 874 00:45:43,630 --> 00:45:47,030 fordi hele idéen bag dette var, at vi har en funktion, som 875 00:45:47,030 --> 00:45:50,700 altid tager en vis værdi, og multiplicerer det-- eller rettere 876 00:45:50,700 --> 00:45:53,240 tager eksponenten til samme effekt. 877 00:45:53,240 --> 00:45:54,300 Så nu er det endnu enklere. 878 00:45:54,300 --> 00:45:57,070 Så nu er det bare dollar underskrive 0 star star y. 879 00:45:57,070 --> 00:46:01,190 Vi behøver ikke engang at bruge pow længere. 880 00:46:01,190 --> 00:46:03,020 >> OK, der har mistet? 881 00:46:03,020 --> 00:46:03,700 Gør vi OK? 882 00:46:03,700 --> 00:46:05,090 Eventuelle spørgsmål vedrørende denne ting? 883 00:46:05,090 --> 00:46:05,815 Ja? 884 00:46:05,815 --> 00:46:09,500 >> PUBLIKUM: Når du-- [uhørligt] funk magt y dobbelt. 885 00:46:09,500 --> 00:46:11,441 Så når du returnerer en funktion. 886 00:46:11,441 --> 00:46:13,190 DANIEL ARMENDARIZ: Funk magt y dobbelt. 887 00:46:13,190 --> 00:46:14,270 Oh yeah, jeg ved ikke hvad y numre. 888 00:46:14,270 --> 00:46:15,708 Undskyld. 889 00:46:15,708 --> 00:46:19,420 >> PUBLIKUM: Hvorfor er du vender tilbage en funktion [uhørligt] kabinet. 890 00:46:19,420 --> 00:46:24,214 Er ikke dollar nul stjerne stjerne y [uhørligt] 891 00:46:24,214 --> 00:46:29,710 finder, at operatøren med at returnering dobbelt [uhørligt] Dobbelt? 892 00:46:29,710 --> 00:46:32,742 >> DANIEL ARMENDARIZ: Så lad mig besvare dit spørgsmål 893 00:46:32,742 --> 00:46:35,950 hvordan jeg forstår det, og du kan fortælle mig hvis jeg ikke forstår dit spørgsmål. 894 00:46:35,950 --> 00:46:42,850 Så denne konstruktion, den krøllede klammeparentes dollar tegn nul star star y, 895 00:46:42,850 --> 00:46:44,280 er en funktion. 896 00:46:44,280 --> 00:46:50,080 Og det accepterer en parameter, der er repræsenteres af denne dollartegn nul. 897 00:46:50,080 --> 00:46:55,830 Afkastet søgeord antydes i denne meget kort, anonym funktion syntaks. 898 00:46:55,830 --> 00:46:57,870 >> Hvilket betyder, at væsentlige hvad det siger 899 00:46:57,870 --> 00:47:01,270 er, at jeg definerer en function-- og så vil jeg 900 00:47:01,270 --> 00:47:05,320 bare kalde det something-- hvor jeg har en vis værdi y. 901 00:47:05,320 --> 00:47:08,300 Jeg har y, hvilket er dobbelt. 902 00:47:08,300 --> 00:47:10,750 Og jeg vender tilbage en dobbelt. 903 00:47:10,750 --> 00:47:19,010 Og jeg har inden for denne tilbagevenden y-- sorry, Jeg skulle ikke have kaldt denne y-- x. 904 00:47:19,010 --> 00:47:20,240 Oh dear, oh dear, oh kære. 905 00:47:20,240 --> 00:47:27,440 X-- nope-- star star y. 906 00:47:27,440 --> 00:47:29,720 >> Så dette er blot en forenklet version af dette. 907 00:47:29,720 --> 00:47:33,990 Og så grunden til, at jeg har dollar tegn nul er, at ved hjælp af denne kabinet 908 00:47:33,990 --> 00:47:41,050 betyder, at jeg ikke længere har at skrive pow, eller ikke længere gøre 909 00:47:41,050 --> 00:47:45,570 Jeg er nødt til at gøre noget som 3 star star 2. 910 00:47:45,570 --> 00:47:48,530 Jeg kan bare have en enkelt funktion kaldet firkant 911 00:47:48,530 --> 00:47:50,820 der vil altid tage vis værdi som input 912 00:47:50,820 --> 00:47:52,980 og faktisk returnere kvadratet på denne. 913 00:47:52,980 --> 00:47:56,460 >> Så hele formålet med lukningen er bare slags indkapsle den kendsgerning 914 00:47:56,460 --> 00:47:59,920 at jeg altid vil bruge y når Jeg kalder denne funktion som magt 915 00:47:59,920 --> 00:48:01,710 når du tager denne eksponent. 916 00:48:01,710 --> 00:48:04,650 Så vender derefter, en funktion, der accepterer 917 00:48:04,650 --> 00:48:08,460 en dobbelt, som er basen, og returnerer resultatet af denne eksponent 918 00:48:08,460 --> 00:48:10,740 er nøglen her. 919 00:48:10,740 --> 00:48:12,790 Og det er den største forskel. 920 00:48:12,790 --> 00:48:14,430 Der var bare lidt af en blomstre. 921 00:48:14,430 --> 00:48:17,970 >> Dette er ikke anderledes sammenlignet med den kendte eksempler 922 00:48:17,970 --> 00:48:20,530 men det var bare en smule en blomstre, vi kan faktisk 923 00:48:20,530 --> 00:48:24,500 oprette en operatør i Swift og faktisk gøre ting med det, 924 00:48:24,500 --> 00:48:26,396 der er lidt af en cool ting. 925 00:48:26,396 --> 00:48:27,520 Har jeg besvare dit spørgsmål? 926 00:48:27,520 --> 00:48:28,390 Sød. 927 00:48:28,390 --> 00:48:31,350 Alt andet før vi går videre? 928 00:48:31,350 --> 00:48:33,570 OK. 929 00:48:33,570 --> 00:48:36,430 >> Nu er dette slags rejser Spørgsmålet er at-- godt OK, 930 00:48:36,430 --> 00:48:40,870 nu har vi mulighed for funktioner, der skal returneres. 931 00:48:40,870 --> 00:48:48,950 Kan vi også forbi fungerer som data eller som parametre til andre funktioner? 932 00:48:48,950 --> 00:48:50,710 Og faktisk, vi kan. 933 00:48:50,710 --> 00:48:53,480 Så lad os sige, at vi har alle af den samme kode. 934 00:48:53,480 --> 00:48:56,120 Vi har pladsen variabel der vil firkantet denne kode. 935 00:48:56,120 --> 00:48:59,320 Og vi har terningen variabel der vil terning nogle data. 936 00:48:59,320 --> 00:49:02,440 Og vi faktisk ønsker at anvende til en bred vifte af numre. 937 00:49:02,440 --> 00:49:06,870 >> Så det, vi kunne blive fristet til at gøre, selvfølgelig, hvilket bestemt er gyldig, 938 00:49:06,870 --> 00:49:15,430 at gentage over denne liste over numre og anvende mine funktioner firkantet og terning 939 00:49:15,430 --> 00:49:22,270 og få to nye lister som resultater der er denne oprindelige liste kvadreret 940 00:49:22,270 --> 00:49:24,970 og kubik hhv. 941 00:49:24,970 --> 00:49:26,880 Helt acceptabel. 942 00:49:26,880 --> 00:49:29,130 Men hvad er det, der vi ser her, er, at vi har, 943 00:49:29,130 --> 00:49:31,310 igen, dobbeltarbejde vores kode. 944 00:49:31,310 --> 00:49:34,310 Og der er måske en mulighed for os at forenkle denne en lille smule. 945 00:49:34,310 --> 00:49:41,260 Hvad hvis der var en måde for os at faktisk altid gentage over nogle liste 946 00:49:41,260 --> 00:49:45,450 og bare gå til denne magiske fungere en variabel, 947 00:49:45,450 --> 00:49:47,350 repræsenterer en funktion at vi ønsker at anvende 948 00:49:47,350 --> 00:49:50,336 at hver enkelt post på denne liste. 949 00:49:50,336 --> 00:49:53,210 Dette bringer op begrebet hvad kaldes højere ordens funktioner. 950 00:49:53,210 --> 00:49:57,150 Og det er væsentligt, hvad dette er, at vi kan skabe en funktion. 951 00:49:57,150 --> 00:50:00,210 >> Og i dette tilfælde det kaldes en mapper, bare for at give den et navn, bare 952 00:50:00,210 --> 00:50:02,510 kortlægning over hver enkelt punkt på en liste. 953 00:50:02,510 --> 00:50:06,191 Hvor jeg tager en liste og jeg tager en funktion. 954 00:50:06,191 --> 00:50:08,440 Og denne funktion, selvfølgelig, har en vis signatur. 955 00:50:08,440 --> 00:50:11,980 Det accepterer som en parameter dobbelt og det vil output er en dobbelt. 956 00:50:11,980 --> 00:50:14,310 Og hele resultatet af denne funktion går 957 00:50:14,310 --> 00:50:18,921 at være en ny liste, der er af typen double. 958 00:50:18,921 --> 00:50:19,420 OK? 959 00:50:19,420 --> 00:50:22,650 >> Og hvad jeg har tænkt mig at gøre er at anvende denne funktion f 960 00:50:22,650 --> 00:50:24,960 til hvert element i min liste. 961 00:50:24,960 --> 00:50:30,280 Og reply-- og hellere returnere dette nye liste som et resultat, som er virkelig cool. 962 00:50:30,280 --> 00:50:31,820 Nu kan jeg videregive funktioner rundt. 963 00:50:31,820 --> 00:50:35,290 Og denne idé om højere orden funktioner er virkelig vigtigt. 964 00:50:35,290 --> 00:50:39,260 Og dette mapper er egentlig bare den fattige mands implementering 965 00:50:39,260 --> 00:50:43,130 en funktion, der er bygget i Swift kaldet kort. 966 00:50:43,130 --> 00:50:45,690 Og det gør netop dette, måske endda en lille smule bedre. 967 00:50:45,690 --> 00:50:48,260 >> Dette er blot en slags generisk, forenklet version, 968 00:50:48,260 --> 00:50:51,270 tillader os at se koncept, der gælder her. 969 00:50:51,270 --> 00:50:54,630 Se nu på den måde, at jeg kan faktisk anvende min firkant 970 00:50:54,630 --> 00:50:57,850 og min terning funktioner til denne liste af tal. 971 00:50:57,850 --> 00:50:58,780 Jeg køre min mapper. 972 00:50:58,780 --> 00:51:00,280 Jeg giver det min liste over numre. 973 00:51:00,280 --> 00:51:02,155 Jeg giver dem de den funktion, der kommer 974 00:51:02,155 --> 00:51:04,170 skal gælde for hver af disse indeks. 975 00:51:04,170 --> 00:51:07,120 Og det vil være output som et resultat. 976 00:51:07,120 --> 00:51:11,810 Og jeg vil få at se, at jeg har kvadreret og kubik mine tal som resultat. 977 00:51:11,810 --> 00:51:14,660 >> Og selvfølgelig mapper vil tage nogen form for anonym funktion. 978 00:51:14,660 --> 00:51:17,640 Vi kan endda se, at jeg har oprettet en ny anonym funktion, 979 00:51:17,640 --> 00:51:20,220 bare tager nogle parameter og deler det med 2. 980 00:51:20,220 --> 00:51:24,340 Og vi kan se, at jeg har, i virkeligheden, divideret min liste med 2 i stedet. 981 00:51:24,340 --> 00:51:25,250 Cool? 982 00:51:25,250 --> 00:51:27,340 Så vidt, så godt? 983 00:51:27,340 --> 00:51:29,650 Okay, lad os nu vende tilbage til denne idé. 984 00:51:29,650 --> 00:51:36,160 Lad os gennemføre dette tilbage i forbindelse med en Karakterbog. 985 00:51:36,160 --> 00:51:41,860 >> Og hvis jeg gør det, kan vi se, at jeg kan anvende en bred vifte af disse options-- 986 00:51:41,860 --> 00:51:44,330 eller en bred vifte af disse højere ordens funktioner 987 00:51:44,330 --> 00:51:51,450 til rent faktisk at forenkle min evne til at gøre en forskellige ting på lister med tal. 988 00:51:51,450 --> 00:51:53,660 Så for eksempel, hvis jeg tage en liste af tal, 989 00:51:53,660 --> 00:51:57,060 en af ​​de højere ordens funktioner der eksisterer kaldes reducere. 990 00:51:57,060 --> 00:52:00,080 Hvad reducere gør snarere end kort, reduceres vil 991 00:52:00,080 --> 00:52:03,710 tage to elementer i listen, vil tage nogen funktion, 992 00:52:03,710 --> 00:52:07,420 sammenligner de to elementer listen, og det vil så 993 00:52:07,420 --> 00:52:09,610 slags output-- den output af denne funktion 994 00:52:09,610 --> 00:52:13,790 vil være et andet element, som du derefter sammenligne med andre. 995 00:52:13,790 --> 00:52:18,190 >> Så du kan bruge dette til rent faktisk summen af ​​tallene på din liste. 996 00:52:18,190 --> 00:52:20,640 For eksempel, hvis du havde en liste over 1, 2, 3, 4, 5, 997 00:52:20,640 --> 00:52:22,940 du tager de første elementer, 1 og 2. 998 00:52:22,940 --> 00:52:27,270 Du kan finde anvendelse på den en tilføjelse funktion, der tager disse to elementer 999 00:52:27,270 --> 00:52:30,980 og spytter et af de elementer, hvilket ville være værdien 3. 1000 00:52:30,980 --> 00:52:35,684 Så tager vi den værdi 3 med den næste element i listen, opsummere de to, 1001 00:52:35,684 --> 00:52:37,100 og derefter holde gå ned på listen. 1002 00:52:37,100 --> 00:52:40,410 >> Vi reducerer listen til en enkelt værdi. 1003 00:52:40,410 --> 00:52:42,700 Og det bare så sker at plus-symbolet 1004 00:52:42,700 --> 00:52:44,670 er en operatør, ligesom vi lige har set. 1005 00:52:44,670 --> 00:52:47,500 Denne operator er faktisk en funktion, 1006 00:52:47,500 --> 00:52:53,100 har netop denne liste, som vi ønsker, snarere disse egenskaber 1007 00:52:53,100 --> 00:52:54,770 at vi ønsker. 1008 00:52:54,770 --> 00:52:56,760 Så jeg opfordre dig til at tage et kig på dette. 1009 00:52:56,760 --> 00:52:59,290 Jeg vil sortere i træk på fra nogle af denne kode 1010 00:52:59,290 --> 00:53:05,330 således at vi rent faktisk kan se på nogle faktiske, reelle, ægte Swift i Xcode, 1011 00:53:05,330 --> 00:53:06,880 i iOS udvikling. 1012 00:53:06,880 --> 00:53:08,630 Men tag et kig på dette og se om du kan 1013 00:53:08,630 --> 00:53:11,171 parse igennem, hvad der foregår med nogle af disse højere orden 1014 00:53:11,171 --> 00:53:13,790 funktioner, herunder filter, reducere, og du vil endda 1015 00:53:13,790 --> 00:53:17,060 se et eller andet sted herinde kort så godt. 1016 00:53:17,060 --> 00:53:17,910 Det er lige her. 1017 00:53:17,910 --> 00:53:20,410 Hvor det vil tage en sekvens af kvaliteter og det vil faktisk 1018 00:53:20,410 --> 00:53:24,230 kortlægge dem med kontakten konstruktion, som du måske genkender fra C, 1019 00:53:24,230 --> 00:53:27,640 men det er faktisk meget mere kraftfuld end kontakten konstrukt 1020 00:53:27,640 --> 00:53:29,810 at vi har i C. 1021 00:53:29,810 --> 00:53:31,930 >> Og vi vil anvende denne til hvert element i listen 1022 00:53:31,930 --> 00:53:34,540 og rent faktisk giver bogstavet kvalitet af hver 1023 00:53:34,540 --> 00:53:40,780 af disse kvaliteter ved hjælp af alle disse begreber at vi lige har talt om før. 1024 00:53:40,780 --> 00:53:44,760 Lad os nu undvige for blot et minut og snak om structs. 1025 00:53:44,760 --> 00:53:49,680 Og så structs er en Vent i C, som vi var i stand til at definere en ny type af data. 1026 00:53:49,680 --> 00:53:53,590 Structs eksistere inden Swift. 1027 00:53:53,590 --> 00:53:58,980 Og så gøre en masse andre konstruktioner kaldet Gentagelsestyper og klasser, der virkelig 1028 00:53:58,980 --> 00:54:01,175 tage denne idé til en helt andet niveau. 1029 00:54:01,175 --> 00:54:05,300 >> Og dybest set er det bare en måde at definere en ny type af data. 1030 00:54:05,300 --> 00:54:11,010 Så hvis du get-- hvis du kommer tværs klasse eller structs eller Gentagelsestyper, 1031 00:54:11,010 --> 00:54:13,290 ikke får forvirret af det. 1032 00:54:13,290 --> 00:54:16,280 Det er bare den måde at definere nogle nye bestemt type data. 1033 00:54:16,280 --> 00:54:20,230 Og det er virkelig vigtigt, når vi taler om iOS app udvikling 1034 00:54:20,230 --> 00:54:24,630 fordi alt, hvad der findes inden for iOS app 1035 00:54:24,630 --> 00:54:27,460 er i det væsentlige et objekt af en slags. 1036 00:54:27,460 --> 00:54:31,980 Og en genstand er dybest set en klasse eller en enum eller en struct. 1037 00:54:31,980 --> 00:54:34,760 >> Så i dette tilfælde er jeg at definere en ny type data 1038 00:54:34,760 --> 00:54:37,740 at jeg ringer vurdering det er nogle egenskaber, herunder 1039 00:54:37,740 --> 00:54:41,040 et navn og en sekvens af karakterer. 1040 00:54:41,040 --> 00:54:43,470 Så en form for vurdering at jeg måske har i tankerne 1041 00:54:43,470 --> 00:54:44,760 ville være quizzer, f.eks. 1042 00:54:44,760 --> 00:54:48,180 Jeg vil gerne have en vurdering, der var en quiz 1043 00:54:48,180 --> 00:54:51,460 og som havde en række kvaliteter forbundet med, for quiz en, 1044 00:54:51,460 --> 00:54:52,840 quiz to, så videre og så videre. 1045 00:54:52,840 --> 00:54:55,720 >> Eller jeg kunne have en anden type af vurdering af problematiske sæt. 1046 00:54:55,720 --> 00:54:56,650 Og jeg kan gøre ting. 1047 00:54:56,650 --> 00:54:59,860 Jeg kan faktisk have funktioner i denne type 1048 00:54:59,860 --> 00:55:02,645 af data, som nu kaldes metoder. 1049 00:55:02,645 --> 00:55:04,520 Så hvis du nogensinde ser den Ordet metode, det virkelig 1050 00:55:04,520 --> 00:55:08,190 er blot en funktion, der gælder til en meget specifik klasse, 1051 00:55:08,190 --> 00:55:10,100 eller til en meget specifik type data. 1052 00:55:10,100 --> 00:55:12,350 Det giver os mulighed for at ændre data i. 1053 00:55:12,350 --> 00:55:15,510 >> Så med andre ord, hvis jeg ønsker at føje en karakter til min vurdering, 1054 00:55:15,510 --> 00:55:18,630 så alt hvad jeg behøver at gøre er at tilføje den score, der var input 1055 00:55:18,630 --> 00:55:22,660 til denne funktion til min indre egenskab. 1056 00:55:22,660 --> 00:55:25,880 Der er en anden pæn konstruktion her i Swift, som er denne dot dot dot 1057 00:55:25,880 --> 00:55:31,780 operatør, hvilket betyder, at resultater kan nu accepterer et vilkårligt antal heltal. 1058 00:55:31,780 --> 00:55:33,940 Og score vil være en array af heltal, 1059 00:55:33,940 --> 00:55:39,030 er blevet videregivet til min funktion, som betyder, at jeg kan gøre ting som dette. 1060 00:55:39,030 --> 00:55:42,360 >> Jeg kan gøre tilføje karakterer og bare give vilkårlige antal heltal i det 1061 00:55:42,360 --> 00:55:47,420 og faktisk tilvejebringes et array af disse værdier i min funktion 1062 00:55:47,420 --> 00:55:50,270 eller i min metode, som det er tilfældet. 1063 00:55:50,270 --> 00:55:54,040 Nu er det vigtigt, fordi alt i Xcode, alt i iOS, 1064 00:55:54,040 --> 00:55:56,250 er i virkeligheden et objekt. 1065 00:55:56,250 --> 00:55:59,630 Så husk at på når vi buste åbne Xcode 1066 00:55:59,630 --> 00:56:04,890 og springe ud over iOS versioner to og tre 1067 00:56:04,890 --> 00:56:08,820 og faktisk gå til version fire. 1068 00:56:08,820 --> 00:56:11,940 >> Og igen, alt dette vil blive offentliggjort på seminaret siden. 1069 00:56:11,940 --> 00:56:16,980 iOS fire er sortering af en fuldstændig blæst gennemførelse af en meget grundlæggende app. 1070 00:56:16,980 --> 00:56:23,920 Og hvad denne app gør, er det indlæser et UI, der ser sådan ud. 1071 00:56:23,920 --> 00:56:28,680 Igen, hvis vi klikker på storyboard vi kan se, at dette er, hvad det ser ud. 1072 00:56:28,680 --> 00:56:31,320 Det er den UI. 1073 00:56:31,320 --> 00:56:33,676 Det har en titel øverst. 1074 00:56:33,676 --> 00:56:34,800 Jeg har kaldt det web galleri. 1075 00:56:34,800 --> 00:56:38,400 >> I midten er der et element kaldet UI billedvisningen. 1076 00:56:38,400 --> 00:56:41,340 Og i bunden er der en værktøjslinje med en enkelt knap, 1077 00:56:41,340 --> 00:56:46,850 har elastiske rum, der gør det muligt at center i midten af ​​denne værktøjslinje. 1078 00:56:46,850 --> 00:56:51,780 Og hvad der sker, er, at når dette belastninger det henter en JSON-fil, der er 1079 00:56:51,780 --> 00:56:55,540 indeholdt på en server andetsteds, analyserer det JSON fil, 1080 00:56:55,540 --> 00:56:58,130 og JSON fil ligner lidt dette. 1081 00:56:58,130 --> 00:57:02,770 1082 00:57:02,770 --> 00:57:06,230 Den JSON fil ser sådan ud. 1083 00:57:06,230 --> 00:57:08,650 Der er det. 1084 00:57:08,650 --> 00:57:11,730 >> Det har et albumnavn og Det har en bred vifte af billeder. 1085 00:57:11,730 --> 00:57:13,490 Hvert af disse billeder har et navn og også 1086 00:57:13,490 --> 00:57:19,460 en URL selv der repræsenterer jpeg-version af, at de enkelte foto. 1087 00:57:19,460 --> 00:57:24,780 Så hvad sker er, at når dette program belastninger, det henter den JSON fil, 1088 00:57:24,780 --> 00:57:30,590 analyserer det, sætter alt dette i hvad der svarer til et array i iOS 1089 00:57:30,590 --> 00:57:33,020 app udvikling, som er en nsarray. 1090 00:57:33,020 --> 00:57:37,520 Og så kan jeg derefter indlæse disse data i et program 1091 00:57:37,520 --> 00:57:41,100 og indlæse det på min skærm. 1092 00:57:41,100 --> 00:57:44,760 >> Der er et billede, der blev indlæst med knappen i bunden. 1093 00:57:44,760 --> 00:57:49,190 Hvis jeg klikker Få Næste billede, det så trækker det billede fra internettet 1094 00:57:49,190 --> 00:57:53,370 og erstatter det billede i UI billedvisningen. 1095 00:57:53,370 --> 00:57:57,820 Så du kan hente denne og faktisk tage et kig på det på din computer. 1096 00:57:57,820 --> 00:58:00,940 Og bygge det og faktisk kompilere det på din enhed. 1097 00:58:00,940 --> 00:58:04,710 Men det væsentlige processen var dette, skal du oprette storyboard-- 1098 00:58:04,710 --> 00:58:08,080 eller rettere ikke create-- men vælg storyboard. 1099 00:58:08,080 --> 00:58:15,030 Og faktisk we'll--, hvis du ikke mind-- vi vil tage blot et par sekunder 1100 00:58:15,030 --> 00:58:18,390 til rent faktisk at vise dig, hvordan det blev gjort. 1101 00:58:18,390 --> 00:58:22,430 1102 00:58:22,430 --> 00:58:27,820 >> Lige så, hvordan vi rent faktisk kan opnå dette er lavet en lille smule mere 1103 00:58:27,820 --> 00:58:28,360 synlige. 1104 00:58:28,360 --> 00:58:30,651 Enkelt billede ansøgning, er jeg vil kalde dette seminar 1105 00:58:30,651 --> 00:58:35,330 fire repræsenterer denne bestemt nummer. 1106 00:58:35,330 --> 00:58:36,335 Gem det på skrivebordet. 1107 00:58:36,335 --> 00:58:39,890 1108 00:58:39,890 --> 00:58:42,110 OK, vil klikke på storyboardet. 1109 00:58:42,110 --> 00:58:47,030 Og hvad jeg har tænkt mig at gøre er at finde min billedvisning, 1110 00:58:47,030 --> 00:58:50,940 trække den ind på min bruger interface og center det. 1111 00:58:50,940 --> 00:58:54,850 Nu bare centrering det desværre kommer ikke til at gøre en hel masse, 1112 00:58:54,850 --> 00:58:58,680 bortset fra en skærm der er nøjagtig denne størrelse. 1113 00:58:58,680 --> 00:59:03,950 >> Så vi kan overbevise os selv om, at ved klikke på dette dobbelte cirkel ting, 1114 00:59:03,950 --> 00:59:08,290 nedbringe denne pop up menu her og skiftende 1115 00:59:08,290 --> 00:59:11,110 for at få vist, hvor vi vil faktisk får en chance for at få vist, hvordan 1116 00:59:11,110 --> 00:59:13,530 dette vil faktisk se på andre enheder. 1117 00:59:13,530 --> 00:59:16,500 Som vi kan se, har vi ikke engang se det på dette særlige tilfælde. 1118 00:59:16,500 --> 00:59:18,500 Så jeg har tænkt mig at lukke dette for nu. 1119 00:59:18,500 --> 00:59:22,100 >> Og jeg har tænkt mig at vælge dette ikon nede i det 1120 00:59:22,100 --> 00:59:23,910 nederste del af skærmen. 1121 00:59:23,910 --> 00:59:26,584 Den siger Løse Auto layout spørgsmål. 1122 00:59:26,584 --> 00:59:28,000 Beklager, det er afskåret i bunden. 1123 00:59:28,000 --> 00:59:36,360 Men hvis jeg klikker på det, hvad jeg få denne pop up-- gå væk. 1124 00:59:36,360 --> 00:59:39,740 1125 00:59:39,740 --> 00:59:51,220 Hvad jeg får, er denne pop up, der tillader mig at tilføje manglende begrænsninger. 1126 00:59:51,220 --> 00:59:53,780 Og ved at gøre det vil så slags låse den 1127 00:59:53,780 --> 00:59:56,640 i den centrale del af den skærm som jeg kunne forvente. 1128 00:59:56,640 --> 01:00:00,520 >> Nu for at få denne knap på toppen af ​​det, jeg har brug for at gå til Editor. 1129 01:00:00,520 --> 01:00:05,010 Gå til Embed I og klik Navigation Controller. 1130 01:00:05,010 --> 01:00:08,900 Hvad det vil gøre, er, der vil tilføje hele denne anden komponent til det, 1131 01:00:08,900 --> 01:00:11,310 men det vil faktisk forbinde det tilbage til mit oprindelige UI. 1132 01:00:11,310 --> 01:00:14,450 Og detaljerne, igen, gør vi ikke virkelig brug for at bekymre sig om lige nu. 1133 01:00:14,450 --> 01:00:16,710 Men jeg ønsker at have en værktøjslinje i bunden. 1134 01:00:16,710 --> 01:00:18,530 Så jeg vil tjekke Shows Toolbar. 1135 01:00:18,530 --> 01:00:21,870 >> Og det giver i min mening, som nu er et andet sted, 1136 01:00:21,870 --> 01:00:23,900 vi kan se det er forbundet herovre. 1137 01:00:23,900 --> 01:00:28,710 Det giver nu en værktøjslinje på bunden af ​​mit UI. 1138 01:00:28,710 --> 01:00:34,770 Så nu, i stedet for at vælge et billedvisningen, kan jeg finde et mærke, 1139 01:00:34,770 --> 01:00:41,140 eller snarere en toolbar-- lad os se, hvor er det? 1140 01:00:41,140 --> 01:00:41,890 Hvad kaldes det? 1141 01:00:41,890 --> 01:00:49,760 En button-- element bar-- item-- sorry-- bar knap element. 1142 01:00:49,760 --> 01:00:54,590 Plop, at der og anvende et par af fleksible rum på begge sider 1143 01:00:54,590 --> 01:00:57,429 faktisk center,. 1144 01:00:57,429 --> 01:00:58,970 Så nu har jeg lavet min UI, dybest set. 1145 01:00:58,970 --> 01:01:01,428 Og jeg kan give den et navn ved dobbeltklikke på toppen 1146 01:01:01,428 --> 01:01:04,880 her og siger web galleri og så videre. 1147 01:01:04,880 --> 01:01:08,100 Nu igen, disse er elementer der eksisterer i sig selv. 1148 01:01:08,100 --> 01:01:10,400 Og jeg er nødt til at forbinde dem til min kode, som 1149 01:01:10,400 --> 01:01:14,297 Jeg kan gøre ved igen at bringe op denne dobbelte cirkel ikon, 1150 01:01:14,297 --> 01:01:15,380 skifter fra preview. 1151 01:01:15,380 --> 01:01:18,950 Som ved den måde, nu kan vi se, er pænt centreret og vil se godt ud 1152 01:01:18,950 --> 01:01:23,720 på en række forskellige enheder. 1153 01:01:23,720 --> 01:01:27,280 >> Skift til automatisk, hvilket vil hente viewcontroller kode. 1154 01:01:27,280 --> 01:01:29,030 Og nu denne del er vigtig. 1155 01:01:29,030 --> 01:01:34,590 For at du kan forbinde disse to elementer, din kode til UI, 1156 01:01:34,590 --> 01:01:36,680 du vælge det element, du vil tilslutte. 1157 01:01:36,680 --> 01:01:39,570 Så i dette tilfælde, vi faktisk ønsker at indkode 1158 01:01:39,570 --> 01:01:43,520 ændre billedet, der er indeholdt inden for denne UI billedvisningen. 1159 01:01:43,520 --> 01:01:47,070 Så hvis du styrer klik fra billedvisningen og træk, 1160 01:01:47,070 --> 01:01:51,960 du vil opdage, at du får en lille bar, når du giver slip på alt dette pop 1161 01:01:51,960 --> 01:01:53,550 op vil forekomme. 1162 01:01:53,550 --> 01:01:56,470 >> Og det siger, at vi vil oprette en forbindelse. 1163 01:01:56,470 --> 01:01:59,300 Og herfra vil jeg give det et navn, noget som galleri. 1164 01:01:59,300 --> 01:02:00,240 Hit Enter. 1165 01:02:00,240 --> 01:02:03,040 Og det faktisk giver en variabel kaldet galleri 1166 01:02:03,040 --> 01:02:08,600 at jeg så kan referere i min kode at ændre billedet, f.eks. 1167 01:02:08,600 --> 01:02:10,430 Så hvordan gør at koden faktisk ser? 1168 01:02:10,430 --> 01:02:13,030 Nå igen, jeg ønsker ikke at bruge for meget tid på det. 1169 01:02:13,030 --> 01:02:15,430 Og jeg opfordre dig til at downloade den og tage et kig. 1170 01:02:15,430 --> 01:02:18,330 Men en af ​​de mest vigtigt aspekt er koden 1171 01:02:18,330 --> 01:02:20,980 der faktisk henter et billede. 1172 01:02:20,980 --> 01:02:26,470 >> Så i dette tilfælde vil jeg at få inden mine fotos 1173 01:02:26,470 --> 01:02:28,520 array, som er indeholdt inden min klasse. 1174 01:02:28,520 --> 01:02:33,390 Jeg vil definere navn og URL der er blevet parset ud af denne JSON. 1175 01:02:33,390 --> 01:02:39,810 Faktisk bede enheden til at få den URL, at hente webadressen fra dette, 1176 01:02:39,810 --> 01:02:44,060 og derefter hente data fra indholdet af denne URL. 1177 01:02:44,060 --> 01:02:49,430 Derefter konvertere denne data i et billede ved at føre det ind i UI billedet. 1178 01:02:49,430 --> 01:02:52,880 Så igen, disse er alle forskellige typer af objekter, forskellige typer af klasser. 1179 01:02:52,880 --> 01:02:58,410 >> Og så kan jeg da sætte min gallery.image lig med data. 1180 01:02:58,410 --> 01:03:00,750 Og det er slags kød af det, der rent faktisk er så 1181 01:03:00,750 --> 01:03:08,250 i stand til at ændre data from-- forandring billedet fra den ene til den næste. 1182 01:03:08,250 --> 01:03:10,660 Så igen, forhåbentlig nu en masse af konstruktionerne 1183 01:03:10,660 --> 01:03:12,240 vil gøre lidt mere mening. 1184 01:03:12,240 --> 01:03:15,260 Bemærk, at der er nogle udråbstegn her. 1185 01:03:15,260 --> 01:03:19,810 De udråbstegn er væsentlige relateret til optionals. 1186 01:03:19,810 --> 01:03:22,657 >> Hvad jeg dybest set siger, er at uden selv at kontrollere 1187 01:03:22,657 --> 01:03:24,490 at se, om der er data inden for denne valgfri, 1188 01:03:24,490 --> 01:03:27,140 Jeg har tænkt mig at gå videre og antager at der er og pakke det. 1189 01:03:27,140 --> 01:03:31,340 Husk, at vi brugte analogien sortering af en pakke til optionals 1190 01:03:31,340 --> 01:03:34,700 og vi er nødt til at udpakke pakke og trække data ud. 1191 01:03:34,700 --> 01:03:37,570 Udråbstegnet kræfter, der rent faktisk sker. 1192 01:03:37,570 --> 01:03:39,590 >> Men jeg ved, at dette er sikkert, fordi jeg kontrolleres 1193 01:03:39,590 --> 01:03:42,070 at se, om billedet data er lig til nul, har jeg faktisk kontrollere 1194 01:03:42,070 --> 01:03:45,420 at se, om det valgfri var faktisk, mislykkedes. 1195 01:03:45,420 --> 01:03:47,110 Hvis der havde faktisk ikke allerede. 1196 01:03:47,110 --> 01:03:52,450 Og så er jeg sikker på, at når jeg kommer til dette punkt, jeg kan roligt pakke disse data. 1197 01:03:52,450 --> 01:03:55,710 Du kan også se det i i form af et spørgsmålstegn. 1198 01:03:55,710 --> 01:03:59,100 Så hvis vi rulle ned til hvor jeg brug for rent faktisk parse data. 1199 01:03:59,100 --> 01:04:01,850 >> Så du skal ikke blive afskrækket af disse slags lange navne. 1200 01:04:01,850 --> 01:04:06,580 Du kan finde i Apple Udvikler websted meget 1201 01:04:06,580 --> 01:04:09,620 henvisninger til alle de objekter og alle de processer, 1202 01:04:09,620 --> 01:04:11,170 der faktisk gør dette muligt. 1203 01:04:11,170 --> 01:04:15,990 Men se, at det er væsentligt en funktion, hvor jeg passerer det nogle data. 1204 01:04:15,990 --> 01:04:18,410 Og jeg kommer tilbage en slags data. 1205 01:04:18,410 --> 01:04:24,190 Og jeg har brug for at bruge dette som søgeord til konvertere det til denne nsdictionary? 1206 01:04:24,190 --> 01:04:26,490 Hvilket er igen, en valgfri nsdictionary. 1207 01:04:26,490 --> 01:04:31,070 Hvilket jeg så nødt til at kontrollere, om den eksisterer. 1208 01:04:31,070 --> 01:04:37,130 >> Så jeg kan bruge, at hvis lad succesfulde ligemænd parset, 1209 01:04:37,130 --> 01:04:40,620 så jeg ved, at det valgfri faktisk indeholder nogle data. 1210 01:04:40,620 --> 01:04:43,840 Eller hvad jeg gjorde her, var at bare antage, at hvis der 1211 01:04:43,840 --> 01:04:49,067 var ingen fejl, det er faktisk sikker. 1212 01:04:49,067 --> 01:04:51,400 Okay, jeg vil gerne takke jer alle meget for at komme. 1213 01:04:51,400 --> 01:04:53,540 Jeg ved, det var en masse, men det var kun en time 1214 01:04:53,540 --> 01:04:55,920 at tale om nogle temmelig avancerede ting. 1215 01:04:55,920 --> 01:04:59,640 Og så forhåbentlig får du en chance for at hente hele koden 1216 01:04:59,640 --> 01:05:01,657 og tage et bedre, mere grundig kig på det. 1217 01:05:01,657 --> 01:05:04,240 Sort of overbevise dig selv om alle af de ting, der foregår. 1218 01:05:04,240 --> 01:05:06,800 Og jeg vil gerne takke dig alt, igen, for at komme. 1219 01:05:06,800 --> 01:05:08,760 Og held og lykke med din endelige projekter. 1220 01:05:08,760 --> 01:05:10,600 Har du en god dag. 1221 01:05:10,600 --> 01:05:11,467