1 00:00:00,000 --> 00:00:03,332 >> [MUZIKO Ludante] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DAN AMRMENDARIZ: Everyone, bonvenigi al la CS50 seminario, 4 00:00:09,590 --> 00:00:11,690 iOS App Disvolviĝo kun Swift. 5 00:00:11,690 --> 00:00:15,690 Mi estas Dan Armendáriz, kaj mi estas preceptor de komputiko tie en Harvard. 6 00:00:15,690 --> 00:00:21,510 >> Kaj la sekva horo tuj estos ventego turneo de tanta havajxoj 7 00:00:21,510 --> 00:00:25,160 pri tiu temo kiel ni povas persvadi. 8 00:00:25,160 --> 00:00:29,170 Mi afiŝos ĉiujn la fontkodo ke vi vidos hodiaŭ rete. 9 00:00:29,170 --> 00:00:31,990 Ni eble ne povos fakte transiru ĉio 10 00:00:31,990 --> 00:00:34,810 ke mi estas, ke mi estas montrante vin en tiu horo. 11 00:00:34,810 --> 00:00:37,580 Sed almenaŭ espereble tra la komentoj de la fontkodo, 12 00:00:37,580 --> 00:00:40,830 vi povos provi elkompreni ĝuste okazas por tiuj aferoj 13 00:00:40,830 --> 00:00:42,950 ke ni ne tute atingi. 14 00:00:42,950 --> 00:00:46,970 >> Totala, la strukturo de hodiaŭa diskuto estos kiel sekvas. 15 00:00:46,970 --> 00:00:52,820 Ni komencos ekstere faranta kelkajn bazajn sintakso kun la Swift lingvo, 16 00:00:52,820 --> 00:00:56,290 iro en iuj de la pli progresintaj sintakso de la Swift lingvo. 17 00:00:56,290 --> 00:00:59,560 Pro la lingvo estas vere moderna kaj ĝi 18 00:00:59,560 --> 00:01:02,110 havas multajn alta nivelo trajtoj, aĵoj kiujn ni havas ne 19 00:01:02,110 --> 00:01:06,600 vidita en C laŭlonge CS50, aŭ eĉ kelkaj la aliaj lingvoj 20 00:01:06,600 --> 00:01:09,310 ke ni komencis uzante en CS50 kiel PHP, 21 00:01:09,310 --> 00:01:12,670 Do mi estas iranta devi provi enkonduki ankaŭ iuj temoj kiuj 22 00:01:12,670 --> 00:01:18,580 rilatas al pli alta nivelo lingvoj ke vi ne vidos en profundo en CS50, 23 00:01:18,580 --> 00:01:21,380 sed vi vidos en postaj komputiko klasoj. 24 00:01:21,380 --> 00:01:25,290 Do ĝi estas tuj estos pakitaj horo. 25 00:01:25,290 --> 00:01:28,897 Kaj bonvolu permesi min scii se vi havas demandojn. 26 00:01:28,897 --> 00:01:30,730 Do se vi estas interesata farinte disvolviĝo 27 00:01:30,730 --> 00:01:34,442 kun Swift, aŭ vere ajna IOS app disvolviĝo, 28 00:01:34,442 --> 00:01:35,900 ekzistas kelkaj postuloj. 29 00:01:35,900 --> 00:01:39,940 Unue, vi devas esti uzanta Mac, kurante en la ekzemploj 30 00:01:39,940 --> 00:01:43,880 ke ni tuj estos uzante hodiaŭ, relative nova versio de VIN 31 00:01:43,880 --> 00:01:46,580 X. En tiu kazo, Mi kuras X 10.5. 32 00:01:46,580 --> 00:01:48,600 Vi povas kuri 10.11 se vi volas. 33 00:01:48,600 --> 00:01:52,430 Sed cxion vi tuj vidi estas engaĝante Xcode 7 kaj poste, 34 00:01:52,430 --> 00:01:56,271 kiu havas la lastan version de Swift, kiu estas Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Tiu estas fakte bela grava distingo. 36 00:01:58,270 --> 00:02:01,510 Multa la sintakso havas ŝanĝis bela signife 37 00:02:01,510 --> 00:02:05,890 en iuj kazoj de Swift 1.0, kiu estis liberigita lastan jaron, 38 00:02:05,890 --> 00:02:08,514 Swift 2.0, kiu nur elvenis tiu falo. 39 00:02:08,514 --> 00:02:09,889 Do ni tuj montros Swift 2.0. 40 00:02:09,889 --> 00:02:13,020 Multa la aferoj vi serĉi rete 41 00:02:13,020 --> 00:02:18,040 kiam vi provas akiri aldonan informoj pri vario de aferoj, 42 00:02:18,040 --> 00:02:20,710 vi eble volas eksplicite serĉi Swift 2 43 00:02:20,710 --> 00:02:24,950 anstataŭ nura klara malnova Swift fari certe ke vi akiras la sintakso korekta. 44 00:02:24,950 --> 00:02:26,920 >> Fakte, ĉi tiu estas ĝenerale vera. 45 00:02:26,920 --> 00:02:31,210 Ekzistas rapida kvanto de evoluo okazanta en la Swift lingvo 46 00:02:31,210 --> 00:02:35,110 ekde Apple liberigis ĝin, mi pensas kion, jam pasis iom pli ol jaro 47 00:02:35,110 --> 00:02:36,370 nun. 48 00:02:36,370 --> 00:02:39,080 Kaj aĵoj ŝanĝis drame en tiu tempo. 49 00:02:39,080 --> 00:02:42,160 Kaj do ne estos frustrita se, kiam vi serĉas ĉirkaŭe 50 00:02:42,160 --> 00:02:48,310 por temoj sur Swift aŭ kiel plenumi io uzante iuj ekzemplo kodo 51 00:02:48,310 --> 00:02:51,210 aŭ ion ke ĝi ne reale labori sur Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Certiĝu vi serĉas specife por tiu versio 53 00:02:53,790 --> 00:02:58,690 provi minimumigi efikojn de malsamaj versioj kaj tiuj specoj de aferoj. 54 00:02:58,690 --> 00:03:02,470 >> Mi provos atentigi nur iuj aferoj ke estas malsamaj al la malnovaj versioj. 55 00:03:02,470 --> 00:03:03,970 Sed estas io rigardi ekstere por. 56 00:03:03,970 --> 00:03:06,770 Ke estas probable tuj estos unu el la plej grandaj kapdoloroj 57 00:03:06,770 --> 00:03:11,010 ke vi havos kun Swift estas trovanta Ekzemple kodo kiu estas pli malnova, eĉ ĵus 58 00:03:11,010 --> 00:03:14,050 de kelkaj monatoj, klopodante uzi ĝin en viaj pli moderna projekto. 59 00:03:14,050 --> 00:03:15,430 Kaj ĝi tutsimple ne funkcias. 60 00:03:15,430 --> 00:03:18,530 Vi fariĝas kompililo eraroj, sintakso eraroj, ĉiaj frenezaj aĵoj. 61 00:03:18,530 --> 00:03:21,580 Do simple estu pacienca kun ke, kaj vi espereble 62 00:03:21,580 --> 00:03:24,200 havi sufiĉe bela sperto kun Swift entute. 63 00:03:24,200 --> 00:03:28,430 >> Nun vi povas reale join-- kaj mi esperas ni fakte ankoraŭ havas ĉi tiun year-- 64 00:03:28,430 --> 00:03:30,910 CS 50 Apple app disvolviĝo teamo, kiu 65 00:03:30,910 --> 00:03:34,680 permesos instali ajna apps kiun vi kreas en via iOS aparatoj. 66 00:03:34,680 --> 00:03:39,190 Do rigardu ĉi URL se vi interesas fari tion. 67 00:03:39,190 --> 00:03:41,450 >> Do nur kelkaj aferojn pri Swift mem. 68 00:03:41,450 --> 00:03:43,580 Estas kompilita lingvo. 69 00:03:43,580 --> 00:03:45,870 Sed vi vidos ke iu de la trajtoj kiujn ni uzas 70 00:03:45,870 --> 00:03:50,650 permesas uzi ankaŭ en iom kiel interpretita vojo ankaŭ. 71 00:03:50,650 --> 00:03:56,350 >> Multa la sintakso estas pruntita de C. Ĝi estas bazita kaj skribita en C. 72 00:03:56,350 --> 00:04:00,400 Kaj do ni vidos ke ekzistas multe de takeaways 73 00:04:00,400 --> 00:04:04,450 de via ekzistanta scio de C ke ni povas haveno Swift. 74 00:04:04,450 --> 00:04:07,290 >> Sed estas aĵoj kiuj fari ĝin tre malsama de C. 75 00:04:07,290 --> 00:04:08,860 Ĝi estas tre forte tajpita. 76 00:04:08,860 --> 00:04:10,380 Ekzistas aŭtomatan prizorgadon de memoro. 77 00:04:10,380 --> 00:04:13,170 Vi ne tuj devas uzi malloc aŭ libera ie. 78 00:04:13,170 --> 00:04:15,110 Ĝi estas desegnita por ĝeneraleco. 79 00:04:15,110 --> 00:04:19,480 Do alivorte, vi povas uzi ĝin en ĉiaj kuntekstoj, de Apple Watch 80 00:04:19,480 --> 00:04:26,290 por iPhone tuta vojo supren al OS X, kaj eĉ kelkaj serviloj, eĉ iuj scripting. 81 00:04:26,290 --> 00:04:28,400 Sed ni vidos, ke la subteno por scripting 82 00:04:28,400 --> 00:04:31,360 ne estas tre tie ankoraŭ kiel ĝi estas en aliaj lingvoj. 83 00:04:31,360 --> 00:04:34,930 Do plej verŝajna vi estos uzanta ĉi ekskluzive por disvolviĝo 84 00:04:34,930 --> 00:04:37,060 sur via Mac aŭ via iPhone. 85 00:04:37,060 --> 00:04:40,150 >> Kaj ĝi havas multajn modernajn trajtojn. 86 00:04:40,150 --> 00:04:43,380 Kaj multe da tiuj aferoj estas aĵoj ke ni tuj provos alparoli hodiaŭ, 87 00:04:43,380 --> 00:04:47,590 sed ankaŭ niaj topikoj kiuj sincere, ni povas dediĉi tutan kursoj. 88 00:04:47,590 --> 00:04:50,140 Fakte, CS 51, kio estas proponis sekva semestro, 89 00:04:50,140 --> 00:04:53,990 centras tre sur ĉi tiuj temoj kiu estas priskribitaj sube. 90 00:04:53,990 --> 00:04:56,781 Do vi povas elspezi tutan semestro kompreni tion. 91 00:04:56,781 --> 00:04:58,530 Sed ni tuj provos akiri tra ili 92 00:04:58,530 --> 00:05:00,800 almenaŭ sufiĉe ke vi povas kompreni kio estas 93 00:05:00,800 --> 00:05:03,700 daŭriganta kiam vi rigardas ĉe Swift programo 94 00:05:03,700 --> 00:05:07,310 kaj povos pirati vian vojon tra ĝi por la fina projekto. 95 00:05:07,310 --> 00:05:10,780 >> Nun unu el la plej bonaj manieroj kiuj vi povas ricevi aldonan informon sur ĉi 96 00:05:10,780 --> 00:05:14,700 estas sincere ĵus tra Apple provizis dokumentadon por Swift. 97 00:05:14,700 --> 00:05:16,930 Ekzistas multe de APIs ke estas haveblaj. 98 00:05:16,930 --> 00:05:21,170 Kaj tiu estas bona hejmbazo por vi serĉi, specifaj aferoj, ke vi 99 00:05:21,170 --> 00:05:23,020 volas fari kun API engaĝante iOS. 100 00:05:23,020 --> 00:05:26,350 Se vi volas uzi la ĉambron por Ekzemple, vi povas komenci rigardante tien, 101 00:05:26,350 --> 00:05:32,540 kaj ankaŭ uzi Google kaj Stack Overflow kiel vi farus normale. 102 00:05:32,540 --> 00:05:36,670 >> Demandojn sur tiu antaŭ ni salti bone? 103 00:05:36,670 --> 00:05:37,880 Bone. 104 00:05:37,880 --> 00:05:38,700 Ni movi sur. 105 00:05:38,700 --> 00:05:42,620 >> Do unue, mi havas numeron de ekzemplo dosieroj. 106 00:05:42,620 --> 00:05:46,040 Kaj mi tuj provi paŝi tra ili relative rapide. 107 00:05:46,040 --> 00:05:49,190 Jen la Hello World dosiero por Swift. 108 00:05:49,190 --> 00:05:51,050 Ĝi estas tre simpla. 109 00:05:51,050 --> 00:05:54,360 Tie estas vojo pli komentoj ol ekzistas fakta kodo. 110 00:05:54,360 --> 00:05:57,100 Rimarku la reala kodo estas ĉe la tre fundo sur linio 14. 111 00:05:57,100 --> 00:05:57,980 Ĝi diras presaĵo. 112 00:05:57,980 --> 00:05:59,820 Kaj tiam ĝi estas funkcio alvokon. 113 00:05:59,820 --> 00:06:03,010 Ni pasante en ĝin ŝnuro nomita Saluton CS50. 114 00:06:03,010 --> 00:06:04,750 Rimarku ke estas neniu punktokomojn. 115 00:06:04,750 --> 00:06:07,010 Rimarku ke ne estas int main. 116 00:06:07,010 --> 00:06:10,392 Ekzistas neniu el la cruft ke ni havis kun C. 117 00:06:10,392 --> 00:06:15,020 Kiam ni uzas Swift tiamaniere, kiu estas ĝuste skribita en teksta dosiero 118 00:06:15,020 --> 00:06:18,340 kaj stokita sur mia komputilo, tiam Mi povas kompili ĝin kaj ruli ĝin. 119 00:06:18,340 --> 00:06:20,920 >> Rimarku, ke ĉi tie mi estas ne uzante la CS50 IDE. 120 00:06:20,920 --> 00:06:24,460 Tiu supozas ke mi estas kurante kaj ke mi estas sur OS X, 121 00:06:24,460 --> 00:06:27,870 kaj ke mi Xcode jam instalita sur tiu maŝino en ordo por tiu 122 00:06:27,870 --> 00:06:29,080 efektive funkcio. 123 00:06:29,080 --> 00:06:33,349 Sed tio estas nur normala teksto dosiero ke ni povas tiam kompili kaj redakti. 124 00:06:33,349 --> 00:06:34,890 Do ni vidu kiel ĉi efektive funkcias. 125 00:06:34,890 --> 00:06:37,430 Kio se mi volas kompili ĝin? 126 00:06:37,430 --> 00:06:40,450 swiftc 1.swift. 127 00:06:40,450 --> 00:06:42,960 Post unu du momentoj, ĝi vidos, ke ni havas nun 128 00:06:42,960 --> 00:06:45,360 kompilis ĉi en dosieron nomitan 1. 129 00:06:45,360 --> 00:06:51,090 Kaj nun ni presita nia CS50, niaj Saluton Mondo apliko prefere. 130 00:06:51,090 --> 00:06:54,690 >> Rimarku unu alia aĵo kiel bone estas ke defaŭlte, 131 00:06:54,690 --> 00:07:00,090 ni ne devis enigo a / n presi novan linion. 132 00:07:00,090 --> 00:07:05,315 Defaŭlte, la presita funkcio en Swift presos nova linio por vi. 133 00:07:05,315 --> 00:07:09,284 Vi povas pasi laŭvola aldonan parametro sciigi ne fari tion. 134 00:07:09,284 --> 00:07:10,950 Sed Google por pli informo sur tio. 135 00:07:10,950 --> 00:07:13,450 Defaŭlte, ĝi faros la presaĵo linio. 136 00:07:13,450 --> 00:07:16,420 >> Bone, do ni pluiru tiam al iuj aliaj aferoj. 137 00:07:16,420 --> 00:07:18,620 Do kiel ni povas fakte difini variablojn? 138 00:07:18,620 --> 00:07:21,960 Ni povas fari ke estas uzanta unu el du metodoj. 139 00:07:21,960 --> 00:07:26,122 Kaj kiu mi volas rakonti al vi pri unua estas ĉi let difino. 140 00:07:26,122 --> 00:07:27,830 Kaj tio estas grava ĉar efike 141 00:07:27,830 --> 00:07:30,240 kion ni faras estas difinanta konstanta. 142 00:07:30,240 --> 00:07:34,010 Ni iras al krei variablon, aŭ prefere konstanta nomita nomo, 143 00:07:34,010 --> 00:07:38,200 havigi al ĝi iun data-- en Tiam la ŝnuro Dan. 144 00:07:38,200 --> 00:07:40,630 Sed uzante tiun let ŝlosilvorto, ni diras 145 00:07:40,630 --> 00:07:43,860 ke ĉi variable-- aŭ denove constant-- vokis 146 00:07:43,860 --> 00:07:46,220 nomo neniam tuj estos ŝanĝitaj. 147 00:07:46,220 --> 00:07:50,120 Ĝi okazas esti neŝanĝeblaj ĉie la daŭro de tiu ĉi programo 148 00:07:50,120 --> 00:07:53,100 aŭ tra la daŭro de la kunteksto 149 00:07:53,100 --> 00:07:55,390 ke tiu variablo estas havebla. 150 00:07:55,390 --> 00:08:00,096 >> Tiu estas vere grava ke kiam vi havas iujn datumojn kiuj ne 151 00:08:00,096 --> 00:08:02,970 tuj ŝanĝos en via programo, kaj vi vidos diversajn ekzemplojn 152 00:08:02,970 --> 00:08:06,790 pri kiam ni volas uzi lasu kontre la alia sintakso, 153 00:08:06,790 --> 00:08:11,040 ĝi estas grava ke vi uzas lasu laŭeble ĉar tiu novaĵo 154 00:08:11,040 --> 00:08:13,740 la lingvo kiu ĝi estas Ne tuj estos ŝanĝita, 155 00:08:13,740 --> 00:08:16,590 kaj ĝi efektive povas elfari multajn optimizations 156 00:08:16,590 --> 00:08:19,560 plibonigi la rapidon kaj la sekureco de via programo. 157 00:08:19,560 --> 00:08:24,480 Kaj apud sekureco, mi diras tion, ne lasu ĝi kraŝo kun freneza eraroj 158 00:08:24,480 --> 00:08:27,910 ke ni estu kutimis vidi en C. 159 00:08:27,910 --> 00:08:32,460 >> Tiam ni povas uzi kordoj interpolo encapsular ĉi ene ŝnuro. 160 00:08:32,460 --> 00:08:35,200 Do ni povas vidi en ĉi print line, presi saluton, 161 00:08:35,200 --> 00:08:38,950 kaj tiam uzanta backslash malfermita parens, kaj tiam la nomo de mia variablo, 162 00:08:38,950 --> 00:08:41,809 tiukaze konstanto, fermi la parentezoj. 163 00:08:41,809 --> 00:08:46,400 Mi esence tiam metante la enhavo de ĉi tiu variablo nomita nomon 164 00:08:46,400 --> 00:08:50,240 ene de la kordo kaj tiam presi la rezulton tie. 165 00:08:50,240 --> 00:08:54,070 >> Ekzistas unu alia ŝanĝo al la dosiero kiu estas kiu havas, ĉe la plejsupro, 166 00:08:54,070 --> 00:08:57,340 metis en shebang linion, kiu resume nur precizigas 167 00:08:57,340 --> 00:09:00,180 ke mi volas uzi la Swift interpretisto, kiu 168 00:09:00,180 --> 00:09:04,190 signifas ke mi ne plu devas kompili ĉi aparta programo. 169 00:09:04,190 --> 00:09:06,567 Mi povas nur kuri ĝin kiel lia propra skripto. 170 00:09:06,567 --> 00:09:09,400 Sed tio estas, en tiu kazo, malantaŭ la scenoj estanta kompilita kaj tiam 171 00:09:09,400 --> 00:09:10,030 esti kuro. 172 00:09:10,030 --> 00:09:13,540 Estas nur nevidebla al ni. 173 00:09:13,540 --> 00:09:15,880 >> Bone, do ni pluiru. 174 00:09:15,880 --> 00:09:19,650 Do tie estas iom de trompo ke nur okazita antaŭe. 175 00:09:19,650 --> 00:09:23,230 Mi montris al vi, ke mi povus difini konstanta. 176 00:09:23,230 --> 00:09:25,490 Kaj mi povus havigi iujn datumojn por fari ĝin. 177 00:09:25,490 --> 00:09:29,240 Sed en ĉi tiu kazo, rimarki ke mi ne fakte specifi la tipon de datumoj 178 00:09:29,240 --> 00:09:29,820 ke estas. 179 00:09:29,820 --> 00:09:32,780 Kaj tio estas ĉar la tradukilo, Swift povas 180 00:09:32,780 --> 00:09:36,910 konkludi la tipon de datumoj bazita nur sur la datumoj kiujn mi metas en ĝin. 181 00:09:36,910 --> 00:09:41,760 Ĉar ĝi scias ke per pritaksanta ĉi ŝanĝiĝema dekstra tie, ĉi tiu datumo dekstra 182 00:09:41,760 --> 00:09:43,370 tie, ĝi scias ke ĝi estas ĉeno. 183 00:09:43,370 --> 00:09:48,690 Do tiu konstanta nomo estas do tuj estos ĉeno ankaŭ. 184 00:09:48,690 --> 00:09:52,730 >> Sed ni povas ankaŭ esti eksplicita pri la tipo kiu estas 185 00:09:52,730 --> 00:09:55,790 ni tuj uzos por konstantoj aŭ variabloj 186 00:09:55,790 --> 00:10:01,590 uzante tiun sintakson instead-- lasu nomon dupunkto String egalas 187 00:10:01,590 --> 00:10:05,530 Dan, kiu en ĉi kazo signifas ni estas tuj difini konstanta nomata nomo. 188 00:10:05,530 --> 00:10:07,150 Ĝi okazas al esti de tipo String. 189 00:10:07,150 --> 00:10:10,550 Kaj la valoro tuj estos Dan. 190 00:10:10,550 --> 00:10:12,550 Nun la alia vojo ni povas krei variables-- 191 00:10:12,550 --> 00:10:15,549 kaj tio estas ŝanĝebla variabloj, kiuj signifas, ke ni estas, fakte, irante 192 00:10:15,549 --> 00:10:19,670 ŝanĝi iliajn enhavojn iam en la daŭro de la kunteksto 193 00:10:19,670 --> 00:10:23,890 ke tiu variablo estas defined-- ni uzi la var ŝlosilvorto anstataŭ lasu. 194 00:10:23,890 --> 00:10:27,400 Sed denove, implicite, krom se vi scias ke vi bezonas manipuli tiun datumon, 195 00:10:27,400 --> 00:10:30,510 provu uzi lasu por agado plibonigoj. 196 00:10:30,510 --> 00:10:33,740 >> En tiu kazo, mi povas tiam specifi la tipon de datumoj 197 00:10:33,740 --> 00:10:37,650 ke ni atendas esti interne de tiu nova variablo nomata etikedo. 198 00:10:37,650 --> 00:10:38,800 Ĝi tuj estos ĉeno. 199 00:10:38,800 --> 00:10:43,030 Kaj ni tuj poste concatenate du kordoj kune, la kordo saluton, 200 00:10:43,030 --> 00:10:48,070 kaj la kordoj reprezentita de la variablo, aŭ prefere la konstanta nomo. 201 00:10:48,070 --> 00:10:50,660 >> Do tiu estas bela ĉar ĉi Estas iom PHP same kiel en kiuj ni 202 00:10:50,660 --> 00:10:52,250 havas tre facila ĉenon kunmeto. 203 00:10:52,250 --> 00:10:56,350 Ni ne devas aŭtomate uzi ajnan specon de memoro mastrumado 204 00:10:56,350 --> 00:11:00,580 pliigi la grandecon kaj fari omnaspeca amuzajn aferojn tie. 205 00:11:00,580 --> 00:11:05,040 Tio funkcias kiel ni estus reale atendi. 206 00:11:05,040 --> 00:11:09,370 >> Bone, demandojn en ĉi? 207 00:11:09,370 --> 00:11:12,520 >> Nun la alia kialo ke ni bezonas vi havas la kapablon 208 00:11:12,520 --> 00:11:15,490 povi difini kio tipo de datumoj variabloj estas 209 00:11:15,490 --> 00:11:18,170 Estas ĉar kelkfoje ne volas pravalorizi variabloj 210 00:11:18,170 --> 00:11:21,080 kun kelkaj datumoj ĉe la punkto de difino. 211 00:11:21,080 --> 00:11:23,500 Do en ĉi tiu kazo, ni diru ke mi volas komenci inputting 212 00:11:23,500 --> 00:11:25,040 kelkaj gradoj enen lernojaro libron. 213 00:11:25,040 --> 00:11:27,530 Nu mi scias, ke unu el la variabloj, ke mi volas esti 214 00:11:27,530 --> 00:11:30,280 tuj esti mutables lernojaro. 215 00:11:30,280 --> 00:11:33,010 Kaj ni ankaŭ scias ke ni volas esti entjero. 216 00:11:33,010 --> 00:11:36,030 Sed eble ni ankoraux ne havas tiun gradon havebla. 217 00:11:36,030 --> 00:11:39,570 >> En Swift, vi devas difini la tipon de datumoj 218 00:11:39,570 --> 00:11:44,000 kiu estas asociita kun variablo aŭ lasu konstanta 219 00:11:44,000 --> 00:11:47,840 Antaŭ vi povas reale uzi tiun variablon. 220 00:11:47,840 --> 00:11:51,170 Ĉar ĝi estas forte tajpitaj, vi devas asocii tipo 221 00:11:51,170 --> 00:11:52,890 kun ĉi tiuj variabloj. 222 00:11:52,890 --> 00:11:56,120 >> Do en tiu kazo, se mi ne konvene pravalorizitaj la unua kun iu valoro, 223 00:11:56,120 --> 00:12:00,520 tiam mi devas diri al Swift kio Mi atendas la datumtipo esti. 224 00:12:00,520 --> 00:12:02,650 Kaj ĝi tuj restos tiu sama datumtipo 225 00:12:02,650 --> 00:12:05,780 laŭlonge de la historio de tiu programo. 226 00:12:05,780 --> 00:12:10,050 >> Nun vi povus esti tentata kiam Mi kreis ĉi lernojaro ŝanĝiĝema 227 00:12:10,050 --> 00:12:13,530 kaj provizis ĝin entjero 100, nun se mi 228 00:12:13,530 --> 00:12:18,540 volas provi concatenate ŝnureto kun tiu entjero, 229 00:12:18,540 --> 00:12:21,610 eble estus tentita ankoraŭ uzi ke kordoj kunmeto operatoro 230 00:12:21,610 --> 00:12:24,500 kiel ni faris nur kelkaj linioj antauxe. 231 00:12:24,500 --> 00:12:26,460 Sed bedaŭrinde, ĉi efektive ne 232 00:12:26,460 --> 00:12:29,270 labori, ĉar vi estas esence elfarante 233 00:12:29,270 --> 00:12:32,380 operacio sur du malsamaj tipoj. 234 00:12:32,380 --> 00:12:36,856 >> Nun tio estas tre malsama de aliaj lingvoj kiel PHP kiu vere 235 00:12:36,856 --> 00:12:38,480 loosey Goosey kun ilia speco de tipoj. 236 00:12:38,480 --> 00:12:40,030 Ili estas nur ŝatas, jes, ajn, mi ne zorgas. 237 00:12:40,030 --> 00:12:42,710 Nur donu al mi unu tipo, kaj eble mi faros la ĝustan aferon. 238 00:12:42,710 --> 00:12:46,060 >> En tiu kazo, Swift estas ekstreme strikta pri la tipoj 239 00:12:46,060 --> 00:12:47,350 ke vi estas kontraktanta kun. 240 00:12:47,350 --> 00:12:50,700 Ĉi sumado operatoro aŭ kunmeto operatoro 241 00:12:50,700 --> 00:12:54,400 havas esence kelkaj malsamaj eblaj ebloj. 242 00:12:54,400 --> 00:12:56,970 Vi povas fari sumado kun entjeroj, aŭ vi 243 00:12:56,970 --> 00:13:00,870 povas fari ĉenon kunmeto, kaj eble iuj aliaj aĵoj ankaŭ. 244 00:13:00,870 --> 00:13:05,550 Sed se tiu operatoro ne rekonas kio estas ambaŭflanke de ĝi, 245 00:13:05,550 --> 00:13:10,452 aŭ prefere la kombino de tiuj du tipoj, estas ne kio ĝi estas atendanta, 246 00:13:10,452 --> 00:13:11,910 tiam tuj kaŭzi misfunkciadon. 247 00:13:11,910 --> 00:13:16,690 >> Do en ĉi tiu kazo, kion ĝi signifas havi ĉenon plus entjero? 248 00:13:16,690 --> 00:13:18,880 Nu en la kunteksto de tiu, ni probable volas 249 00:13:18,880 --> 00:13:21,990 fari ĉenon kunmeto operacio. 250 00:13:21,990 --> 00:13:26,420 Sed kompreneble la komputilo ne havas tian kuntekston. 251 00:13:26,420 --> 00:13:29,950 Kaj tial ni devas provizi ke aldonan informon 252 00:13:29,950 --> 00:13:32,390 lasi ŝin scii kio estas ke ni volas fari. 253 00:13:32,390 --> 00:13:36,860 >> Do alivorte, la fakto ke Swift estas forte tajpitaj 254 00:13:36,860 --> 00:13:39,520 signifas vi devas fari Iomete de plia laboro 255 00:13:39,520 --> 00:13:42,100 por akiri ĝin funkcii la maniero ke vi dezirus. 256 00:13:42,100 --> 00:13:43,710 Sed kiel rezulto, ĝi estas pli sekura. 257 00:13:43,710 --> 00:13:46,290 Kaj unufoje vi havas prenu konsideri tiujn tipojn, 258 00:13:46,290 --> 00:13:49,300 aferoj nur sincere komenci labori sufiĉe bone. 259 00:13:49,300 --> 00:13:52,520 >> Do en ĉi tiu kazo, ni tiam farus elfari ĉenon kunmeto 260 00:13:52,520 --> 00:13:56,040 per eksplicite ĵetantajn la entjeraj al ŝnuro 261 00:13:56,040 --> 00:13:58,490 envolviendo en ĉi ĉefurbo S String funkcio, 262 00:13:58,490 --> 00:14:03,510 kaj tiam uzante la ĉenon kunmeto operatoro modifi nian etikedo ŝanĝiĝema, 263 00:14:03,510 --> 00:14:06,280 kaj tiam presi ĝin. 264 00:14:06,280 --> 00:14:08,420 >> Ĝis nun, tiel bona? 265 00:14:08,420 --> 00:14:12,020 Bone, ni pluiru. 266 00:14:12,020 --> 00:14:16,300 >> Nun estas vario de datumoj tipoj kiujn ni povas uzi en Swift. 267 00:14:16,300 --> 00:14:21,620 Kiel vi kutimiĝis al, ni povas krei mutables tabelo. 268 00:14:21,620 --> 00:14:26,140 Kaj tiu tabelo povas nur enhavas ununuran tipon. 269 00:14:26,140 --> 00:14:30,360 >> Do en ĉi tiu kazo, ni tuj kreos a mutables arrays de entjeroj, kio 270 00:14:30,360 --> 00:14:34,800 ni nomos gradoj, kaj ni povos stoki ke en tiu kvadrata krampo 271 00:14:34,800 --> 00:14:38,650 formato kiel vi kreskis alkutimiĝis al en vario de aliaj lingvoj. 272 00:14:38,650 --> 00:14:41,150 Sed rimarki ke tie ni estas difini kelkajn aferojn. 273 00:14:41,150 --> 00:14:45,350 gradoj estas mutables variable-- ni ne uzas la Let ŝlosilvorto. 274 00:14:45,350 --> 00:14:49,620 Do tio signifas ke ni povas tiam redakti la enhavo de ĉi tiu tabelo. 275 00:14:49,620 --> 00:14:53,420 Ĝi estas de tipo array Mez, kaj ni povas diri ke 276 00:14:53,420 --> 00:14:56,260 bazitaj sur tiuj rektaj krampoj tie. 277 00:14:56,260 --> 00:14:58,930 >> Nun unu el la agrablaj aferoj pri tio estas ke ni 278 00:14:58,930 --> 00:15:02,310 havas aliron al multaj aldona informo 279 00:15:02,310 --> 00:15:07,110 pri la tabelo nur uzante kelkaj simplaj skalara skribmaniero. 280 00:15:07,110 --> 00:15:10,500 Do ekzemple, grades.count nin havigas 281 00:15:10,500 --> 00:15:14,820 la nombro de eroj kiuj ekzistas en tiu tabelo, kiun ni tiam povas aliri bela 282 00:15:14,820 --> 00:15:19,090 facile simple uzante ke skalara skribmaniero. 283 00:15:19,090 --> 00:15:21,830 >> Se vi volas aldoni pliajn erojn al tiu tabelo, 284 00:15:21,830 --> 00:15:27,220 vi ne povas plenumi la PHP stilo kie vi simple eksplicite difini, 285 00:15:27,220 --> 00:15:30,910 je donita indekso, iu valoro ke vi volas enmeti. 286 00:15:30,910 --> 00:15:37,210 Anstataŭe, uzu la append metodon en la tabelo tipo 287 00:15:37,210 --> 00:15:40,920 al append ke eron, 95, al tiu listo. 288 00:15:40,920 --> 00:15:45,990 >> Do nun tiu tabelo havas la jenan contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 Kaj nun ni almuntita 95 por ke tiel. 290 00:15:49,270 --> 00:15:51,830 >> Estas aliaj manieroj ni povas append aferojn. 291 00:15:51,830 --> 00:15:55,030 Vi povas fakte uzi a sumado operatoro, 292 00:15:55,030 --> 00:15:59,200 kiu estos interpretita kiel tabelo append operacio. 293 00:15:59,200 --> 00:16:04,680 Kaj vi tiam povas append alian tabelo, kies enhavo estas 70 kaj 80, 294 00:16:04,680 --> 00:16:05,560 al tiu tabelo. 295 00:16:05,560 --> 00:16:08,250 Do nun ni havas la enhavoj en tiu variablo 296 00:16:08,250 --> 00:16:17,220 grades-- 100, 0, 90, 85, 95, 70, kaj 80. 297 00:16:17,220 --> 00:16:21,850 Tiu estas nur belan sintaksa sukero kiu Swift disponigas al ni. 298 00:16:21,850 --> 00:16:23,850 >> Do se ni volas elprenu la kvalifikojn, ni eble 299 00:16:23,850 --> 00:16:27,340 tuj volas persisti super ĉiu ero en ĉi buklo. 300 00:16:27,340 --> 00:16:32,150 Kaj ni havas, en Swift, la nocio de a por buklo kiel atendite. 301 00:16:32,150 --> 00:16:35,350 Sed la vojo kiun ni indikos gamo estas iomete malsamaj. 302 00:16:35,350 --> 00:16:37,790 Do en ĉi tiu kazo, al Resume ĉio, ni 303 00:16:37,790 --> 00:16:40,650 tuj krei portempan variablo nomata sumo por ke ni 304 00:16:40,650 --> 00:16:42,580 subteni tiun grafo. 305 00:16:42,580 --> 00:16:44,430 >> Kaj rimarki nia por buklo konstruo tie. 306 00:16:44,430 --> 00:16:46,820 Por indekso en 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Do tiu konstruo, 0 .. 00:17:01,860 dirante ke ni intencas krei gamon de entjeroj de 0 ĝis 310 00:17:01,860 --> 00:17:05,750 al sed ekskludante grades.count. 311 00:17:05,750 --> 00:17:09,577 Do tiu estos 0, 1, 2, 3, 4, 5, supren ĝis tamen multaj unu 312 00:17:09,577 --> 00:17:10,410 antaŭ grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Do tiu estas malsama ol kiom ni estus tipe uzita por bukloj 314 00:17:14,160 --> 00:17:18,569 kie vi havus iujn indekso variablo, starigis ĝin egala al 0 ĉe unua, 315 00:17:18,569 --> 00:17:25,480 kaj tiam integri ke ĝis kelkaj valoro malpli ol la grafo de eroj 316 00:17:25,480 --> 00:17:27,140 en tiu tabelo. 317 00:17:27,140 --> 00:17:29,820 >> Do tie estas modifo al tiu, fakte, 318 00:17:29,820 --> 00:17:35,010 kiu nin permesas tre facile difini malsamajn tipojn de gamoj. 319 00:17:35,010 --> 00:17:40,570 Se vi ŝanĝas ĉi gamo al tri punktoj, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 tio reprezentas la limigo 0 al grades.count inkluziva, 321 00:17:45,120 --> 00:17:49,260 signifante ke tiu nombro estas ankaŭ tiam inkluditaj en tiu gamo. 322 00:17:49,260 --> 00:17:52,110 >> Sed tiu estas tre oportuna por tiuj ĝusta aferojn, 323 00:17:52,110 --> 00:17:54,590 kiam ni devas elfari ripetoj super loop 324 00:17:54,590 --> 00:17:59,630 ĉar tiuj indeksoj estas nulo indeksita, kiel ni vidis en aliaj lingvoj 325 00:17:59,630 --> 00:18:02,360 ankaŭ. 326 00:18:02,360 --> 00:18:05,210 Demandojn sur tiu por buklo? 327 00:18:05,210 --> 00:18:10,660 >> Do ekzistas implica difino de tiu indekso ŝanĝiĝema, 328 00:18:10,660 --> 00:18:14,350 kies valoro komencas je 0, kaj Daŭre ĉe ĉiu iteracio iteration 329 00:18:14,350 --> 00:18:17,950 pliigi per 1 ĝis punkto kiu estas egala al grades.count, 330 00:18:17,950 --> 00:18:20,380 ĉe kiu punkto, la buklo abortas. 331 00:18:20,380 --> 00:18:23,730 >> Rimarku ke en nia kordoj interpolado tie, 332 00:18:23,730 --> 00:18:26,910 ni povas fakte plenumi kelkajn simplajn manipuladoj al tiuj valoroj. 333 00:18:26,910 --> 00:18:31,230 Do indekso plus 1 efektive elfari sumado de tiu valoro 334 00:18:31,230 --> 00:18:34,780 ĉar indekso estas, tiu kazo, entjero. 335 00:18:34,780 --> 00:18:37,810 Kaj je tiu punkto, ĝi volo tiam esti konvertita en kordo 336 00:18:37,810 --> 00:18:42,230 kaj interpolita en tiun ĉenon tie, kaj presita ekster kiel ni atendus. . 337 00:18:42,230 --> 00:18:44,520 >> Kaj la bela afero pri la sensilo tie estas 338 00:18:44,520 --> 00:18:50,730 ke ni ankaŭ povas havi kolektadon valoroj kaj fiksanta valoroj 339 00:18:50,730 --> 00:18:54,080 uzanta la kvadrata krampo skribmaniero kiel ni vidis en aliaj lingvoj ankaŭ. 340 00:18:54,080 --> 00:18:57,130 341 00:18:57,130 --> 00:19:01,030 >> Bone, do de tie, ni nun komputi nia sumon de ĉiuj niaj gradoj. 342 00:19:01,030 --> 00:19:02,780 Nun ia la sekva logika paŝo estus 343 00:19:02,780 --> 00:19:07,580 fari apartigon operacio por trovi el la mezumo de tiuj karakteroj. 344 00:19:07,580 --> 00:19:10,150 Sed io grava tie okazas kiu 345 00:19:10,150 --> 00:19:15,020 estas ke tiu sumo estas eble entjero. 346 00:19:15,020 --> 00:19:18,020 Sed ni bezonas fari kelkajn ia duobla divido. 347 00:19:18,020 --> 00:19:20,600 Kaj tiu tuj estos ekstreme grava kiam 348 00:19:20,600 --> 00:19:24,140 ni volas realigi ĉi tiun operacion, ĉar kion ni diras 349 00:19:24,140 --> 00:19:28,430 estas ke ni devas reale elfari divido en du duoblojn. 350 00:19:28,430 --> 00:19:31,370 Kaj denove, ĉar Swift estas tre forte tajpita, 351 00:19:31,370 --> 00:19:36,760 ni devas eksplicite metis ĉiujn erojn por duobloj antaŭ ni efektive 352 00:19:36,760 --> 00:19:38,300 elfaro operacio. 353 00:19:38,300 --> 00:19:40,550 >> Do, por ke ni elfari duoblan divido, 354 00:19:40,550 --> 00:19:43,730 ĝi ne estas sufiĉa por nur unu de tiuj eroj por esti duobla. 355 00:19:43,730 --> 00:19:46,400 Ambaux devas esti duobla en ordo por rapidkuraj 356 00:19:46,400 --> 00:19:50,860 esti certa, ke tio kion ni volas fari. 357 00:19:50,860 --> 00:19:54,360 Do ni tiam eksplicite typecast la sumo kiun ni komputita supre 358 00:19:54,360 --> 00:19:58,970 kaj la grafo de gradoj al duobloj, kaj tiam elfaro operacio kaj vendejo 359 00:19:58,970 --> 00:20:02,390 ke en tiu nova variablo, aŭ prefere tiu nova konstanta nomita averaĝa, 360 00:20:02,390 --> 00:20:06,810 kiu havos kio tipo, vi imagi? 361 00:20:06,810 --> 00:20:07,587 Duobla, yeah. 362 00:20:07,587 --> 00:20:09,420 Do en ĉi tiu kazo, ni ne devas doni gin 363 00:20:09,420 --> 00:20:13,450 ĉar ĝi povas esti konkludita el la operacio kio tipo de datumoj mezumo 364 00:20:13,450 --> 00:20:14,730 estos. 365 00:20:14,730 --> 00:20:19,025 Kaj Swift estas ĝenerale sufiĉe bona pri povi konkludi la tipoj. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Ĉu vi volas vidi ĉi kuri, aŭ mi povas pluiri? 368 00:20:24,200 --> 00:20:25,640 Mi volas plu iri. 369 00:20:25,640 --> 00:20:28,130 Demandojn pri ajna el tio? 370 00:20:28,130 --> 00:20:28,630 Granda. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Nun ni iras por komenci atingi la bona stuff-- difinanta funkcioj, 373 00:20:35,010 --> 00:20:39,090 kaj paro de aliaj tipoj kiuj estas unika Swift ke vi havas ne 374 00:20:39,090 --> 00:20:41,620 vidis en aliaj lingvoj supren ĝis tiu punkto, 375 00:20:41,620 --> 00:20:46,290 sed ili ekzistas en aliaj lingvoj kiujn vi povus trovi pli poste. 376 00:20:46,290 --> 00:20:48,210 Do unue, se vi volas difini funkcio, 377 00:20:48,210 --> 00:20:52,170 vi difinas ĝin per la funky vorto funkcio, kaj tiam la funkcio nomo, 378 00:20:52,170 --> 00:20:56,710 kaj tiam en krampoj, la argumentoj ke vi volas tiun funkcion akcepti. 379 00:20:56,710 --> 00:21:00,280 La argumentoj devas ankaŭ specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 devas ankaŭ specifi la tipon de datumoj kiuj ili estas, se ili povas esti konkludita. 381 00:21:05,010 --> 00:21:07,500 Kaj ni vidos ke iom averto en nur iomete. 382 00:21:07,500 --> 00:21:09,920 >> Do en ĉi tiu kazo ni havas funkcio nomita printGradeCount. 383 00:21:09,920 --> 00:21:12,840 Ni tuj akcepti variable-- aŭ prefere tiukaze 384 00:21:12,840 --> 00:21:14,450 a constant-- nomita gradebook. 385 00:21:14,450 --> 00:21:18,517 Kaj ĝi tuj estos de tajpu tabelo de entjeroj. 386 00:21:18,517 --> 00:21:20,600 Nun estas io tio estas vere grava tie 387 00:21:20,600 --> 00:21:21,849 ke mi volas ke vi komprenu. 388 00:21:21,849 --> 00:21:27,560 Aŭ estu kiu defaŭlte, tiuj argumentoj ke estas enigaĵoj al tiu funkcio estas 389 00:21:27,560 --> 00:21:34,380 difinita kun implicita liberigite ŝlosilvorto, kio signifas ke mi ne povas modifi ĉi 390 00:21:34,380 --> 00:21:39,850 gradebook variablo tie. 391 00:21:39,850 --> 00:21:43,360 Kaj tiu speco de Indas, ĉar vi pasanta datumojn. 392 00:21:43,360 --> 00:21:45,860 Kaj vi eble ne volas ĝin esti ŝanĝata de sub vi. 393 00:21:45,860 --> 00:21:50,800 Eblas eksplicite mencias ke tiu estas variablo metante 394 00:21:50,800 --> 00:21:52,070 la var ŝlosilvorto ĉi tie. 395 00:21:52,070 --> 00:21:56,832 Sed tio estas Gotcha ke ni rimarkis homoj faris en la pasinteco 396 00:21:56,832 --> 00:21:59,790 estas ke ili supozis ke ĝi tuj esti variablo kiam, fakte, ĝi 397 00:21:59,790 --> 00:22:02,640 estas konstanta. 398 00:22:02,640 --> 00:22:07,340 >> Bone, do jen do, en tiu kazo, ni ne specifante ia reveno tipo. 399 00:22:07,340 --> 00:22:09,460 Ni montros vin kiel fari ke en nur momento. 400 00:22:09,460 --> 00:22:12,340 Sed rimarki ke tie ni havas nur simpla se kondiĉo. 401 00:22:12,340 --> 00:22:14,560 Se la gradebook estas malplenaj, kiu tiukaze 402 00:22:14,560 --> 00:22:19,310 estas nur la propraĵo de tiu entjero tabelo, tiam ni presi ion. 403 00:22:19,310 --> 00:22:23,100 Alie ni faru ion alian. 404 00:22:23,100 --> 00:22:25,000 >> Bela simpla ĝis nun mi pensas. 405 00:22:25,000 --> 00:22:27,960 Sed halti min se vi havas demandojn. 406 00:22:27,960 --> 00:22:33,350 >> Nun tiun funkcion, averaĝe, ankaŭ prenas iuj argumentoj, aŭ prefere unu argumento, 407 00:22:33,350 --> 00:22:37,507 kiu estas la gradebook, kaj ĉifoje tuj revenos duobla tipo. 408 00:22:37,507 --> 00:22:39,340 Ĉar ĝi estas komputanta la mezumo kaj ĝi estas 409 00:22:39,340 --> 00:22:45,010 tuj reale reveni ke kalkulitaj mezumo por kunvokado linio. 410 00:22:45,010 --> 00:22:50,070 >> En tiu kazo, ni specifi la reveni tipo post sago. 411 00:22:50,070 --> 00:22:53,260 Kaj tiu povus senti ia stranga, unue. 412 00:22:53,260 --> 00:22:55,610 Vi kreskis alkutimiĝis al difino de la reveno 413 00:22:55,610 --> 00:22:57,720 tajpi antaŭ la nomo de la funkcio. 414 00:22:57,720 --> 00:23:00,310 Sed se vi pensas pri tiu en terminoj de matematiko, 415 00:23:00,310 --> 00:23:03,320 kiel kiam vi havas matematiko ke difini funkcion, 416 00:23:03,320 --> 00:23:06,807 vi havas funkcion kun iuj enigoj, kaj ĝi produktas eligo. 417 00:23:06,807 --> 00:23:08,890 Kaj tio estas ĝuste kion ĉi laŭsupoze imitas. 418 00:23:08,890 --> 00:23:12,460 Kaj estas kelkaj aliaj lingvoj kiuj havas similan sintakson tiel, 419 00:23:12,460 --> 00:23:15,674 sed probable neniu vi vidis en CS50. 420 00:23:15,674 --> 00:23:17,090 Sed ankoraŭ ne konfuzus ĝin. 421 00:23:17,090 --> 00:23:21,650 La sago signifas kion tuj esti revenis en tiu kazo. 422 00:23:21,650 --> 00:23:23,650 Bone, do kiel ni komputi ĉi mezumo? 423 00:23:23,650 --> 00:23:25,649 Nu, se la gradebook malplenas, bone tiam ni estas 424 00:23:25,649 --> 00:23:30,731 tuj revenos 0, kiu eble racia maniero trakti tion. 425 00:23:30,731 --> 00:23:32,980 Mi ne scias, ni venas revenigu en iomete. 426 00:23:32,980 --> 00:23:34,688 Tio povas ne reale estu racia maniero 427 00:23:34,688 --> 00:23:38,310 komputi mezumo se ni havas malplenan gradebook. 428 00:23:38,310 --> 00:23:41,260 >> Tiam ni simple elfari niajn sumado. 429 00:23:41,260 --> 00:23:43,900 Rimarku, ke ĉi tie ni efektive havas alternan version de 430 00:23:43,900 --> 00:23:49,190 por buklo, kio permesas al ni persisti super ĉiu sola ero en tabelo 431 00:23:49,190 --> 00:23:53,630 kaj meti ĉiu elemento en ĝian propran variablo. 432 00:23:53,630 --> 00:23:56,200 Specifante por grado en gradebook, kion ni diras 433 00:23:56,200 --> 00:24:00,560 estas ke ni tuj implice krei novan konstanta nomata 434 00:24:00,560 --> 00:24:05,180 grado kiu tuj reprezentos ĉiun solan eron en la gradebook 435 00:24:05,180 --> 00:24:06,769 ĉiufoje ke la por buklo ripetas. 436 00:24:06,769 --> 00:24:08,560 Do la unua fojo ke ĝi kuras, lernojaro volo 437 00:24:08,560 --> 00:24:09,800 esti la unua ero en la gradebook. 438 00:24:09,800 --> 00:24:12,300 La dua tempo ĝi estos la dua listero, tiel plu kaj tiel plu 439 00:24:12,300 --> 00:24:15,970 ĝis gradebook havas elĉerpita mem de elementoj. 440 00:24:15,970 --> 00:24:20,390 Tiam ni povos resumi ke grado en nian sumado ŝanĝiĝema 441 00:24:20,390 --> 00:24:22,570 kaj redoni nian duonan kiel ni vidis antaŭe. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, demandojn? 444 00:24:26,950 --> 00:24:27,699 Jes? 445 00:24:27,699 --> 00:24:28,990 Publiko: Mi havas du demandojn. 446 00:24:28,990 --> 00:24:33,586 Numero unu, hipoteze, povas vi kuros entjero sur ĉi tiu? 447 00:24:33,586 --> 00:24:35,604 Ne devas esti duobla, estas ke korekta? 448 00:24:35,604 --> 00:24:37,520 DAN AMRMENDARIZ: Ĉu vi povas ripetas tiun demandon? 449 00:24:37,520 --> 00:24:39,587 Publiko: Povas min fari entjero kiel averaĝa? 450 00:24:39,587 --> 00:24:41,670 DAN AMRMENDARIZ: Ĉu vi povas fari entjero kiel mezumon? 451 00:24:41,670 --> 00:24:45,015 Do reveni entjero mezumo anstataŭ duobla? 452 00:24:45,015 --> 00:24:48,204 >> Publiko: Return-- vi havas tiun rajton nun sube. 453 00:24:48,204 --> 00:24:49,870 DAN AMRMENDARIZ: Dekstra tie, reveni 0.0? 454 00:24:49,870 --> 00:24:51,790 Publiko: Yeah, simple reveni 0. 455 00:24:51,790 --> 00:24:56,590 Do estos ĉu 80 aŭ 85, sed ne 85,2. 456 00:24:56,590 --> 00:24:59,465 >> DAN AMRMENDARIZ: Do en tiu kazo, do tie estas kelkaj malsamaj manieroj 457 00:24:59,465 --> 00:25:00,090 respondi tion. 458 00:25:00,090 --> 00:25:02,760 Lasu min respondi ilin en ordo. 459 00:25:02,760 --> 00:25:06,740 Do se mi nur klarigu reveno 0, 0 estas entjero valoro. 460 00:25:06,740 --> 00:25:09,730 Kaj tial kaŭzos tipo eraro por tiu kazo 461 00:25:09,730 --> 00:25:13,210 ĉar ĝi atendas duobla sed tiam reveni entjero. 462 00:25:13,210 --> 00:25:16,770 Se mi volas reveni entjero, mi povas. 463 00:25:16,770 --> 00:25:20,450 Mi povas agordi la reveno tipo al int, revenu 0 tie, 464 00:25:20,450 --> 00:25:22,047 kaj ne plenumos duobla divido. 465 00:25:22,047 --> 00:25:23,880 Sed tiam ni estus faras entjera divido. 466 00:25:23,880 --> 00:25:27,080 Kaj do ni tiam ne akirus la mezumo ke ni eble atendus. 467 00:25:27,080 --> 00:25:29,210 Sed jes ni povas modifi la tipojn en tiu maniero. 468 00:25:29,210 --> 00:25:32,598 >> Publiko: Kaj due, vi havas la duoblan sur la supro. 469 00:25:32,598 --> 00:25:35,502 Sed malsupre, kiam vi fari reveni Double Double, 470 00:25:35,502 --> 00:25:38,280 jen jam aŭtomate reveninte Duobla formato. 471 00:25:38,280 --> 00:25:42,278 Kial vi ankoraŭ bezonas difini ĝin kun sago sur supro kun Duobla? 472 00:25:42,278 --> 00:25:45,010 >> DAN AMRMENDARIZ: Do en kazo, ĉi tiu estas parto 473 00:25:45,010 --> 00:25:50,580 de the-- tiel ripeti la demandon, ĉar ĝi estas implicita de la reveno 474 00:25:50,580 --> 00:25:56,030 tipoj tie, kio tipo ĉi reale estas, ni devas esti eksplicita kun Swift 475 00:25:56,030 --> 00:25:59,970 pri kio ni volas reveni el tiu funkcio 476 00:25:59,970 --> 00:26:02,690 tiel ke kiam elfaras tajpas kontrolanta, ĝi povas certigi 477 00:26:02,690 --> 00:26:05,850 ke kion ni reale skribita malsupre fakte konformas al tio. 478 00:26:05,850 --> 00:26:10,225 Do ĝi estas speco de kiel ĉeko kun vi mem tia situacio. 479 00:26:10,225 --> 00:26:11,050 Sed are-- 480 00:26:11,050 --> 00:26:12,560 >> Spektantaro: [inaudible] arrow? 481 00:26:12,560 --> 00:26:19,490 >> DAN AMRMENDARIZ: Estas kazoj kiam ni povas specifi ke ni povas implice 482 00:26:19,490 --> 00:26:21,550 starigis la reveno tipo. 483 00:26:21,550 --> 00:26:23,940 Sed en ĉi tiu kazo, mi ja ne pensas ke ĝi funkcius. 484 00:26:23,940 --> 00:26:26,190 Ekzistas iuj aliaj sintakso ke ni vidos poste. 485 00:26:26,190 --> 00:26:30,320 486 00:26:30,320 --> 00:26:35,280 >> Bone, do ĉi fonto poŝtkodo estas iomete malsama 487 00:26:35,280 --> 00:26:41,839 ĉar ĉi parses argumentoj de la funkcio kiu ni vokas. 488 00:26:41,839 --> 00:26:44,130 Lasu min montri vin kiel ĝi funkcias antaŭ ni efektive movi sur 489 00:26:44,130 --> 00:26:48,050 al iuj interesaj aferoj ke okazas en Swift. 490 00:26:48,050 --> 00:26:51,870 >> Do en tiu kazo, se mi nur kuri ĉi kodon, rimarki ke kio faras 491 00:26:51,870 --> 00:26:54,900 is-- dum, ĝi ia donas al mi strangan eraron. 492 00:26:54,900 --> 00:26:59,730 Mi bezonas por pasi ĝin kelkajn entjeroj kiel komandlinia argumento. 493 00:26:59,730 --> 00:27:06,220 Do ni vidu, 150 kaj 80, kaj batis Enter por eltrovi kio ĝi estas fakte faras. 494 00:27:06,220 --> 00:27:09,890 Ĝi estas akcepti ĉiu el tiuj valoroj kiel entjeroj. 495 00:27:09,890 --> 00:27:12,040 Oni inputting ilin en gradebook. 496 00:27:12,040 --> 00:27:14,470 Kaj tiam ĝi estas elfaranta ke mezumo kalkulo 497 00:27:14,470 --> 00:27:16,650 kaj elirigi ke kiel ni atendus. 498 00:27:16,650 --> 00:27:19,950 >> Sed evidente ekzistas io iranta sur kun ĉi malakcepti ion 499 00:27:19,950 --> 00:27:23,300 io kiel entjero. 500 00:27:23,300 --> 00:27:27,300 Kiel vi eble memoras de kiam ni estis kontraktanta kun komandlinio argumentoj 501 00:27:27,300 --> 00:27:32,640 en C kaj aliaj lingvoj, la plej unua 0-a artikolo en tiu komandlinio argumento 502 00:27:32,640 --> 00:27:35,774 lerta estas la nomo de la komando ke ni efektive ekzekutitaj. 503 00:27:35,774 --> 00:27:38,690 Do en ĉi tiu kazo, mi simple looping super ĉiuj komandlinio argumentoj. 504 00:27:38,690 --> 00:27:41,650 Sed mi ne faras ajnan specon de imago kontroli salti super tiu unua. 505 00:27:41,650 --> 00:27:45,920 Mi estas nur eksplicite aŭ mi estas implice kontrolanta kiu el tiuj tipoj 506 00:27:45,920 --> 00:27:49,900 estas entjeroj antaux mi reale elfari ĉi kalkulado. 507 00:27:49,900 --> 00:27:52,420 >> Kaj tio estas esence kio okazas ĉi tie. 508 00:27:52,420 --> 00:27:55,860 Por ĉiu argumento en la procezo de argumentoj, 509 00:27:55,860 --> 00:27:59,210 Mi tuj plenumi iun ĉeko. 510 00:27:59,210 --> 00:28:01,970 Kaj en ĉi tiu kazo, mi tuj provi unua konvertito 511 00:28:01,970 --> 00:28:07,620 tiu argumento en entjero per plenumante eksplicitan typecast, 512 00:28:07,620 --> 00:28:12,310 ĉar ĝi estas, sur enigo, ŝnuro kaj ne fakte entjero. 513 00:28:12,310 --> 00:28:18,140 >> Sed ĉi tiu estas speco de stranga sintakso, se lasu grado egalas Mez (argumento). 514 00:28:18,140 --> 00:28:21,120 Kio vere okazas tie estas ekstreme 515 00:28:21,120 --> 00:28:24,390 Gravas via uzanta Swift. 516 00:28:24,390 --> 00:28:27,610 Tiu estas uzanta kio estas nomita laŭvola tipo. 517 00:28:27,610 --> 00:28:34,790 >> Do tiu funkcio, Int (argumento), revenas ne nur entjero, sed revenas 518 00:28:34,790 --> 00:28:37,470 kio nomiĝas laŭvola entjero. 519 00:28:37,470 --> 00:28:41,200 Kaj tiel tio estas ia tipo aldone tipo. 520 00:28:41,200 --> 00:28:45,900 Vi povas ordigi de imagi ŝin kiel ĝi estas revenante kiel pako. 521 00:28:45,900 --> 00:28:47,750 Kaj kiam vi malfermos ke pako, ĝi ĉu 522 00:28:47,750 --> 00:28:53,930 havas entjero, kiu estas la rezulto, aŭ ĝi havas absolute nenio en ĝi. 523 00:28:53,930 --> 00:28:58,140 Kaj tio estas utila kiel eraro kontrolanta mekanismo, ĉar tiukaze 524 00:28:58,140 --> 00:29:02,080 Ni povas eltrovi, estis tiu tipo konvertiĝo sukcesa? 525 00:29:02,080 --> 00:29:05,810 Se ĝi estis, tiam ĝi estas fakte havos entjero ene. 526 00:29:05,810 --> 00:29:08,750 Alie ĝi tuj havos iuj valoro kiun ni vokos Nil, kiu 527 00:29:08,750 --> 00:29:10,920 Estas reprezentanto de neniu entjero ajn. 528 00:29:10,920 --> 00:29:13,270 Estas vere reprezentanto de nenio. 529 00:29:13,270 --> 00:29:18,130 >> Kaj tiel ĉi se konstruo permesas al ni unwrap ke pako, 530 00:29:18,130 --> 00:29:19,850 ke nedeviga ligadon. 531 00:29:19,850 --> 00:29:25,560 Kaj se ni kapablas unwrap ke paki kaj trovi entjero ene, 532 00:29:25,560 --> 00:29:27,720 tiam kion ni diras tie estas ke ni estos tiam 533 00:29:27,720 --> 00:29:33,090 permesi ke valoro enkadrigeblaj en tiu konstanta nomita grado. 534 00:29:33,090 --> 00:29:36,590 Kaj tiu parto de la se aserto, la supro porcion de la se aserto 535 00:29:36,590 --> 00:29:40,390 kuros, ĉar tio unwrap sukcesis. 536 00:29:40,390 --> 00:29:43,290 >> Se ĝi nur do okazas ke tie estis eraro eble 537 00:29:43,290 --> 00:29:47,040 en tiu eksplicita tipo konvertiĝo de ŝnuro al entjero, eble 538 00:29:47,040 --> 00:29:49,160 ĝi estas la valoro ABC ekzemple. 539 00:29:49,160 --> 00:29:52,120 Kaj tio estas fakte ne tuj konverti al entjero. 540 00:29:52,120 --> 00:29:55,520 Tiam ĝi revenos nil, Kiu ne estas entjero. 541 00:29:55,520 --> 00:29:57,570 Kaj ĉi se aserto bone tiam malsukcesas. 542 00:29:57,570 --> 00:30:01,930 lernojaro ne ekzistas ĉar ĝi ne havas entjeran enhavo. 543 00:30:01,930 --> 00:30:06,391 Kaj ĝi ruliĝos ĉi alia bloko anstataŭe. 544 00:30:06,391 --> 00:30:06,890 Jes? 545 00:30:06,890 --> 00:30:09,652 >> Publiko: nil estas N-mi-L? 546 00:30:09,652 --> 00:30:11,110 DAN AMRMENDARIZ: nil estas N-mi-L, jes. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Do tiu estas eble unu el la malfacilaj aferoj pri Swift, 549 00:30:20,310 --> 00:30:23,690 Precipe kiam vi estas en Junko sur iOS app 550 00:30:23,690 --> 00:30:27,442 kaj vi vere provas fari iun disvolviĝon tie. 551 00:30:27,442 --> 00:30:29,400 Ĝi tuj estos kriante ĉe vi pri laŭvola. 552 00:30:29,400 --> 00:30:33,050 Ĝi estas iranta esti demandanta vin por demandosignojn kaj ekkrion punktoj. 553 00:30:33,050 --> 00:30:37,100 Sed unufoje vi povas diveni fjordon se vi dediĉi iom da tempo por elŝeligi 554 00:30:37,100 --> 00:30:41,990 kio okazas kun laŭvola tipoj, vi ŝparos vin multan kapdoloro 555 00:30:41,990 --> 00:30:46,040 kiel vi provas skribi app en Swift. 556 00:30:46,040 --> 00:30:47,660 >> Ĝi estas fakte tre potenca trajto. 557 00:30:47,660 --> 00:30:49,826 Kaj vi nur devas prenu mian vorton por ĝi nun. 558 00:30:49,826 --> 00:30:52,620 Sed ni vidos ĉi konstruo kaj iuj aliaj ŝatas 559 00:30:52,620 --> 00:30:56,740 en kelkaj el la aliaj fontkodon ke ni montros al vi en nur iomete. 560 00:30:56,740 --> 00:31:00,440 >> Ĉu estas komenca demandojn tie? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Do la grava takeaway estas ke laŭvola tipo estas speco de metatype. 563 00:31:08,690 --> 00:31:12,500 Ĝi ĉu havas valoron, kaj se jes, tiam ĝi 564 00:31:12,500 --> 00:31:18,110 eble havas tiun valoron asociita kun ĝi, aŭ ĝi havas nenian valoron whatsoever, 565 00:31:18,110 --> 00:31:19,620 kaj estas reprezentita fare nil. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 La resto de tio estas eble kiel atendite. 568 00:31:28,870 --> 00:31:32,900 >> Do ni deklivirejo supre la malfacilaĵo plue. 569 00:31:32,900 --> 00:31:37,070 Kaj ĉi tiu fojo, ni rigardu iuj aliaj datumtipoj ke reale ekzistas. 570 00:31:37,070 --> 00:31:41,290 Unu el ili estas vortaroj, kiuj estas tre simila al Python vortaroj. 571 00:31:41,290 --> 00:31:48,270 Ĝi estas iom simila al hash tablo en C. Ĝi estas esence mapado de ŝlosiloj 572 00:31:48,270 --> 00:31:49,820 kie klavoj povas esti kordoj. 573 00:31:49,820 --> 00:31:52,670 Kaj kiam vi rigardas tiujn klavojn, tiuj klavoj havas valoron. 574 00:31:52,670 --> 00:31:56,020 Do ĝi ne estas sufiĉe tabelo, sed anstataŭe, pli proksime asociigita 575 00:31:56,020 --> 00:31:58,810 por hash mapo aŭ hash tablo. 576 00:31:58,810 --> 00:32:02,420 >> Ni vidu kiel tiu supozas labori antaŭ ni efektive 577 00:32:02,420 --> 00:32:05,210 iru en la fontkodon mem. 578 00:32:05,210 --> 00:32:07,680 Se mi nur kuras ĉi, nenio vere okazas. 579 00:32:07,680 --> 00:32:12,430 Oni diras al mi, ke mi atendas iuj parametroj de la sekva tipo. 580 00:32:12,430 --> 00:32:16,050 Do mi tuj havigos al ĝi iun problemon aro nomoj, 581 00:32:16,050 --> 00:32:18,490 tiel pset0, eble mi atingis 100. 582 00:32:18,490 --> 00:32:20,790 Kaj pset1, mi ricevis 5. 583 00:32:20,790 --> 00:32:24,630 Kaj poste sur la ekzameno, mi faris vere bone kaj ricevis 30. 584 00:32:24,630 --> 00:32:27,180 Kaj oops, mi batis spacon tie. 585 00:32:27,180 --> 00:32:30,940 >> Kiam mi batis Enter, vi povas vidi ĝi realigas iun kalkulado. 586 00:32:30,940 --> 00:32:33,740 Ĝi diras gradebook estas tri kvalifikojn, pset1, pset0, ekzameno. 587 00:32:33,740 --> 00:32:36,120 Kaj la gradebook havas tiu specifa mezumo. 588 00:32:36,120 --> 00:32:38,370 Do denove, ni laboras kun ĉi gradebook ideo, 589 00:32:38,370 --> 00:32:44,650 sed ni tuj daŭrigi ripetanta kun la komplekseco de nia funkcio. 590 00:32:44,650 --> 00:32:47,650 >> Do je la komenco, ni estas nur tuj krei funkcion kiu 591 00:32:47,650 --> 00:32:49,390 respondecas por presi la uzado. 592 00:32:49,390 --> 00:32:51,920 Kaj tie ĉi eliro funkcio kiu ĵus 593 00:32:51,920 --> 00:32:53,710 perforte forlasi la apliko. 594 00:32:53,710 --> 00:32:56,530 Tiu ne estas iu kiu vi uzos en iOS app. 595 00:32:56,530 --> 00:32:59,750 Tiu estas nur, en tiu kazo, kun komandlinio argumento. 596 00:32:59,750 --> 00:33:01,990 Next ni komencos movi al Xcode. 597 00:33:01,990 --> 00:33:07,760 Sed tio estas specifaj por iu komando linio stilo programo en Swift. 598 00:33:07,760 --> 00:33:11,490 >> Ni rigardu kelkajn el la interesaj aferoj tie. 599 00:33:11,490 --> 00:33:15,150 Ni vidu, nur kelkaj interesajxoj mencii eble 600 00:33:15,150 --> 00:33:19,930 estas ke en mia funkcio de presi la nombro de gradoj, 601 00:33:19,930 --> 00:33:26,090 eble vi memoras ke mi havis tiun liston de items-- pset1, pset0 kaj ekzameno. 602 00:33:26,090 --> 00:33:29,130 Vi povas fakte rapide kaj facile fari tion 603 00:33:29,130 --> 00:33:34,490 prenante la gradebook, kiu estas vortaro kiu havas klavoj kaj valoroj. 604 00:33:34,490 --> 00:33:38,730 Trovu ĉiujn la ŝlosilo estas tra la skalara klavoj metodo tie, 605 00:33:38,730 --> 00:33:43,180 kaj uzu tiun joinWithSeparator, kiu tiam prenas ĉiujn la ŝlosilojn 606 00:33:43,180 --> 00:33:48,590 ke ni tajpis in, pset1-- aŭ bedaŭras, pset0, pset1 kaj exam-- 607 00:33:48,590 --> 00:33:53,030 kaj concatenate ilin kune uzante komo kaj spaco 608 00:33:53,030 --> 00:33:55,400 krei longa ŝnuro. 609 00:33:55,400 --> 00:34:00,190 Ĉi aliĝi operacio estas nur fenomene utilaj en diversaj kontekstoj. 610 00:34:00,190 --> 00:34:03,450 Kaj tiel estas ĉi joinWithSeparator. 611 00:34:03,450 --> 00:34:06,939 >> Kaj tiu estas unu afero kiu estas ŝanĝiĝis de Swift 1 Swift 2. 612 00:34:06,939 --> 00:34:08,730 Tie uzita esti Python style-- se vi estas 613 00:34:08,730 --> 00:34:13,219 konanta Python-- Python stilo aliĝi metodo sur kordoj. 614 00:34:13,219 --> 00:34:15,699 Sed tio ne plu estas la kazo en Swift 2. 615 00:34:15,699 --> 00:34:19,400 Vi volas uzi tion se vi volas al concatenate tabelo da taskoj 616 00:34:19,400 --> 00:34:23,380 kune kun kordo. 617 00:34:23,380 --> 00:34:27,889 >> Do eble tiam en nia diskuto de mezumo antaŭ, 618 00:34:27,889 --> 00:34:32,659 ĝi faras iom pli da senco por ni starigis la averaĝa funkcio 619 00:34:32,659 --> 00:34:36,610 esti laŭvola duobla prefere ol nura eksplicita duoblo. 620 00:34:36,610 --> 00:34:39,239 Ĉar ni havis tiun nekutima kondiĉo kie, 621 00:34:39,239 --> 00:34:41,550 kio se gradebook reale havas neniun valoroj ene de ĝi? 622 00:34:41,550 --> 00:34:44,280 Kio devus la duonan rondveturon? 623 00:34:44,280 --> 00:34:46,350 >> Nu eble en C vi estus farinta ion 624 00:34:46,350 --> 00:34:50,040 kiel disponigis sentinelo valoron, kiel 0.0, aŭ eble negativa nombro, 625 00:34:50,040 --> 00:34:53,690 aŭ io simple reprezenti la fakton ke estis iu eraro kondiĉo 626 00:34:53,690 --> 00:34:57,910 kaj vi eble ne vere havas la kapablon komputi ke mezumo. 627 00:34:57,910 --> 00:35:05,590 Nu la beleco de specifi laŭvola tipo estus fari tion. 628 00:35:05,590 --> 00:35:09,540 Kaj mi nun diri samajn vortojn, sed tiu praktiko ne uzas Laŭvolaj. 629 00:35:09,540 --> 00:35:12,970 Sed ni vidos, ke en nur minutoj kie ni povas agordi mezumo 630 00:35:12,970 --> 00:35:17,230 esti laŭvola datumtipo por ke se ĝi reale revenas iuj datumoj, tiam 631 00:35:17,230 --> 00:35:18,470 ni revenos tiu datumo. 632 00:35:18,470 --> 00:35:20,570 Alie ni revenos nulo, dirante ke tiu 633 00:35:20,570 --> 00:35:22,200 havas nenian seriozan kalkuladon. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Ni movi sur al io alia. 636 00:35:28,570 --> 00:35:35,910 Do el ĉi tie, ni estis rigardanta ĉiuj tiuj ekzemploj en la komandlinio. 637 00:35:35,910 --> 00:35:39,470 Sed vere kion vi tuj esti pritraktas estas Xcode. 638 00:35:39,470 --> 00:35:43,720 Kaj unu el la belajn vortojn pri Xcode estas, kaj specife en Swift, 639 00:35:43,720 --> 00:35:47,450 estas ke ni havas tiun afero nomata ludejo. 640 00:35:47,450 --> 00:35:51,470 Kaj Playground estas neniom iOS app. 641 00:35:51,470 --> 00:35:54,751 Sed permesas eksperimenti kun Swift en tre facila maniero. 642 00:35:54,751 --> 00:35:56,000 Vi povas tajpi ĉiuj de via kodo. 643 00:35:56,000 --> 00:35:58,140 Ĝi estas bele sintakso reliefigis tie. 644 00:35:58,140 --> 00:36:01,600 Kiam vi kreas novan dosieron, ĝi petos vi se vi deziras krei Playground. 645 00:36:01,600 --> 00:36:08,720 Sed la bela afero pri la Playground estas al la dekstra de via fenestro, 646 00:36:08,720 --> 00:36:12,020 faras ĝi vere montras vi eligo de via kodo. 647 00:36:12,020 --> 00:36:16,110 Do se mi rulumu malsupren, ni povas vidi kion la eligo de diversaj linioj de kodo 648 00:36:16,110 --> 00:36:17,200 fakte hazarde estas. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Do en ĉi tiu kazo, ni tuj ŝanĝi direktoj nur iomete 651 00:36:26,790 --> 00:36:30,960 kaj paroli pri iu kiu estas vere Gravas tiu altnivela vojo 652 00:36:30,960 --> 00:36:34,020 ke Swift operacias, kaj ĝi estas tiu ideo de fermoj. 653 00:36:34,020 --> 00:36:36,960 Kaj vi probable vidis tiun iomete en JavaScript. 654 00:36:36,960 --> 00:36:40,770 Por tiuj el vi kiuj estas en CS50, fermoj 655 00:36:40,770 --> 00:36:47,240 estas tre populara, tre bona maniero fari altnivela aferojn en modernaj lingvoj. 656 00:36:47,240 --> 00:36:50,270 Sed estas ankaŭ speco de malfacile envolver via kapo ĉirkaŭ unuafoje. 657 00:36:50,270 --> 00:36:52,269 Do se vi rigardas ĉi unua fojo, ke estas OK. 658 00:36:52,269 --> 00:36:56,740 Nur rigardu la fontkodon kaj vidi se vi povas kompreni ĝin hejme. 659 00:36:56,740 --> 00:37:01,050 >> Do en ĉi tiu kazo, ni diras ke ni volas krei multajn eksponentoj 660 00:37:01,050 --> 00:37:04,134 kun iu fiksa valoro. 661 00:37:04,134 --> 00:37:05,800 Do en tiu kazo mi povas krei funkcion. 662 00:37:05,800 --> 00:37:09,270 Mi tuj vokos ŝin potenco de 2 kies sola celo en la vivo 663 00:37:09,270 --> 00:37:15,770 estas preni iujn enigo kaj duobla ĝin, kaj revenas tiu valoro. 664 00:37:15,770 --> 00:37:21,210 Rimarku, ke ĉi tie mi estas akcepti unu tipo de datumoj. 665 00:37:21,210 --> 00:37:23,137 Ĝi okazas al esti variablo nomata x. 666 00:37:23,137 --> 00:37:23,970 Ĝi estas de tipo double. 667 00:37:23,970 --> 00:37:26,190 Kaj mi tuj resendas Duobla tie. 668 00:37:26,190 --> 00:37:29,100 Kaj mi simple tuj fari tre, sincere, belaj 669 00:37:29,100 --> 00:37:32,650 naiva maniero de duobliganta tiun valoron. 670 00:37:32,650 --> 00:37:35,600 Kaj mi montros al vi kial ĉi estas utilaj en nur dua. 671 00:37:35,600 --> 00:37:40,418 >> Rimarku, ke ĉi tie ni havas ĉi gamo denove. por io en 1, skalara 672 00:37:40,418 --> 00:37:44,130 dot dot, 2, kio signifas ke tiu buklo kuras dufoje. 673 00:37:44,130 --> 00:37:46,480 Sed ĉi reprezentas loka variablo. 674 00:37:46,480 --> 00:37:49,650 Ĝi signifas Mi ne vere tuj esti uzante tiu variablo ie 675 00:37:49,650 --> 00:37:51,070 ene de tiu ciklo. 676 00:37:51,070 --> 00:37:55,380 Mi volas nur tiu linio de kodo kuri dufoje, 677 00:37:55,380 --> 00:37:58,980 sen bezoni scii la valoron de tiu gamo. 678 00:37:58,980 --> 00:38:02,570 >> Do ĉi-kaze mi kurante rezulto fojojn x dufoje, kio esence 679 00:38:02,570 --> 00:38:06,560 signifas ke mi akordi tiun valoron. 680 00:38:06,560 --> 00:38:10,230 Kaj tio okazas al labori kiel ni atendus. 681 00:38:10,230 --> 00:38:16,410 Potenco de 2, pasante valoro de 2.0 donas nin potenco de 4. 682 00:38:16,410 --> 00:38:18,810 3.2 verkojn por 10,24. 683 00:38:18,810 --> 00:38:22,660 >> Nun ni povas fari similan afero por potenco de 3. 684 00:38:22,660 --> 00:38:25,330 Sed nun ŝanĝas nur la gamo. 685 00:38:25,330 --> 00:38:28,840 Por loka variablo en 1 tra 3, multipliki 3 fojojn, 686 00:38:28,840 --> 00:38:29,830 kaj fari la saman aferon. 687 00:38:29,830 --> 00:38:32,240 >> Do tio ĉi povus senti iom artefaritaj. 688 00:38:32,240 --> 00:38:34,270 Sed estas grava afero tie kiu 689 00:38:34,270 --> 00:38:37,770 estas ke rigardante tiujn du funkcioj, ekzistas 690 00:38:37,770 --> 00:38:43,600 nur unu afero, ke estas malsamaj, Kiu estas tiu valoro en la intervalo. 691 00:38:43,600 --> 00:38:46,910 Ĉio alia pri tiuj du funkcioj, potenco de 3 kaj potenco de 2, 692 00:38:46,910 --> 00:38:50,440 estas, fakte, identaj ĉar ili laboras en la sama maniero. 693 00:38:50,440 --> 00:38:53,460 >> Do en ĉi tiu punkto, iom alarmilo devas foriri. 694 00:38:53,460 --> 00:38:56,200 Espereble kion vi diras, vi scias, tiu sentas iomete 695 00:38:56,200 --> 00:38:59,250 kiel duobligo de penado. 696 00:38:59,250 --> 00:39:02,950 Eble tie estas vojo ke mi volus povos encapsular ĉio ĉi 697 00:39:02,950 --> 00:39:06,630 kaj provizi funkcio aŭ krei funkcion kiu 698 00:39:06,630 --> 00:39:11,550 faras precize kion mi volas sen bezonante tajpi ĝin eksplicite. 699 00:39:11,550 --> 00:39:15,732 Kaj tiu estas kio la potenco de fermo nin permesas fari. 700 00:39:15,732 --> 00:39:16,940 Do ni rigardu tiun. 701 00:39:16,940 --> 00:39:18,700 Kaj mi pasigas kelkajn minutoj pri tio, ĉar tiu 702 00:39:18,700 --> 00:39:20,310 estas sufiĉe grava por Swift. 703 00:39:20,310 --> 00:39:22,900 Ni vidas ĉi tutan tempon. 704 00:39:22,900 --> 00:39:24,550 Ni tuj difini funkcion. 705 00:39:24,550 --> 00:39:26,380 Ĝi tuj estos nomita powerOf. 706 00:39:26,380 --> 00:39:29,470 Ĝi tuj akcepti parametro nomita y el tipo Int. 707 00:39:29,470 --> 00:39:32,220 Sed rigardu la reveno tipo. 708 00:39:32,220 --> 00:39:38,730 La reveno tipo estas, krampoj, Duobla arrow Double. 709 00:39:38,730 --> 00:39:43,370 Kio signifas ke tiu funkcio, tiu funkcio powerOf, 710 00:39:43,370 --> 00:39:46,550 revenante funkcio. 711 00:39:46,550 --> 00:39:50,845 Kiu akceptante Duobla kaj revenante Double. 712 00:39:50,845 --> 00:39:53,720 Tiel ke povus soni speco de freneza, sed ni rulumu malsupren iomete 713 00:39:53,720 --> 00:39:55,060 kaj rigardi por vidi kion okazas. 714 00:39:55,060 --> 00:39:57,910 Ni estas ene de tiu funkcio powerOf. 715 00:39:57,910 --> 00:40:00,760 Ni kreas novan funkcion nomata exponentiator, 716 00:40:00,760 --> 00:40:02,900 sed ne gravas kia ĝi estas. 717 00:40:02,900 --> 00:40:06,410 >> Rimarku ke tiu havas eniga valoro de x. 718 00:40:06,410 --> 00:40:09,910 Kaj ĝi prenas en duobla kaj revenante Double. 719 00:40:09,910 --> 00:40:16,320 Kaj estas la sama kodo ke ni vidis supre, krom ke la valoro de 2 720 00:40:16,320 --> 00:40:20,060 aŭ la valoron de 3, tio supra ligis en tiu gamo, 721 00:40:20,060 --> 00:40:23,210 estis anstataŭita per tiu valoro de y, kiu 722 00:40:23,210 --> 00:40:27,230 estis la komenca parametro de nia powerOf funkcio. 723 00:40:27,230 --> 00:40:31,700 Kaj je tiu punkto, ni reveni exponentiator. 724 00:40:31,700 --> 00:40:33,345 Ni reveni la funkcio. 725 00:40:33,345 --> 00:40:36,300 726 00:40:36,300 --> 00:40:39,550 >> Estas ia kiel iom menso blovis. 727 00:40:39,550 --> 00:40:44,360 Sed imagu kio okazas kiam mi nomas tiun funkcion powerOf 728 00:40:44,360 --> 00:40:47,610 migru en ĝin iu valoro kiel 2. 729 00:40:47,610 --> 00:40:50,020 Tio signifas ke Mi nun havas la valoron 730 00:40:50,020 --> 00:40:55,130 2 por Y, kio signifas ke tiu valoro y en ĉi exponentiator funkcio 731 00:40:55,130 --> 00:40:56,410 estos ke valoro 2. 732 00:40:56,410 --> 00:41:01,290 Sed Mi revenos ĉi exponentiator funkcio. 733 00:41:01,290 --> 00:41:05,900 >> Do rimarki kion Swift diras mi esti kreita en tiu kazo. 734 00:41:05,900 --> 00:41:10,550 lasu kvadrato estas difino, estas funkcio kiu akceptas Duobla 735 00:41:10,550 --> 00:41:12,610 kaj resendas Double. 736 00:41:12,610 --> 00:41:16,590 Mi kreis funkcio ke kvadratoj ion 737 00:41:16,590 --> 00:41:19,782 uzante tiun mekanismon tie. 738 00:41:19,782 --> 00:41:22,490 Kaj vere kio okazas estas ke revenas ĉi funkcio 739 00:41:22,490 --> 00:41:26,390 exponentiator, sed tiu valoro y estas envolvita ene de ĝi. 740 00:41:26,390 --> 00:41:31,080 Kaj tial nun ĉiu tempo mi uzas tiun variablo aŭ ĉi konstanta nomata 741 00:41:31,080 --> 00:41:35,180 kvadrata, ĝi estas tuj konduti kiel funkcio. 742 00:41:35,180 --> 00:41:39,960 Kaj tial mi povas tiam nomita tiu variablo kiel mi nomas funkcio, 743 00:41:39,960 --> 00:41:43,830 migru tien numeron, kiel en tiu kazo 3. 744 00:41:43,830 --> 00:41:45,910 Kaj mi tiam akordis tiun valoron. 745 00:41:45,910 --> 00:41:53,340 Do 3 kvadratoj estos tiam fariĝi 9, kiel ni povas vidi ĉi tie. 746 00:41:53,340 --> 00:41:56,530 >> Vere freneza, sed tio nun permesas al mi la ŝanco 747 00:41:56,530 --> 00:41:59,040 krei aliajn powerOf funkcioj. 748 00:41:59,040 --> 00:42:03,680 Kiel mi povas diri, OK, bone nun mi volas krei novan funkcion, powerOf (3), 749 00:42:03,680 --> 00:42:06,290 kaj stoki ke en konstanta nomita kubo. 750 00:42:06,290 --> 00:42:10,220 Kaj nun kubo tuj esti aparta funkcio kiu tiam 751 00:42:10,220 --> 00:42:14,800 preni iun valoron kiel enigo kaj kubo ke valoro kiel ni povas vidi en la funda linio 752 00:42:14,800 --> 00:42:16,420 tie. 753 00:42:16,420 --> 00:42:18,590 kubo de 2 estas tuj rezultigi 8. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Espereble bela neta stuff. 756 00:42:22,680 --> 00:42:25,920 Vi neniam vidis tion antaŭe. 757 00:42:25,920 --> 00:42:29,990 Mi kuraĝigas vin rigardi en fermoj kaj enketi ĉi iom pli. 758 00:42:29,990 --> 00:42:33,570 Ĝi estas vere potenca aĵojn ni vidas multajn en JavaScript kaj kelkaj aliaj lingvoj. 759 00:42:33,570 --> 00:42:37,160 Estas vere nemalhavebla al kompreni API tiel 760 00:42:37,160 --> 00:42:38,620 ke ni atingos en nur dua. 761 00:42:38,620 --> 00:42:39,456 Jes? 762 00:42:39,456 --> 00:42:43,740 >> Spektantaro: Kiam vi faras powerOf (2), parentezo kaj tiam 763 00:42:43,740 --> 00:42:48,764 alia parentezo, alia input-- vi esence anstataŭante la kvadrato. 764 00:42:48,764 --> 00:42:50,930 DAN AMRMENDARIZ: Do rigardu je la lasta linio tie. 765 00:42:50,930 --> 00:42:55,930 Estas fakte tute eblas fari tion ĉenante kiel vi sugestis. 766 00:42:55,930 --> 00:43:00,990 Do powerOf (5) signifas ke ni tuj havi exponentiator de 5 ĝis tie. 767 00:43:00,990 --> 00:43:04,160 Do tiu estas esence tuj estos la samon kiel 4 al la kvina potenco, 768 00:43:04,160 --> 00:43:07,200 ĉar ni kreis exponentiating funkcii al la kvina potenco, 769 00:43:07,200 --> 00:43:09,920 kaj ni pasante en ke funkcios la valoro 4. 770 00:43:09,920 --> 00:43:12,619 Kaj ni preni tiun valoron ke ni atendas, 1024. 771 00:43:12,619 --> 00:43:14,785 Publiko: Kaj ĝi ne estas nomo, Por ĝi faciligante 772 00:43:14,785 --> 00:43:16,570 legi, la kvadrata ajn. 773 00:43:16,570 --> 00:43:17,903 >> DAN AMRMENDARIZ: Dekstra, precize. 774 00:43:17,903 --> 00:43:21,120 Do antaux Mi nur metis ĝin en konstanta tie tiel 775 00:43:21,120 --> 00:43:23,808 ke faris ĝin facile uzi tiun nomon. 776 00:43:23,808 --> 00:43:24,308 Jes? 777 00:43:24,308 --> 00:43:26,942 >> Publiko: En tiu kunteksto powerOf, ĝi estas parto 778 00:43:26,942 --> 00:43:30,774 de la programlingvo kontraste al la vojo vi 779 00:43:30,774 --> 00:43:33,952 pensi powerOf en [inaudible]? 780 00:43:33,952 --> 00:43:35,660 DAN AMRMENDARIZ: Do tiukaze powerOf 781 00:43:35,660 --> 00:43:39,280 estas simple la nomo de la funkcio kiun mi difinis supren tie. 782 00:43:39,280 --> 00:43:41,801 Do estas ne imanenta al la lingvo mem, 783 00:43:41,801 --> 00:43:43,550 sed anstataŭe, estas nur funkcio kiu havas 784 00:43:43,550 --> 00:43:45,628 tiu nomo ĉar mi fordonas tiu nomo. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 Aliajn demandojn? 787 00:43:51,920 --> 00:43:52,800 Bone. 788 00:43:52,800 --> 00:43:54,750 >> Nun tiu estas granda. 789 00:43:54,750 --> 00:43:58,170 Sed vi ne tuj vidi Multa fermaĵo funkcioj kiuj 790 00:43:58,170 --> 00:44:03,440 estas kiel tiu kie vi difinas, ene de unu funkcio, alia funkcio. 791 00:44:03,440 --> 00:44:04,320 Kaj vi povas fari ĝin. 792 00:44:04,320 --> 00:44:06,430 Sed ĝi estas speco de ne vere necesa, ĉu ne? 793 00:44:06,430 --> 00:44:09,189 Kiel kial mi difinas tiun funkcio nomita exponentiator 794 00:44:09,189 --> 00:44:10,480 kaj tiam tuj revenas ĝi. 795 00:44:10,480 --> 00:44:15,220 Kial mi ne simple tuj reveni ĉi funkcio? 796 00:44:15,220 --> 00:44:18,890 >> Kaj fakte, tiu estas ĝuste la ideo malantaŭ koncepto nomata 797 00:44:18,890 --> 00:44:22,410 anonimaj funkcioj, kie anonimaj funkcioj ne reale 798 00:44:22,410 --> 00:44:25,270 havi nomon ĉar ili ne bezonas havi unu. 799 00:44:25,270 --> 00:44:28,700 Kaj tial en ĉi tiu kazo, en 7B, ni povas trovi ĝuste tio. 800 00:44:28,700 --> 00:44:31,470 Estas ĉio la saman kodon, faras precize la saman aferon, 801 00:44:31,470 --> 00:44:35,570 sed nun ni ŝanĝis ĝin iomete tiom ke ĉi powerOf funkcio tuj 802 00:44:35,570 --> 00:44:37,750 redonas funkcion. 803 00:44:37,750 --> 00:44:44,150 Rimarku ke post reveno, ekzistas malfermita krispa krampo. 804 00:44:44,150 --> 00:44:46,410 Ĝi atendis ĉi eniga Double. 805 00:44:46,410 --> 00:44:48,560 Oni atendus, ke eligo Double. 806 00:44:48,560 --> 00:44:52,175 Kaj tiam la en ŝlosilvorto disigas la kodo mem. 807 00:44:52,175 --> 00:44:53,550 Do tiu estas anonima funkcio. 808 00:44:53,550 --> 00:44:57,030 Ĝi fakte ne havas nomon, dum antaŭ ĝi nomiĝis exponentiator. 809 00:44:57,030 --> 00:45:00,229 Sed kiel ni vidis, nur vere ne rilatas al exponentiator 810 00:45:00,229 --> 00:45:01,270 eksteren de tiu funkcio. 811 00:45:01,270 --> 00:45:02,470 Do ne gravas. 812 00:45:02,470 --> 00:45:06,300 Do tiu anonima funkcio estas tielnomita ĉar ĝi estas sennoma, 813 00:45:06,300 --> 00:45:09,107 sed ĝi estas ankoraŭ uzata en la kunteksto de tiu kodo. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> La sekva paro ones mi certas tuj daŭrigi espereble 816 00:45:16,079 --> 00:45:17,370 blovanta via menso iomete. 817 00:45:17,370 --> 00:45:20,410 Ni povas simpligi tion eĉ pli. 818 00:45:20,410 --> 00:45:24,490 Ĉar kiel estis ruze atentigis pli frue, 819 00:45:24,490 --> 00:45:29,100 eble ni efektive scias, per Konkludante el tiu kodo, kio 820 00:45:29,100 --> 00:45:31,750 la eligo de ĉi kodo tuj estos. 821 00:45:31,750 --> 00:45:38,180 Kaj fakte, en tiu anonima funkcio, ni povas fakte indukti la tipoj de datumoj. 822 00:45:38,180 --> 00:45:41,650 >> Do en ĉi tiu, ni ne plu devas eksplicite difini 823 00:45:41,650 --> 00:45:44,850 la tipon de datumoj kiu estas estanta enigo kaj eligo de ĉi tiu funkcio 824 00:45:44,850 --> 00:45:45,890 por paro de kialoj. 825 00:45:45,890 --> 00:45:51,390 Unu estas ke ni difinis, supre ĉe la prototipo de la enmetanta funkcio, 826 00:45:51,390 --> 00:45:55,770 kio tipo de datumoj tiu anonima funkcio devus enigo kaj eligo. 827 00:45:55,770 --> 00:45:57,900 Kaj de la alia, ni povas konkludi el la kodo 828 00:45:57,900 --> 00:46:01,930 cxi tie, ke ni akceptas eniga kiu estas de tipo Duobla 829 00:46:01,930 --> 00:46:03,670 kaj revenante Double. 830 00:46:03,670 --> 00:46:07,890 >> Rimarku, ke ĉi tie ni havas ne eksplicite difinis la nomoj de la argumentoj 831 00:46:07,890 --> 00:46:11,220 ke tiu funkcio estas akceptanta. 832 00:46:11,220 --> 00:46:16,180 Kaj tiel ni vidas ni povas rilati al tiuj parametroj uzante $ 0, $ 1, 833 00:46:16,180 --> 00:46:20,140 tiel plu kaj tiel antaŭen, depende la nombro de tiu parametro uzita 834 00:46:20,140 --> 00:46:20,850 en tiu funkcio. 835 00:46:20,850 --> 00:46:23,370 836 00:46:23,370 --> 00:46:29,740 >> Tiu estas iu kiu vi iras vidi tre estas ĉi malfermita krispa krampo 837 00:46:29,740 --> 00:46:32,797 difino sekvita per $ 0, kaj tiam iuj operacio, 838 00:46:32,797 --> 00:46:34,130 kaj tiam fermita krispa krampo. 839 00:46:34,130 --> 00:46:38,630 Ke estas anonima funkcio kiu elfaras tiun operacion. 840 00:46:38,630 --> 00:46:42,940 Ĝi havas ĉi parametro kie ĝi estas tipo estas deduktebla. 841 00:46:42,940 --> 00:46:44,860 Tiu unua parametro estas $ 0. 842 00:46:44,860 --> 00:46:49,010 Kaj iu operacio estas okazas en tiu $ 0. 843 00:46:49,010 --> 00:46:52,100 >> Publiko: Do ​​la dolaro signo signifas parametro esence, 844 00:46:52,100 --> 00:46:53,429 kaj 0 signifas la unua? 845 00:46:53,429 --> 00:46:54,720 DAN Armendáriz: Tio ĝustas. 846 00:46:54,720 --> 00:46:59,100 Do la dolaro signo esence signifas parametro, kaj 0 signifas la unua unu. 847 00:46:59,100 --> 00:47:02,760 Sed ĝi funkcias specife en tiu kazo, kie mi ne nomis 848 00:47:02,760 --> 00:47:07,940 la argumentoj en mia anonima funkcio. 849 00:47:07,940 --> 00:47:11,119 >> Spektantaro: Ĉu Perl aŭ io havas ĉi dolaro signo, dolaro 0 tien? 850 00:47:11,119 --> 00:47:12,702 DAN Armendáriz: Ĉu kiu, mi bedaŭras? 851 00:47:12,702 --> 00:47:15,360 Spektantaro: Ĉu Perl havas ĉi dolaro 0, dolaro 1-- 852 00:47:15,360 --> 00:47:17,318 DAN Armendáriz: Mi ne estas tro familiara kun Perl, 853 00:47:17,318 --> 00:47:21,340 sed PHP kio difinas variabloj bazita sur dolaro signoj. 854 00:47:21,340 --> 00:47:26,120 Kaj eble estos iuj lingvoj kiuj havas trajtojn kiel tiu. 855 00:47:26,120 --> 00:47:28,240 Fakte, Swift depruntas a multaj trajtoj kiel ĉi 856 00:47:28,240 --> 00:47:29,489 el multaj aliaj lingvoj. 857 00:47:29,489 --> 00:47:32,380 Ni vidas aludojn de Python en ĝi. 858 00:47:32,380 --> 00:47:35,800 Tiu difino de tipo ŝajnas veni de OCaml. 859 00:47:35,800 --> 00:47:38,932 Kaj ni havas nur tutan faskon da ŝtofo el multaj malsamaj lingvoj. 860 00:47:38,932 --> 00:47:40,640 Tio estas unu el la agrablaj aferojn pri Swift 861 00:47:40,640 --> 00:47:43,390 estas ke ĝi prenas multan el la plej bonaj ideoj de aro da lingvoj 862 00:47:43,390 --> 00:47:47,229 kaj shoehorns ilin ĉiujn kune en unu ekstra lingvo. 863 00:47:47,229 --> 00:47:49,520 Fakte, se vi permesas al mi daŭrigi blovanta via menso, 864 00:47:49,520 --> 00:47:51,000 tiel ni estis farante ĉiuj ĉi. 865 00:47:51,000 --> 00:47:56,690 Ni povas eble simpligi ĉi iom pecon post rimarki ke, kompreneble, 866 00:47:56,690 --> 00:48:02,120 Swift havas exponentiating funkcio enkonstruita. 867 00:48:02,120 --> 00:48:04,660 Se mi importi Darwin, kiu estas nur la biblioteko kiu 868 00:48:04,660 --> 00:48:09,680 prezentas tiun funkcion nomita pow, nun Mi povas simpligi mian povon de funkcio 869 00:48:09,680 --> 00:48:11,830 esti la sekva. 870 00:48:11,830 --> 00:48:15,860 Ĝi tuj estos revenanta tiu anonima funkcio. 871 00:48:15,860 --> 00:48:17,950 >> Sed vidu kiom simpla tio estas nun. 872 00:48:17,950 --> 00:48:22,780 Jen anonima funkcio kiu estas akcepti iun tipon de datumoj, 873 00:48:22,780 --> 00:48:26,600 kaj ĝi tuj estos unu argumento specife, 874 00:48:26,600 --> 00:48:29,320 referenceita ĉe $ 0 kiu estas de tipo double. 875 00:48:29,320 --> 00:48:32,680 Ĝi tuj revenos tipo double. 876 00:48:32,680 --> 00:48:35,760 Sed la reveno deklaro nun estas implicita. 877 00:48:35,760 --> 00:48:39,990 >> Kaj estas precize tiu stilo kiu Estas tre, tre disvastiĝinta en Swift, 878 00:48:39,990 --> 00:48:40,790 tuta loko. 879 00:48:40,790 --> 00:48:43,190 Ni tuj vidos ĉi tutan tempon en Swift. 880 00:48:43,190 --> 00:48:46,150 Do mi montrante ĉion ĉi al Vi pro ĉi sintakso. 881 00:48:46,150 --> 00:48:49,070 Tiu estas tre komuna vidi, kion signifas tio 882 00:48:49,070 --> 00:48:51,420 estas anonima funkcio ke estas elfaranta 883 00:48:51,420 --> 00:48:54,640 iuj operacio pri tiuj argumentoj. 884 00:48:54,640 --> 00:48:56,940 Kaj tie estas implica reveno. 885 00:48:56,940 --> 00:49:01,850 Do ĝi estas absolute la sama afero por ni diri ĉi, ĉi tie. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> Pro tiu krispa krampo estas funkcio, 888 00:49:08,150 --> 00:49:10,480 ni estas elfari tiun operacion sur la unua argumento. 889 00:49:10,480 --> 00:49:12,170 Ni tuj revenu tio. 890 00:49:12,170 --> 00:49:14,815 Sed tiu ekstera reveno estas reveninte tiu tuta funkcio, 891 00:49:14,815 --> 00:49:19,855 ke tutaj anonima funkcio ke ni ĵus kreita. 892 00:49:19,855 --> 00:49:21,689 Aliajn demandojn? 893 00:49:21,689 --> 00:49:23,980 Bone, mi ne scias ĉu Vi uloj estas pretaj por tio, 894 00:49:23,980 --> 00:49:27,455 sed ni povas iri eĉ pli freneza kun Swift. 895 00:49:27,455 --> 00:49:28,560 Vi preta? 896 00:49:28,560 --> 00:49:29,930 OK, ĉi tiu estas granda. 897 00:49:29,930 --> 00:49:35,310 >> Nun ni efektive havas la kapablon al, en Swift, pro kiel modulaj 898 00:49:35,310 --> 00:49:39,650 kaj kiel protokolo bazita ĝi estas, por difini nian propran freaking operatoroj. 899 00:49:39,650 --> 00:49:44,060 Kiel en ĉi tiu kazo, ni ne havis operatoro por exponentiation-- bone, 900 00:49:44,060 --> 00:49:47,990 por elfaranta potencoj de io. 901 00:49:47,990 --> 00:49:53,632 Sed mi povas, en Swift, difini nova operatoro kiu faras ĝuste tion. 902 00:49:53,632 --> 00:49:55,590 Do en tiu kazo ekzistas faskon de sintakso tie. 903 00:49:55,590 --> 00:49:59,980 Kaj mi permesos ke vi rigardu ĝin hejme kiam vi rigardas tiun. 904 00:49:59,980 --> 00:50:06,890 Sed ni devas difini ĉi infikso operatoro, **, kiu tiam permesus nin, 905 00:50:06,890 --> 00:50:09,840 difinante kion tio funkcio ** reale 906 00:50:09,840 --> 00:50:15,010 does, akcepti maldekstra mano flanko kaj dekstra flanko, 907 00:50:15,010 --> 00:50:21,190 kaj tiam reveni la eksponento de tiu maldekstra flanko al la dekstra flanko. 908 00:50:21,190 --> 00:50:24,850 >> Kaj do nun subite mi kreis novan numeratoro. 909 00:50:24,850 --> 00:50:29,490 Do 2 ** 3 signifas 2 al la tria potenco. 910 00:50:29,490 --> 00:50:34,420 [Menso blovas SOUND] Tiu de mem devus fari vin esti kiel, 911 00:50:34,420 --> 00:50:37,960 OK, ŝraŭbo C. Mi tuj Swift tutan vojon. 912 00:50:37,960 --> 00:50:38,740 Tiu estas bonega. 913 00:50:38,740 --> 00:50:40,140 Tiu estas sufiĉe mirinda. 914 00:50:40,140 --> 00:50:42,240 >> Kvankam ĉi tiu estas granda ekzemplo. 915 00:50:42,240 --> 00:50:45,570 Sed mi havas neniam iam ekster de tiu ekzemplo fakte 916 00:50:45,570 --> 00:50:46,800 difinita mia propra operatoro. 917 00:50:46,800 --> 00:50:49,710 Sed ankoraŭ, ĝi montras Multa la potenco de Swift 918 00:50:49,710 --> 00:50:54,050 kaj kial tio fakte estas vere tre cool. 919 00:50:54,050 --> 00:50:55,832 OK, jes? 920 00:50:55,832 --> 00:50:57,790 Publiko: Se vi estas difini vian propran operatoro, 921 00:50:57,790 --> 00:51:02,940 Kiel vi scias ke vi ne hazarde klopodi krei telefoniston tio 922 00:51:02,940 --> 00:51:06,040 en ie en C, kiel kaŝita ie en Swift, 923 00:51:06,040 --> 00:51:12,210 kiel obskura kiu vi eble ne vidis antaŭe. 924 00:51:12,210 --> 00:51:15,050 >> DAN Armendáriz: Do se vi provas difini vian propran operatoroj, 925 00:51:15,050 --> 00:51:20,970 ekzistas la risko de difinanta unu super ekzistantan operatoro. 926 00:51:20,970 --> 00:51:24,870 Kiu iras al nivelon de detalo kiu Mi ne kredas ke ni havas tempon por pasantoj. 927 00:51:24,870 --> 00:51:27,620 Sed tio estas risko. 928 00:51:27,620 --> 00:51:31,320 Kaj kiu estas fakte la tre kialo kial Mi ne uzis la tekstkursoran simbolo, kiun 929 00:51:31,320 --> 00:51:36,210 kiam ni tajpas el potenco, ni kutime uzi 4 eta ĉapelo 5 aŭ ion 930 00:51:36,210 --> 00:51:40,560 tiel, nur kiam ni estas Gchatting amikoj aŭ kio ajn. 931 00:51:40,560 --> 00:51:43,660 Sed en tiu kazo, ke efektive estus kaŭzinta kolizion. 932 00:51:43,660 --> 00:51:46,450 Kaj tial mi evitis gxin nur cxar Mi hazarde scias tiukaze 933 00:51:46,450 --> 00:51:50,430 ke tio farus ke kolizio. 934 00:51:50,430 --> 00:51:52,270 >> Bone. 935 00:51:52,270 --> 00:51:55,080 Nun bedaŭrinde, por la lastaj sep minutoj, 936 00:51:55,080 --> 00:51:57,410 Mi devas teni blovado viaj mensoj iomete. 937 00:51:57,410 --> 00:52:00,230 Do permesu min montri vin iuj aliaj aĵoj ankaŭ. 938 00:52:00,230 --> 00:52:03,710 >> Ni montris al vi tiun ideon de havanta tiuj anonimaj funkcioj, 939 00:52:03,710 --> 00:52:07,040 tiuj fermoj kiuj permesas vin ia pasi funkcioj ĉirkaŭ. 940 00:52:07,040 --> 00:52:08,100 Vi povas reveni ilin. 941 00:52:08,100 --> 00:52:09,490 Vi povas manipuli ilin. 942 00:52:09,490 --> 00:52:11,790 Vi povas fari ĉiajn freneza stuff. 943 00:52:11,790 --> 00:52:14,850 >> Sed unu alia afero ke hazarde estas utila 944 00:52:14,850 --> 00:52:19,740 estas la kapablo, kontraste por reveni tiuj funkcioj 945 00:52:19,740 --> 00:52:25,146 en funkcio, por pasi funkcio kiel parametron al alia funkcio. 946 00:52:25,146 --> 00:52:30,430 Vi eblas esti pensanta bone kial sur la Tero mi volas fari ion tian? 947 00:52:30,430 --> 00:52:33,660 >> Nu, ni diru ke mi volas preni ĉi operatoro ke mi 948 00:52:33,660 --> 00:52:40,260 laboris tiel forte por krei kaj apliki ĝin faskon de malsamaj nombroj 949 00:52:40,260 --> 00:52:41,770 en tabelo. 950 00:52:41,770 --> 00:52:46,700 Do en tiu kazo mi havas tabelo de integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 Kaj mi volas duobligi ĉiujn. 952 00:52:48,080 --> 00:52:50,430 La maniero kiun ni volus tipe fari estas simple skribi 953 00:52:50,430 --> 00:52:53,440 simplan por buklo ke ripetas la tuta militistaro 954 00:52:53,440 --> 00:52:57,140 kaj elfari ian kvadrataj operacio super ili, 955 00:52:57,140 --> 00:53:02,700 inputting tiuj novaj valoroj en novan variablo, aŭ prefere, nova tabelo tie. 956 00:53:02,700 --> 00:53:07,370 Kaj la valoro de la eligo de rezulto estas tiam ĉiuj tiuj aroj, 957 00:53:07,370 --> 00:53:10,200 aŭ prefere ĉiu el tiuj elementoj nun kvadrato. 958 00:53:10,200 --> 00:53:12,680 >> Kaj ni povus fari la saman afero por cubing ĝi, 959 00:53:12,680 --> 00:53:15,360 sed iom alarmo sonorilo devus esti pafante 960 00:53:15,360 --> 00:53:17,360 dirante ke eble tie estas iel ke ni farus 961 00:53:17,360 --> 00:53:19,860 povos simpligi ĉi iom. 962 00:53:19,860 --> 00:53:21,130 Kaj fakte ekzistas. 963 00:53:21,130 --> 00:53:25,320 Kio se ni povus krei funkcion kiu ebligas 964 00:53:25,320 --> 00:53:28,350 akcepti, kiel rabobesto, funkcio? 965 00:53:28,350 --> 00:53:30,350 Do en ĉi tiu kazo, preni rigardi tiujn argumentojn. 966 00:53:30,350 --> 00:53:33,220 Ni tuj akcepti listo de duobloj. 967 00:53:33,220 --> 00:53:35,030 Kaj tiam ni tuj akcepti funkcio 968 00:53:35,030 --> 00:53:40,990 en variablo nomata f kiu tuj preni Duobla kaj resendas Double. 969 00:53:40,990 --> 00:53:43,320 Kaj la tuta eligo de tiu tuta funkcio 970 00:53:43,320 --> 00:53:47,310 nomata Mapper tuj reveni tabelo nomita duobla. 971 00:53:47,310 --> 00:53:52,380 >> Kio ĉi tiam permesas min fari estas persisti super tiu listo 972 00:53:52,380 --> 00:53:56,350 kaj fari la saman aferon, sed nun apliku tiun funkcion al ĉiu 973 00:53:56,350 --> 00:53:58,970 de la individuaj valoroj en tiu listo. 974 00:53:58,970 --> 00:54:00,750 Do mi ne vere scias kion f. 975 00:54:00,750 --> 00:54:02,010 Ne gravas al mi. 976 00:54:02,010 --> 00:54:06,530 Sed tiel longe kiel ĝi prenas en duobla, elfaras iun operacion sur ĝi, 977 00:54:06,530 --> 00:54:08,640 kaj tiam resendas Duobla, mi estus tiam 978 00:54:08,640 --> 00:54:13,415 povis mapi domadministranto trans ĉiu unuopa elemento en la listo. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> Kaj ĉi tiu tipo de programado estas nomata alta ordo funkcioj, 981 00:54:20,930 --> 00:54:24,440 kie ni pasante funkcioj ĉirkaŭe kiel parametroj 982 00:54:24,440 --> 00:54:26,430 kaj fari aferojn kun funkcioj. 983 00:54:26,430 --> 00:54:29,640 Ĝi estas speco de kiel preni ĉiujn tiujn ideoj kiujn ni lernis en CS50 984 00:54:29,640 --> 00:54:31,390 kaj prenante ilin ia de la sekva nivelo. 985 00:54:31,390 --> 00:54:34,140 Kaj tiu estas ĉiu CS51 stilo stuff. 986 00:54:34,140 --> 00:54:37,080 Kaj tial ni iros en profundon pli en klasoj tiel. 987 00:54:37,080 --> 00:54:38,930 >> Sed tio estas ankaŭ grava tie ĉar ni 988 00:54:38,930 --> 00:54:42,010 vidi multajn funkciojn kiuj estas uzitaj en Swift 989 00:54:42,010 --> 00:54:45,590 kiu esence faras tiu, kie ni havas 990 00:54:45,590 --> 00:54:48,300 iuj nombroj, iuj tabelo de nombroj. 991 00:54:48,300 --> 00:54:50,850 Ni tuj preterpasonta tabelo en nian Mapper. 992 00:54:50,850 --> 00:54:55,770 Kaj ni ankaŭ tuj pasi iun funkcion, kiu 993 00:54:55,770 --> 00:54:57,950 ni jam difinita supren tie. 994 00:54:57,950 --> 00:54:59,690 Ĝi okazas esti kvadrataj. 995 00:54:59,690 --> 00:55:02,220 Kaj ni tuj poste akordis ĉiuj tiuj nombroj 996 00:55:02,220 --> 00:55:04,710 kaj stoki tio sur ĉi tiu rezulto tie. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Do tiu kazo ni difinis niajn propra funkcio nomita Mapper. 999 00:55:11,000 --> 00:55:15,370 Sed precize tiu afero estas, fakte, konstruita en Swift. 1000 00:55:15,370 --> 00:55:18,960 Estas vario de funkcioj nomata mapo. 1001 00:55:18,960 --> 00:55:21,520 Ekzistas mapo funkcio, Tie estas redukti funkcio, 1002 00:55:21,520 --> 00:55:25,630 kaj jen mia filtrilo funkcio, kiu esence apliki funkcioj 1003 00:55:25,630 --> 00:55:30,782 al ĉiu unuopa elemento en listo modifi ilin iel. 1004 00:55:30,782 --> 00:55:34,510 >> Publiko: Do ​​ĉar vi estas transformante la datumoj en alian formaton 1005 00:55:34,510 --> 00:55:36,134 tra function-- 1006 00:55:36,134 --> 00:55:37,050 DAN Armendáriz: Dekstra. 1007 00:55:37,050 --> 00:55:39,420 Jes, do la funkcio ke ni akceptas 1008 00:55:39,420 --> 00:55:41,790 transformas la datumojn iel. 1009 00:55:41,790 --> 00:55:44,700 En tiu kazo, ni estis aŭ akordi ĝin, aŭ ni cubing ĝi, 1010 00:55:44,700 --> 00:55:50,060 aŭ vere, oni povis elfari neniu operacio sur gxin. 1011 00:55:50,060 --> 00:55:54,150 >> Sed lasu min montri vin, kia tiu ĉi tuj serĉos en praktiko. 1012 00:55:54,150 --> 00:55:56,681 Kaj denove, mi kuras iom da tempo. do mi ne 1013 00:55:56,681 --> 00:55:59,430 tuj povos iri super ĉiuj de la fontkodo tie detale. 1014 00:55:59,430 --> 00:56:00,721 Sed mi kuraĝigas vin fari tion. 1015 00:56:00,721 --> 00:56:03,850 Ni afiŝi ĝin tiel frue kiel ebla post tiu diskuto. 1016 00:56:03,850 --> 00:56:07,610 >> Sed se vi prenas rigardi ĉi, supozas ke ni havas liston de nombroj, 1017 00:56:07,610 --> 00:56:10,260 tabelo de nombroj en ĉi variablo nomis nombroj. 1018 00:56:10,260 --> 00:56:16,670 Tiam ni volas realigi ĉi filtrilo operacio sur tiuj nombroj. 1019 00:56:16,670 --> 00:56:19,730 Do filtrilo estas pli alta Por funkcio kiu 1020 00:56:19,730 --> 00:56:24,660 akceptas tabelo kaj ankaŭ funkcio. 1021 00:56:24,660 --> 00:56:28,760 Kaj de ĉiu elemento en tiu tabelo, ĝi elfaras tiun funkcion. 1022 00:56:28,760 --> 00:56:31,990 >> Se tiu funkcio redonas vera, ĝi gardas tiun eron. 1023 00:56:31,990 --> 00:56:36,100 Se tiu funkcio redonas malvera, ĝi ĵetas for la eron. 1024 00:56:36,100 --> 00:56:40,480 Kaj tiam ĝi resendas liston kiu tiam farita supren ĉiuj 1025 00:56:40,480 --> 00:56:44,360 de tiuj eroj kiuj estis filtritaj. 1026 00:56:44,360 --> 00:56:47,150 >> Do en alia vortoj, tio estas la sama ideo, la gradebook. 1027 00:56:47,150 --> 00:56:50,800 Ni havu varion de gradoj en tiu valoro nomis nombroj. 1028 00:56:50,800 --> 00:56:55,590 Povus esti 100, kaj 70, kaj 40, tiel plu kaj tiel antaŭen. 1029 00:56:55,590 --> 00:56:59,110 Kio ĉi filtrilo faras estas avizo ke tio estas kiu sintaksa sukero 1030 00:56:59,110 --> 00:57:01,310 por anonima funkcio. 1031 00:57:01,310 --> 00:57:05,980 Jen anonima funkcio dirante ke la parametro ke mi akcepti 1032 00:57:05,980 --> 00:57:09,690 tuj estos, se estas pli granda ol 70, 1033 00:57:09,690 --> 00:57:15,837 tiam tiu revenos vera, signifante ke ke artikolo restos en tiu filtrilo. 1034 00:57:15,837 --> 00:57:17,920 Do ni estu iomete pli konkretan pri tio. 1035 00:57:17,920 --> 00:57:25,760 Se mi havas ĉi tabelo de nombroj kaj ĝi konsistas de 100, 70, kaj 40, 1036 00:57:25,760 --> 00:57:29,730 Mi plenumos tiun filtrilon operacion sur ĉiu de tiuj. 1037 00:57:29,730 --> 00:57:33,270 Por ke unua estas tiu valoro de 100. 1038 00:57:33,270 --> 00:57:36,770 100 pli granda ol aŭ egala 70 Estas vero, ke 1039 00:57:36,770 --> 00:57:41,950 signifas ke 100 estas konservita en tiun novan kopion de tiu tabelo. 1040 00:57:41,950 --> 00:57:44,290 70 ankaŭ pasas. 1041 00:57:44,290 --> 00:57:46,020 Sed 40 ne. 1042 00:57:46,020 --> 00:57:54,290 Do kio estas redonita en passingCount estas la tabelo de elementoj 100 kaj 70-- 1043 00:57:54,290 --> 00:57:57,410 100, komo, 70. 1044 00:57:57,410 --> 00:57:59,870 Tiuj estis la nuraj du erojn kiuj estis konservitaj. 1045 00:57:59,870 --> 00:58:03,740 Kaj tiel la kialo mi rapide trapasis multe de tiuj speco de alta ordo 1046 00:58:03,740 --> 00:58:08,680 aferoj estas ĉar tio ĉi estas ke komuna afero ke vi vidos en Swift bela 1047 00:58:08,680 --> 00:58:16,810 ofte, estas elfaranta kelkaj operacio uzante tiu anonima funkcio sintakso. 1048 00:58:16,810 --> 00:58:18,450 >> Tie estas iu cool stuff. 1049 00:58:18,450 --> 00:58:24,730 Ŝaltiloj estas vere potenca en Swift, Mi volas diri nur kiel freneza, freneza potenca. 1050 00:58:24,730 --> 00:58:28,250 Vi povas uzi ŝaltilon, kaj vi povas efektive apliki ilin 1051 00:58:28,250 --> 00:58:33,160 al rangoj, kiu estas speco de freneza, kaj fari imago da tio. 1052 00:58:33,160 --> 00:58:37,540 >> Sed en la lastaj kelkaj minutoj, Mi volas salti antaŭen tute malproksima 1053 00:58:37,540 --> 00:58:46,940 kaj montri al vi specifa ekzemplo de kiel ni povas krei en iOS app uzanta Swift. 1054 00:58:46,940 --> 00:58:49,040 Do kiam vi faras tiu, vi devos preni 1055 00:58:49,040 --> 00:58:51,990 rigardo at-- sur Apple dokumentado, ili 1056 00:58:51,990 --> 00:58:56,084 havas multajn vere bonajn lernilojn por krei vian unuan aplikon. 1057 00:58:56,084 --> 00:58:58,250 Kaj mi kuraĝigas vin fari ke ĉar ili prenas vin 1058 00:58:58,250 --> 00:59:04,110 tra ĉiuj paŝoj de kio ĝuste al alklaku krei IOS apliko. 1059 00:59:04,110 --> 00:59:07,290 >> Sed ĉi tie ni havas ĉi IOS app. 1060 00:59:07,290 --> 00:59:10,960 Kaj ĝi estas bela simpla app vere. 1061 00:59:10,960 --> 00:59:13,840 Se mi kuras ĉi, mi povas montri vi kio ĝi aspektas. 1062 00:59:13,840 --> 00:59:19,480 Ĉiuj ĝi esence faras estas ĝi tiras el interreto JSON dosieron 1063 00:59:19,480 --> 00:59:22,300 ke mi stokitaj en servanto. 1064 00:59:22,300 --> 00:59:26,310 Kaj ke JSON dosieron difinas bildoj kiuj permesas 1065 00:59:26,310 --> 00:59:31,680 mi tiam ciklo tra, sur mia app, bildoj de mia retservilo. 1066 00:59:31,680 --> 00:59:32,880 >> Do mi havas tie getNextImage. 1067 00:59:32,880 --> 00:59:37,100 Ĝi ŝarĝas bildon el interreto, kaj montras ĝin sur la ekrano. 1068 00:59:37,100 --> 00:59:38,200 >> Do ĝi estas bela simpla. 1069 00:59:38,200 --> 00:59:41,550 Sed la celo tie estas montri vi kiom ni povas kombini aferojn 1070 00:59:41,550 --> 00:59:47,820 de la lasta malmultaj semajnoj de CS50 en fakta IOS apliko. 1071 00:59:47,820 --> 00:59:53,140 En aliaj vortoj, eble unu el la aferoj vi deziras fari 1072 00:59:53,140 --> 00:59:56,340 Estas havi IOS apliko kiu povas tiri datumoj el interreto 1073 00:59:56,340 --> 00:59:59,070 kaj montri al la uzanto iu informo. 1074 00:59:59,070 --> 01:00:03,130 Tio estas tute la punkto de tiu fontkodo tie. 1075 01:00:03,130 --> 01:00:07,890 >> Do ekzistas multe diri pri kiel fari fakta IOS disvolviĝo. 1076 01:00:07,890 --> 01:00:12,860 Ekzistas multe de freneza sintakso ke ni ne vidis sufiĉe ankoraŭ 1077 01:00:12,860 --> 01:00:15,580 kiel klaso, kio klaso reale estas. 1078 01:00:15,580 --> 01:00:19,470 Ni povas grandparte ignoras ke provizore. 1079 01:00:19,470 --> 01:00:23,250 >> Sed rimarki ke ni enhavis ene tiu vario de aferoj 1080 01:00:23,250 --> 01:00:27,720 ke ni jam vidis kiel funkcioj kiuj havas specifajn nomojn. 1081 01:00:27,720 --> 01:00:32,650 Kiam ni donas tiujn Funkcioj La korekta nomoj 1082 01:00:32,650 --> 01:00:36,530 kiuj atendas de iOS, fakte ĉi sentas iom magia. 1083 01:00:36,530 --> 01:00:40,300 Sed kiam vi kreas IOS apliko, tie 1084 01:00:40,300 --> 01:00:47,590 Estas specifaj funkciaj nomoj kiujn portas sur la telefono mem 1085 01:00:47,590 --> 01:00:52,440 kiel la aplikaĵo prepariĝas provi krei la procezo kiu reale 1086 01:00:52,440 --> 01:00:54,787 kuras via kandidatiĝo. 1087 01:00:54,787 --> 01:00:58,120 Do denove, ekzistas multaj aferoj kiujn mi havas forgliti super tie por ke ni 1088 01:00:58,120 --> 01:01:00,570 paroli pri tiu specife. 1089 01:01:00,570 --> 01:01:06,050 Sed mi kuraĝigas vin rigardi eble la alia iOS seminario, sed ankaŭ kelkaj 1090 01:01:06,050 --> 01:01:09,290 de la lernilojn rete farantojn multe pli bone priskribi 1091 01:01:09,290 --> 01:01:11,030 la specifa informo. 1092 01:01:11,030 --> 01:01:15,760 >> Sed ni povas vidi paron de aĵoj kiuj estas interesaj el la kodo tie. 1093 01:01:15,760 --> 01:01:17,950 Rimarku ke ni havas se deklaroj. 1094 01:01:17,950 --> 01:01:20,400 Parenteze, unu grava afero pri se deklaroj 1095 01:01:20,400 --> 01:01:24,860 estas ke la krampoj ĉirkaŭ la Bulea esprimo estas laŭvolaj. 1096 01:01:24,860 --> 01:01:30,800 Sed la krispa krampoj ne estas opciaj, negrave kiom malmultaj aŭ multaj linioj de kodo 1097 01:01:30,800 --> 01:01:32,360 vi havas en se aserto. 1098 01:01:32,360 --> 01:01:38,670 Vi ne povas havi se deklaroj sen buklaj krampoj en Swift. 1099 01:01:38,670 --> 01:01:41,000 >> Kaj tio estas, nu, ia stulta. 1100 01:01:41,000 --> 01:01:43,910 Sed estas historiaj kialoj por tio. 1101 01:01:43,910 --> 01:01:46,180 Ĝi estas supozita por savi vin de vi mem. 1102 01:01:46,180 --> 01:01:49,899 Kiel ĉi ekzemple, vi ne povas forigi la krispa krampoj ĉirkaŭ tiu 1103 01:01:49,899 --> 01:01:50,440 se aserto. 1104 01:01:50,440 --> 01:01:52,730 Tiuj estas fakte postulata. 1105 01:01:52,730 --> 01:01:54,480 Do mi kuraĝigas vin rigardu ĉi. 1106 01:01:54,480 --> 01:01:56,230 Sed estas pli konstrui ke mi volas 1107 01:01:56,230 --> 01:02:02,640 montri vin pri Swift ke Estas nova Swift 2.0 komparite 1108 01:02:02,640 --> 01:02:08,460 al malnovaj versioj de Swift, kio estas la jena. 1109 01:02:08,460 --> 01:02:11,620 Vidu kien mi metis ĝin ĉi tie? 1110 01:02:11,620 --> 01:02:16,630 >> Do en ĉi tiu funkcio nomita fetchJSON, tiu funkcio 1111 01:02:16,630 --> 01:02:23,450 estas respondeca tiranta ke JSON file de URL, kiu ĝuste tiel okazas 1112 01:02:23,450 --> 01:02:26,310 ruli en mia CS50 IDE. 1113 01:02:26,310 --> 01:02:28,580 Mi ĵus komencis Apache, metis mia JSON dosiero tie, 1114 01:02:28,580 --> 01:02:32,110 kaj mi plu povos tiam tiri ke datumoj de la interreto uzante 1115 01:02:32,110 --> 01:02:36,430 tiu funkcio kaj ĉi URL, kiu estas provizita per la telefono. 1116 01:02:36,430 --> 01:02:40,490 Ĝi estas provizita per biblioteko kiu uzas kiam 1117 01:02:40,490 --> 01:02:43,140 vi faras iuj IOS app disvolviĝo. 1118 01:02:43,140 --> 01:02:49,690 >> Rimarku tie ke ekzistas tiu nekutima sintaksa konstrukcio nomita korpogardistoj. 1119 01:02:49,690 --> 01:02:53,530 Kaj vere ĉio estas en Swift estas maniero de kontroli 1120 01:02:53,530 --> 01:02:56,870 ke iuj aferoj havas estis renkontita antaŭ vi 1121 01:02:56,870 --> 01:03:00,000 procedi kun la resto de la funkcio. 1122 01:03:00,000 --> 01:03:04,260 Do mi povis havi, uzanta ĉi laŭvola tipo, 1123 01:03:04,260 --> 01:03:10,530 Mi povus esti trovita la URL per kurante ĉi NSURL funkcio 1124 01:03:10,530 --> 01:03:16,640 kaj stokante ke en URL konstanta, kaj tiam kontrolanta 1125 01:03:16,640 --> 01:03:20,820 ĉu URL estis nula, ĉar tuj revenos laŭvola tipo. 1126 01:03:20,820 --> 01:03:25,660 Kaj se ĝi estis nula, tiam mi volus elprinti eraron kaj tiam revenu. 1127 01:03:25,660 --> 01:03:29,970 >> Sed anstataŭe, kion korpogardistoj permesas nin fari estas ke precize tion, 1128 01:03:29,970 --> 01:03:34,550 sed certigi ke oni fakte la kazo ke url 1129 01:03:34,550 --> 01:03:38,020 estis konvene metita fare NSURL. 1130 01:03:38,020 --> 01:03:41,810 Kaj se ĝi estas, tiam saltas super tio, kaj ĝi 1131 01:03:41,810 --> 01:03:46,110 permesos al procedi kun url esti konvene difinita. 1132 01:03:46,110 --> 01:03:48,830 Sed se ĝi estas la kazo, ke url estas ne konvene difinita, 1133 01:03:48,830 --> 01:03:52,550 se tiu funkcio redonas eraron aŭ alian neatendita 1134 01:03:52,550 --> 01:03:58,030 fakte okazas, ĉi korpogardistoj konstrukcio nin permesas tiam eligo ke eraro 1135 01:03:58,030 --> 01:04:00,390 kaj revenu tuj. 1136 01:04:00,390 --> 01:04:00,890 Jes? 1137 01:04:00,890 --> 01:04:04,839 >> Publiko: Do ​​ĝi estas speco de kiel se tiam alia? 1138 01:04:04,839 --> 01:04:07,130 DAN Armendáriz: Estas ia kiel se tiam alian, jes, 1139 01:04:07,130 --> 01:04:14,200 krom ke ĉi url estas tiam difinita por ĉio sube ĉi. 1140 01:04:14,200 --> 01:04:20,420 Se pasas ĉi kuristoj tiam efektive estos plenaj datumoj 1141 01:04:20,420 --> 01:04:29,500 kaj uzebla en la ceteraj fontkodon en via funkcio. 1142 01:04:29,500 --> 01:04:33,790 Do mi suspektas ke vi tuj komencas vidi ĉi korpogardistoj ankaŭ. 1143 01:04:33,790 --> 01:04:36,670 Kaj memoras ke. 1144 01:04:36,670 --> 01:04:46,270 >> Do simple rigardante kelkaj aliaj aferojn, ĉi tie ĉi estas kio, 1145 01:04:46,270 --> 01:04:53,377 ĉu vi opinias, bazita sur kio ni parolis pri antaŭe? 1146 01:04:53,377 --> 01:04:56,650 >> Publiko: Pripensu kuros en la listo? 1147 01:04:56,650 --> 01:04:59,100 >> DAN Armendáriz: Do jen proksime. 1148 01:04:59,100 --> 01:05:02,360 Tiu estas funkcio kiu ni difinanta. 1149 01:05:02,360 --> 01:05:07,240 Kaj ni inputting domadministranto kiel argumento por ĉi tiu funkcio ĉi tie. 1150 01:05:07,240 --> 01:05:09,120 >> Spektantaro: [inaudible] se ne nulaj. 1151 01:05:09,120 --> 01:05:11,470 Do estas en la listo, ĉu ne? 1152 01:05:11,470 --> 01:05:15,450 >> DAN Armendáriz: Se eraro estas ne nulaj, por ke is-- do mi devas rulumi. 1153 01:05:15,450 --> 01:05:18,060 Nu, ni vidu, mi ne povas vere rulumu dekstren tie. 1154 01:05:18,060 --> 01:05:23,161 eraro estas argumento kiu estante pasis al tiu anonima funkcio. 1155 01:05:23,161 --> 01:05:24,410 Jen anonima funkcio. 1156 01:05:24,410 --> 01:05:25,480 Ĝi ne havas nomon. 1157 01:05:25,480 --> 01:05:29,850 Sed ni devas akcepti tiujn tri argumentoj, datumoj, respondo, kaj eraro. 1158 01:05:29,850 --> 01:05:33,590 Kaj tuj revenos malplenon, tial ĝi ne tuj reveni nenion. 1159 01:05:33,590 --> 01:05:37,910 Kaj tiu estas la enhavo de tiu funkcio. 1160 01:05:37,910 --> 01:05:41,961 Kaj tiam ni havas aliron ene ol funkcion al ĉiu el tiuj argumentoj. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Do estas ventego tour de la lingvo. 1163 01:05:48,679 --> 01:05:50,470 Sed mi esperas kun ĉi, espereble kiel vi prenas 1164 01:05:50,470 --> 01:05:54,490 Rigardu kelkajn el la lernilojn specifaj al IOS disvolviĝo kun Swift, 1165 01:05:54,490 --> 01:05:57,481 speciale se vi iros al Apple desarrollador retejo page-- 1166 01:05:57,481 --> 01:05:59,980 ili havas multajn vere bonajn lernilojn akiri vin komencis. 1167 01:05:59,980 --> 01:06:05,010 Sed espereble nur tiun horo de paroli pri la sintakso mem donis 1168 01:06:05,010 --> 01:06:08,760 vin sufiĉe por starti kun tiu. 1169 01:06:08,760 --> 01:06:12,950 >> Ni afiŝos ĉiujn ĉi fonto kodo en la seminario paĝaro 1170 01:06:12,950 --> 01:06:17,800 kiel eble plej baldaŭ, kaj ankaŭ la diapozitivojn tiel vi havos referenco por ĉiuj tiuj. 1171 01:06:17,800 --> 01:06:20,530 Sed bona fortuno kun via projektoj. 1172 01:06:20,530 --> 01:06:23,640 Kaj dankon ĉiuj tre multe por venado. 1173 01:06:23,640 --> 01:06:26,990 >> [Aplaŭdo] 1174 01:06:26,990 --> 01:06:28,026