1 00:00:00,000 --> 00:00:03,332 >> [За възпроизвеждане на музика] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DAN AMRMENDARIZ: Всеки, добре дошли в семинара CS50, 4 00:00:09,590 --> 00:00:11,690 IOS App развитие с Swift. 5 00:00:11,690 --> 00:00:15,690 Аз съм Дан Armendariz, и аз съм учител на компютърните науки тук в Харвард. 6 00:00:15,690 --> 00:00:21,510 >> И следващия час ще бъде вихрушка обиколка на толкова неща 7 00:00:21,510 --> 00:00:25,160 по тази тема, тъй като ние може да се побере. 8 00:00:25,160 --> 00:00:29,170 Аз ще публикуваме всички изходния код че вие ​​ще видите днес онлайн. 9 00:00:29,170 --> 00:00:31,990 Ние може да не бъде в състояние да всъщност разясни всичко 10 00:00:31,990 --> 00:00:34,810 че аз съм, че аз съм ви показва в този час. 11 00:00:34,810 --> 00:00:37,580 Но поне се надяваме чрез коментарите на изходния код, 12 00:00:37,580 --> 00:00:40,830 вие ще бъдете в състояние да се опитам да разбера какво точно се случва за тези неща 13 00:00:40,830 --> 00:00:42,950 че ние съвсем не стигнем до. 14 00:00:42,950 --> 00:00:46,970 >> Като цяло структурата на днешната беседа ще бъде както следва. 15 00:00:46,970 --> 00:00:52,820 Ще започнем от това някои основни синтаксис с езика Swift, 16 00:00:52,820 --> 00:00:56,290 навлиза в някои от по-напредналите синтаксис на Swift език. 17 00:00:56,290 --> 00:00:59,560 Защото езикът е наистина модерен и тя 18 00:00:59,560 --> 00:01:02,110 има много високо ниво функции, неща, които не сме 19 00:01:02,110 --> 00:01:06,600 вижда в C през цялата CS50, или дори някои другите езици 20 00:01:06,600 --> 00:01:09,310 че сме започнали използвате в CS50 като PHP, 21 00:01:09,310 --> 00:01:12,670 така че аз отивам да трябва да се опитаме да въведат и някои теми, които 22 00:01:12,670 --> 00:01:18,580 са свързани с по-високи нива езици че не може да видите в дълбочина в CS50, 23 00:01:18,580 --> 00:01:21,380 но вие ще видите по-късно в компютърни науки класове. 24 00:01:21,380 --> 00:01:25,290 Така че това ще бъде плътно опаковани час. 25 00:01:25,290 --> 00:01:28,897 И моля не се колебайте да ме пусне знам, ако имате някакви въпроси. 26 00:01:28,897 --> 00:01:30,730 Така че, ако проявявате интерес при това развитие 27 00:01:30,730 --> 00:01:34,442 с Swift, или наистина всяко развитие IOS ап, 28 00:01:34,442 --> 00:01:35,900 има няколко изисквания. 29 00:01:35,900 --> 00:01:39,940 На първо място, трябва да бъде с помощта на на Mac, работещ в примерите 30 00:01:39,940 --> 00:01:43,880 че ние ще използваме и днес, сравнително нова версия на OS 31 00:01:43,880 --> 00:01:46,580 X. В този случай, Бягам X 10.5. 32 00:01:46,580 --> 00:01:48,600 Можете да се работи 10.11 ако искате. 33 00:01:48,600 --> 00:01:52,430 Но всичко, което ти започваш да се виж се с участието на Xcode 7 и по-късно, 34 00:01:52,430 --> 00:01:56,271 който има най-новата версия на Суифт, която е Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Това всъщност е доста важна разлика. 36 00:01:58,270 --> 00:02:01,510 Много от синтаксиса има променила доста значително 37 00:02:01,510 --> 00:02:05,890 в някои случаи от Swift 1.0, който бе представен миналата година, 38 00:02:05,890 --> 00:02:08,514 да Swift 2.0, което просто излезе тази есен. 39 00:02:08,514 --> 00:02:09,889 Така че ние ще покажем Swift 2.0. 40 00:02:09,889 --> 00:02:13,020 Много от нещата, които можете да потърсите онлайн 41 00:02:13,020 --> 00:02:18,040 когато се опитвате да получите допълнителна информация за различни неща, 42 00:02:18,040 --> 00:02:20,710 Вие може да искате да се изрично търси за Swift 2 43 00:02:20,710 --> 00:02:24,950 а не просто стар Swift да направи уверите, че получавате синтаксиса вярна. 44 00:02:24,950 --> 00:02:26,920 >> В действителност, това обикновено е вярно. 45 00:02:26,920 --> 00:02:31,210 Има една бърза количество развитие случва в Swift език 46 00:02:31,210 --> 00:02:35,110 откакто Apple го пусна, мисля, какво, това е било малко повече от година 47 00:02:35,110 --> 00:02:36,370 сега. 48 00:02:36,370 --> 00:02:39,080 И нещата са се променили драматично през това време. 49 00:02:39,080 --> 00:02:42,160 И така не бъде осуетено ако, когато търсите около 50 00:02:42,160 --> 00:02:48,310 за теми за Swift или как да постигнете нещо, с помощта на някои примерен код 51 00:02:48,310 --> 00:02:51,210 или нещо, че не действително работят върху Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Уверете се, че търсите специално за тази версия 53 00:02:53,790 --> 00:02:58,690 да се опита да сведе до минимум влиянието на различните версии и тези различни неща. 54 00:02:58,690 --> 00:03:02,470 >> Ще се опитам да посоча само някои неща, които са различни от по-старите версии. 55 00:03:02,470 --> 00:03:03,970 Но това е нещо, което да внимавате. 56 00:03:03,970 --> 00:03:06,770 Това е най-вероятно ще бъде една от най-големите главоболия 57 00:03:06,770 --> 00:03:11,010 че вие ​​ще имате с Swift е намирането Например код, който е по-стар, дори само 58 00:03:11,010 --> 00:03:14,050 от няколко месеца, се опитва да използва то във вашата по-модерен проект. 59 00:03:14,050 --> 00:03:15,430 И тя просто не работи. 60 00:03:15,430 --> 00:03:18,530 Ставаш грешки съставител, синтаксис грешки, всякакви луди неща. 61 00:03:18,530 --> 00:03:21,580 Така че просто бъдете търпеливи че и вие ще се надяваме 62 00:03:21,580 --> 00:03:24,200 имаме доста приятно изживяване с Swift цяло. 63 00:03:24,200 --> 00:03:28,430 >> Сега можете действително join-- и се надявам, ние всъщност все още имат този този year-- 64 00:03:28,430 --> 00:03:30,910 CS 50 на Apple ап развитие на екипа, който 65 00:03:30,910 --> 00:03:34,680 ще ви позволи да инсталирате приложения които създавате на вашите IOS устройства. 66 00:03:34,680 --> 00:03:39,190 Така че да разгледаме този URL, ако ви интересува да направим това. 67 00:03:39,190 --> 00:03:41,450 >> Така само за няколко неща за себе си Swift. 68 00:03:41,450 --> 00:03:43,580 Това е компилиран език. 69 00:03:43,580 --> 00:03:45,870 Но вие ще видите, че някои от функциите, които ние използваме 70 00:03:45,870 --> 00:03:50,650 Оставете го да се използва също и в малко по- като тълкува така, както добре. 71 00:03:50,650 --> 00:03:56,350 >> Много от синтаксиса е заимстван от C. Той е базиран и написан на C. 72 00:03:56,350 --> 00:04:00,400 И така, ние ще видим, че има много на храна за вкъщи 73 00:04:00,400 --> 00:04:04,450 от съществуващия си знания от C, че можем порт за Swift. 74 00:04:04,450 --> 00:04:07,290 >> Но има неща, които да го направи много по-различна от C. 75 00:04:07,290 --> 00:04:08,860 Тя е много силно написали. 76 00:04:08,860 --> 00:04:10,380 Има автоматично управление на паметта. 77 00:04:10,380 --> 00:04:13,170 Ти няма да се наложи да използвате изчистване или безплатно навсякъде. 78 00:04:13,170 --> 00:04:15,110 Той е проектиран за всеобщност. 79 00:04:15,110 --> 00:04:19,480 Така че, с други думи, можете да го използвате в всички видове контексти, от Apple Watch 80 00:04:19,480 --> 00:04:26,290 да iPhone по целия път до OS X, и дори някои сървъри, дори някои скриптове. 81 00:04:26,290 --> 00:04:28,400 Но ще видим, че подкрепа за скриптове 82 00:04:28,400 --> 00:04:31,360 не е съвсем там, все още като тя е и на други езици. 83 00:04:31,360 --> 00:04:34,930 Така че най-вероятно ще бъде с помощта на този изключително за развитие 84 00:04:34,930 --> 00:04:37,060 на вашия Mac или вашия iPhone. 85 00:04:37,060 --> 00:04:40,150 >> И това има много съвременни функции. 86 00:04:40,150 --> 00:04:43,380 И много от тези неща са неща, които ние ще се опитаме да се справи и днес, 87 00:04:43,380 --> 00:04:47,590 но също така и нашите теми, които честно казано, можем да посвети цялото курсове. 88 00:04:47,590 --> 00:04:50,140 В действителност, CS 51, което е предложена следващия семестър, 89 00:04:50,140 --> 00:04:53,990 фокусира много по тези теми които са описани по-долу. 90 00:04:53,990 --> 00:04:56,781 Така че можете да прекарате целия семестър разбирането на тези неща. 91 00:04:56,781 --> 00:04:58,530 Но ние ще се опитаме за да получите чрез тях 92 00:04:58,530 --> 00:05:00,800 най-малко достатъчно, че сте може да разбере какво е 93 00:05:00,800 --> 00:05:03,700 случва, когато търсите при Swift програма 94 00:05:03,700 --> 00:05:07,310 и да бъде в състояние да проникна си път през него на окончателен проект. 95 00:05:07,310 --> 00:05:10,780 >> Сега един от най-добрите начини, които можете да получите допълнителна информация по този 96 00:05:10,780 --> 00:05:14,700 е казано просто чрез Apple, при условие документация за Swift. 97 00:05:14,700 --> 00:05:16,930 Има много неща, на APIs които са на разположение. 98 00:05:16,930 --> 00:05:21,170 И това е добра начална точка за вас да се търсят специфични неща, които ви 99 00:05:21,170 --> 00:05:23,020 искам да правя с API, включваща IOS. 100 00:05:23,020 --> 00:05:26,350 Ако искате да работите с камерата Например, можете да започнете да търсите тук, 101 00:05:26,350 --> 00:05:32,540 и също така да използвате Google и Stack Overflow както обикновено. 102 00:05:32,540 --> 00:05:36,670 >> Всякакви въпроси за тази преди да скочи право? 103 00:05:36,670 --> 00:05:37,880 Всичко е наред. 104 00:05:37,880 --> 00:05:38,700 Нека да продължим. 105 00:05:38,700 --> 00:05:42,620 >> Така че на първо място, аз имам брой примерни файлове. 106 00:05:42,620 --> 00:05:46,040 И аз ще се опитам да се оттегли чрез тях относително бързо. 107 00:05:46,040 --> 00:05:49,190 Това е Hello World файл за Swift. 108 00:05:49,190 --> 00:05:51,050 Това е много проста. 109 00:05:51,050 --> 00:05:54,360 Има начин още коментари отколкото са действително код. 110 00:05:54,360 --> 00:05:57,100 Забележете действителният код е най- на самото дъно на линия 14. 111 00:05:57,100 --> 00:05:57,980 Той казва печат. 112 00:05:57,980 --> 00:05:59,820 И след това е извикване на функция. 113 00:05:59,820 --> 00:06:03,010 Ние сме преминаване в нея на низ, наречен Hello cs50. 114 00:06:03,010 --> 00:06:04,750 Забележете, че няма точка и запетая. 115 00:06:04,750 --> 00:06:07,010 Забележете, че няма инт главната. 116 00:06:07,010 --> 00:06:10,392 Има никой от cruft че имахме с C. 117 00:06:10,392 --> 00:06:15,020 Когато ние сме с помощта Swift по този начин, който е просто написани на текстов файл 118 00:06:15,020 --> 00:06:18,340 и се съхраняват на компютъра ми, а след това Мога да го компилирате и да го ползвате. 119 00:06:18,340 --> 00:06:20,920 >> Забележете, че тук съм не използвате CS50 IDE. 120 00:06:20,920 --> 00:06:24,460 Това предполага, че аз съм използвате, и че аз съм на OS X, 121 00:06:24,460 --> 00:06:27,870 и че съм Xcode вече е инсталиран на тази машина, за да може това 122 00:06:27,870 --> 00:06:29,080 да всъщност функция. 123 00:06:29,080 --> 00:06:33,349 Но това е само един нормален текстов файл че тогава можем да съставят и редактиране. 124 00:06:33,349 --> 00:06:34,890 Така че нека да видим как това всъщност работи. 125 00:06:34,890 --> 00:06:37,430 Ами ако искам да го компилирам? 126 00:06:37,430 --> 00:06:40,450 swiftc 1.swift. 127 00:06:40,450 --> 00:06:42,960 След миг-два, то ще видите, че ние имаме сега 128 00:06:42,960 --> 00:06:45,360 съставила това в един файл, наречен 1. 129 00:06:45,360 --> 00:06:51,090 И сега ние сме отпечатан нашата CS50, нашата Hello World заявление скоро. 130 00:06:51,090 --> 00:06:54,690 >> Забележете още нещо като добре е, че по подразбиране, 131 00:06:54,690 --> 00:07:00,090 ние не трябва да вход а / п, за да отпечатате нов ред. 132 00:07:00,090 --> 00:07:05,315 По подразбиране, функцията за печат в Swift ще отпечата нова линия за вас. 133 00:07:05,315 --> 00:07:09,284 Можете да мине незадължителен допълнителен параметър, за да го кажа, да не го правят. 134 00:07:09,284 --> 00:07:10,950 Но Google за повече информация по този въпрос. 135 00:07:10,950 --> 00:07:13,450 По подразбиране, че ще направи линията печат. 136 00:07:13,450 --> 00:07:16,420 >> Добре, така че нека да преминем тогава към някои други неща. 137 00:07:16,420 --> 00:07:18,620 И така, как всъщност можем да дефинирате променливи? 138 00:07:18,620 --> 00:07:21,960 Ние можем да направим това е като се използва един от двата метода. 139 00:07:21,960 --> 00:07:26,122 И този, който аз искам да ви кажа, за първи път е това определение нека. 140 00:07:26,122 --> 00:07:27,830 И това е важно защото ефективно 141 00:07:27,830 --> 00:07:30,240 това, което правим, е определяне на постоянна. 142 00:07:30,240 --> 00:07:34,010 Ние ще създадем променлива, или по-скоро постоянно нарече, 143 00:07:34,010 --> 00:07:38,200 предостави, за да го някои data-- в този случай, низа Дан. 144 00:07:38,200 --> 00:07:40,630 Но с помощта на тази нека ключова дума, ние казваме 145 00:07:40,630 --> 00:07:43,860 че това variable-- или отново constant-- нарича 146 00:07:43,860 --> 00:07:46,220 име никога няма да се промени. 147 00:07:46,220 --> 00:07:50,120 Това ще бъде неизменна през целия продължителността на тази програма 148 00:07:50,120 --> 00:07:53,100 или по време на продължителност на контекста 149 00:07:53,100 --> 00:07:55,390 че тази променлива е на разположение. 150 00:07:55,390 --> 00:08:00,096 >> Това е наистина важно, че когато Имате ли някаква информация, която не е 151 00:08:00,096 --> 00:08:02,970 няма да се промени в програмата си, и ще видите различни примери 152 00:08:02,970 --> 00:08:06,790 за това, кога искаме да използваме нека спрямо друга синтаксис, 153 00:08:06,790 --> 00:08:11,040 това е важно, че вие ​​ползване нека когато това е възможно, тъй като тази уведоми 154 00:08:11,040 --> 00:08:13,740 езика, че е Няма да бъде променено, 155 00:08:13,740 --> 00:08:16,590 и действително може да изпълнява много оптимизации 156 00:08:16,590 --> 00:08:19,560 за подобряване на скоростта и безопасността на вашата програма. 157 00:08:19,560 --> 00:08:24,480 И с безопасността, не мога да кажа, нека тя катастрофа с луди грешки 158 00:08:24,480 --> 00:08:27,910 за да бъдем свикнали да виждаме в C. 159 00:08:27,910 --> 00:08:32,460 >> Тогава можем да използваме низ интерполация за капсулиране на това в рамките на една струна. 160 00:08:32,460 --> 00:08:35,200 Така че ние можем да видим в тази принт линия, отпечатате здравей, 161 00:08:35,200 --> 00:08:38,950 и след това да се използва обратно наклонена черта отворени parens, и след това името на променливата ми, 162 00:08:38,950 --> 00:08:41,809 В този случай константа, затворете скобите. 163 00:08:41,809 --> 00:08:46,400 Аз съм същество след пускането на съдържанието на тази променлива, наречена на името 164 00:08:46,400 --> 00:08:50,240 вътрешността на низа и след това отпечатване резултатът там. 165 00:08:50,240 --> 00:08:54,070 >> Има една друга промяна към файла което е, че имам, на самия връх, 166 00:08:54,070 --> 00:08:57,340 пробва вертеп линия, която основно само уточнява, 167 00:08:57,340 --> 00:09:00,180 че искам да използвате Swift преводач, който 168 00:09:00,180 --> 00:09:04,190 означава, че аз вече не трябва да събиране на тази конкретна програма. 169 00:09:04,190 --> 00:09:06,567 Аз просто да го стартирате като свой собствен скрипт. 170 00:09:06,567 --> 00:09:09,400 Но това е, в този случай, зад кулисите се компилират и след това 171 00:09:09,400 --> 00:09:10,030 той да работи. 172 00:09:10,030 --> 00:09:13,540 Това е просто невидима за нас. 173 00:09:13,540 --> 00:09:15,880 >> Добре, така че нека да продължим. 174 00:09:15,880 --> 00:09:19,650 Така че там е малко на измама че просто се е случило преди това. 175 00:09:19,650 --> 00:09:23,230 Аз ви показах, че съм би могъл да определи постоянна. 176 00:09:23,230 --> 00:09:25,490 И аз може да предостави някои данни, за да го направя. 177 00:09:25,490 --> 00:09:29,240 Но в този случай, забележите, че не го направих всъщност определя вида на данните 178 00:09:29,240 --> 00:09:29,820 че е. 179 00:09:29,820 --> 00:09:32,780 И това е така, защото компилатор, Swift може 180 00:09:32,780 --> 00:09:36,910 заключим, вида на данните, само въз основа на данните, които сложих в нея. 181 00:09:36,910 --> 00:09:41,760 Защото знае, че чрез оценка на това променлива точно тук, на това право на данни 182 00:09:41,760 --> 00:09:43,370 тук, той знае, че тя е низ. 183 00:09:43,370 --> 00:09:48,690 И така, тази постоянна име следователно е ще бъде низ, както добре. 184 00:09:48,690 --> 00:09:52,730 >> Но ние също така може да бъде изрично за вида, който е 185 00:09:52,730 --> 00:09:55,790 ние ще се използват за константи или променливи 186 00:09:55,790 --> 00:10:01,590 с помощта на този синтаксис instead-- нека името на дебелото черво String равнява 187 00:10:01,590 --> 00:10:05,530 Дан, който в този случай означава, че ние сме ще определи постоянна нарече. 188 00:10:05,530 --> 00:10:07,150 Това ще бъде от тип String. 189 00:10:07,150 --> 00:10:10,550 И стойността ще бъде Дан. 190 00:10:10,550 --> 00:10:12,550 Сега по друг начин, че ние можем да създадем variables-- 191 00:10:12,550 --> 00:10:15,549 и това са непостоянен променливи, които означава, че ние сме в действителност, ще 192 00:10:15,549 --> 00:10:19,670 да променят съдържанието им по някое време в продължителността на контекста 193 00:10:19,670 --> 00:10:23,890 че тази променлива се defined-- ние използвате Var ключова дума вместо нека. 194 00:10:23,890 --> 00:10:27,400 Но отново, по подразбиране, освен ако не знаете че трябва да се манипулира, че данните, 195 00:10:27,400 --> 00:10:30,510 се опитват да използват нека за подобрения в производителността. 196 00:10:30,510 --> 00:10:33,740 >> В този случай, аз мога след това определя вида на данните 197 00:10:33,740 --> 00:10:37,650 че ние очакваме да бъде вътре в тази нова променлива, наречена етикет. 198 00:10:37,650 --> 00:10:38,800 Това ще бъде низ. 199 00:10:38,800 --> 00:10:43,030 И ние ще се тогава свързвам две струни заедно, низа здравей, 200 00:10:43,030 --> 00:10:48,070 и низа, представлявана от променлива, или по-скоро постоянно име. 201 00:10:48,070 --> 00:10:50,660 >> Така че това е хубаво, защото това е малко PHP като това, че ние 202 00:10:50,660 --> 00:10:52,250 имат много лесно съединяване на низове. 203 00:10:52,250 --> 00:10:56,350 Ние не трябва да автоматично използвате всякакъв вид на управление на паметта 204 00:10:56,350 --> 00:11:00,580 за увеличаване на размера и правим всякакъв вид на забавни неща там. 205 00:11:00,580 --> 00:11:05,040 Това работи, тъй като ние всъщност ще очакваме. 206 00:11:05,040 --> 00:11:09,370 >> Добре, всички въпроси за тази? 207 00:11:09,370 --> 00:11:12,520 >> Сега друга причина, че имаме нужда имате възможност 208 00:11:12,520 --> 00:11:15,490 за да може да се определи какво Тип на променливи данни са 209 00:11:15,490 --> 00:11:18,170 е така, защото понякога ние не правим Искам да се инициализира променлива 210 00:11:18,170 --> 00:11:21,080 с някои данни в точка на дефиниция. 211 00:11:21,080 --> 00:11:23,500 Така че в този случай, да речем, че искам да започна въвеждане 212 00:11:23,500 --> 00:11:25,040 някои класове в един клас книга. 213 00:11:25,040 --> 00:11:27,530 Ами аз знам, че един от променливи, които искам да бъда 214 00:11:27,530 --> 00:11:30,280 ще бъде непостоянен клас. 215 00:11:30,280 --> 00:11:33,010 И ние също знаем, че сме искам тя да бъде цяло число. 216 00:11:33,010 --> 00:11:36,030 Но може би все още не правим имат тази степен на разположение. 217 00:11:36,030 --> 00:11:39,570 >> В Swift, което трябва да определи вида на данните 218 00:11:39,570 --> 00:11:44,000 който е свързан с променлива или постоянна нека 219 00:11:44,000 --> 00:11:47,840 Преди да можете да всъщност използвате тази променлива. 220 00:11:47,840 --> 00:11:51,170 Тъй като това е силно написали, което трябва да се сдружават тип 221 00:11:51,170 --> 00:11:52,890 с тези променливи. 222 00:11:52,890 --> 00:11:56,120 >> Така че в този случай, ако аз не бях правилно инициализира първата с някаква стойност, 223 00:11:56,120 --> 00:12:00,520 тогава аз трябва да кажа какво Swift Очаквам типа на данните, за да бъде. 224 00:12:00,520 --> 00:12:02,650 И то се случва да остане че същия тип данни 225 00:12:02,650 --> 00:12:05,780 в цялата история на тази програма. 226 00:12:05,780 --> 00:12:10,050 >> Сега може да се изкушите, веднага след като Аз създадох този клас променлива 227 00:12:10,050 --> 00:12:13,530 и го прави при условие, число от 100, сега, ако аз 228 00:12:13,530 --> 00:12:18,540 Искам да опитам да свързвам низ с това число, 229 00:12:18,540 --> 00:12:21,610 може да се изкуши да продължават да използват този оператор на съединяване на низове 230 00:12:21,610 --> 00:12:24,500 както направихме само няколко реда преди. 231 00:12:24,500 --> 00:12:26,460 Но за съжаление, това всъщност няма да 232 00:12:26,460 --> 00:12:29,270 работи, защото вие сте същество, изпълняващо 233 00:12:29,270 --> 00:12:32,380 операция на два различни вида. 234 00:12:32,380 --> 00:12:36,856 >> Сега това е много по-различен от другите езици като PHP, които са наистина 235 00:12:36,856 --> 00:12:38,480 loosey настръхнал с техния вид видове. 236 00:12:38,480 --> 00:12:40,030 Те просто искали, да, каквото и да, не ми пука. 237 00:12:40,030 --> 00:12:42,710 Само ми дай един вид, и може би ще направи правилното нещо. 238 00:12:42,710 --> 00:12:46,060 >> В този случай, Swift е изключително стриктно за видовете 239 00:12:46,060 --> 00:12:47,350 които се занимават с теб. 240 00:12:47,350 --> 00:12:50,700 Този оператор сумиране или конкатенация оператор 241 00:12:50,700 --> 00:12:54,400 същество има няколко различни възможни варианти. 242 00:12:54,400 --> 00:12:56,970 Можете да направите обобщение с цели числа, или сте 243 00:12:56,970 --> 00:13:00,870 може да направи съединяване на низове, и може би някои други неща, както добре. 244 00:13:00,870 --> 00:13:05,550 Но ако този оператор не признава което е от двете страни на това, 245 00:13:05,550 --> 00:13:10,452 или а комбинацията от тези, два вида, не е това, което е очаквал, 246 00:13:10,452 --> 00:13:11,910 След това ще доведе до провал. 247 00:13:11,910 --> 00:13:16,690 >> Така че в този случай, какво означава това да има низ плюс цяло число? 248 00:13:16,690 --> 00:13:18,880 Ами в контекста на това, ние вероятно ще пожелаете 249 00:13:18,880 --> 00:13:21,990 да се направи операция за съединяване на низове. 250 00:13:21,990 --> 00:13:26,420 Но, разбира се на компютъра не разполага с такива контекст. 251 00:13:26,420 --> 00:13:29,950 И така, ние трябва да се осигури допълнителна информация 252 00:13:29,950 --> 00:13:32,390 да се остави да знам какво е е, че искаме да направим. 253 00:13:32,390 --> 00:13:36,860 >> С други думи, фактът че Swift е силно въведен 254 00:13:36,860 --> 00:13:39,520 означава, че трябва да се направи малко допълнителна работа 255 00:13:39,520 --> 00:13:42,100 за да го да експлоатира начин, който бихте искали. 256 00:13:42,100 --> 00:13:43,710 Но тъй като в резултат на това е по-безопасно. 257 00:13:43,710 --> 00:13:46,290 И след като имате вземе се вземат предвид тези видове, 258 00:13:46,290 --> 00:13:49,300 нещата просто откровено започват да работи доста добре. 259 00:13:49,300 --> 00:13:52,520 >> Така че в този случай, ние след това ще извършва съединяване на низове 260 00:13:52,520 --> 00:13:56,040 като изрично леене цялото число в низ 261 00:13:56,040 --> 00:13:58,490 чрез обвиване в тази капитал S String функция, 262 00:13:58,490 --> 00:14:03,510 и след това с помощта на съединяване на низове оператор да модифицираме променлива етикет, 263 00:14:03,510 --> 00:14:06,280 и след това да го отпечатате. 264 00:14:06,280 --> 00:14:08,420 >> Дотук добре? 265 00:14:08,420 --> 00:14:12,020 Добре, нека да преминем нататък. 266 00:14:12,020 --> 00:14:16,300 >> Сега има голямо разнообразие на данни видове, които можем да използваме в Swift. 267 00:14:16,300 --> 00:14:21,620 Както сте свикнали, ние можем да създадем непостоянен масив. 268 00:14:21,620 --> 00:14:26,140 И това само може масив съдържа само един вид. 269 00:14:26,140 --> 00:14:30,360 >> Така че в този случай, ние ще създадем непостоянен масиви от числа, които 270 00:14:30,360 --> 00:14:34,800 ние ще се обадя класове, а ние ще бъдем в състояние да съхранява, че в този площад скоба 271 00:14:34,800 --> 00:14:38,650 формат като сте свикнал в различни други езици. 272 00:14:38,650 --> 00:14:41,150 Но забележете, че тук сме дефиниране на няколко неща. 273 00:14:41,150 --> 00:14:45,350 класове е непостоянен variable-- ние не използваме нека ключова дума. 274 00:14:45,350 --> 00:14:49,620 Това значи, че тогава можем да модифицирате Съдържанието на този масив. 275 00:14:49,620 --> 00:14:53,420 Тя е от тип Int Array, и ние можем да кажем, че 276 00:14:53,420 --> 00:14:56,260 въз основа на тези квадратни скоби тук. 277 00:14:56,260 --> 00:14:58,930 >> Сега един от най-хубавите неща за това е, че 278 00:14:58,930 --> 00:15:02,310 имат достъп до много Допълнителна информация 279 00:15:02,310 --> 00:15:07,110 около масива само с помощта някои прости нотацията с точка. 280 00:15:07,110 --> 00:15:10,500 Така например, grades.count предвижда да ни 281 00:15:10,500 --> 00:15:14,820 броя на елементите, които съществуват в тази масив, който след това ние можем да получите достъп до доста 282 00:15:14,820 --> 00:15:19,090 лесно просто да се използват, че нотацията с точка. 283 00:15:19,090 --> 00:15:21,830 >> Ако искате да добавите допълнителна елементи на този масив, 284 00:15:21,830 --> 00:15:27,220 не можеш да направиш стила PHP където можете просто да определя изрично, 285 00:15:27,220 --> 00:15:30,910 в даден индекс, някои стойност който искате да вмъкнете. 286 00:15:30,910 --> 00:15:37,210 Вместо това, използвайте атрибута Метод от тип масив 287 00:15:37,210 --> 00:15:40,920 да прилага този артикул, 95, към този списък. 288 00:15:40,920 --> 00:15:45,990 >> Така че сега този масив има следното contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 И сега ние сме приложена 95 и това. 290 00:15:49,270 --> 00:15:51,830 >> Има и други начини можем да добавим неща. 291 00:15:51,830 --> 00:15:55,030 Всъщност можете да използвате оператор на сумиране, 292 00:15:55,030 --> 00:15:59,200 които ще се тълкува като операция масив прикрепя. 293 00:15:59,200 --> 00:16:04,680 А след това можете да добавите друг масив, чието съдържание са 70 и 80, 294 00:16:04,680 --> 00:16:05,560 на този масив. 295 00:16:05,560 --> 00:16:08,250 Така че сега ние имаме съдържанието в тази променлива 296 00:16:08,250 --> 00:16:17,220 grades-- 100, 0, 90, 85, 95, 70 и 80. 297 00:16:17,220 --> 00:16:21,850 Това е само една хубава малка синтактична захар, която Swift осигурява за нас. 298 00:16:21,850 --> 00:16:23,850 >> Така че, ако искаме да обобщим на класове, ние сме може би 299 00:16:23,850 --> 00:16:27,340 ще искате да превъртите над всеки елемент в този цикъл. 300 00:16:27,340 --> 00:16:32,150 И ние нямаме, в Swift, понятието на линия за, както бихте очаквали. 301 00:16:32,150 --> 00:16:35,350 Но начина, по който посочва диапазон е малко по-различен. 302 00:16:35,350 --> 00:16:37,790 Така че в този случай, за да обобщим всичко, ние ще 303 00:16:37,790 --> 00:16:40,650 ще създаде временна променлива, наречена сума, за да можем 304 00:16:40,650 --> 00:16:42,580 да се запази този брой. 305 00:16:42,580 --> 00:16:44,430 >> И забележи ни за контур строителство тук. 306 00:16:44,430 --> 00:16:46,820 За индекс в 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Така че тази конструкция, 0 .. 00:17:01,860 казвайки, че ние ще създадем набор от числа от 0 до 310 00:17:01,860 --> 00:17:05,750 да, но с изключение grades.count. 311 00:17:05,750 --> 00:17:09,577 Така че това ще бъде 0, 1, 2, 3, 4, 5, докато мнозина обаче един 312 00:17:09,577 --> 00:17:10,410 преди grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Така че това е по-различно от това как ние обикновено ще използва за вериги 314 00:17:14,160 --> 00:17:18,569 където ще има някакъв индекс променлива, тя равно на 0 определя на първо място, 315 00:17:18,569 --> 00:17:25,480 и след това да се интегрират, че до известна стойност по-малко от количеството на елементите 316 00:17:25,480 --> 00:17:27,140 че в масив. 317 00:17:27,140 --> 00:17:29,820 >> Така че там е модификация на това, всъщност, 318 00:17:29,820 --> 00:17:35,010 което ни позволява да много лесно зададете различни видове вериги. 319 00:17:35,010 --> 00:17:40,570 Ако промените този диапазон, за да три точки, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 това представлява обхвата 0 да grades.count инклузив, 321 00:17:45,120 --> 00:17:49,260 което означава, че този номер е също След това са включени в този диапазон. 322 00:17:49,260 --> 00:17:52,110 >> Но това е много удобен за тези точните неща, 323 00:17:52,110 --> 00:17:54,590 когато трябва да се извърши повторения над линия 324 00:17:54,590 --> 00:17:59,630 защото тези индекси са нула индексирани, както видяхме и на други езици 325 00:17:59,630 --> 00:18:02,360 както добре. 326 00:18:02,360 --> 00:18:05,210 Всякакви въпроси за тази за цикъл? 327 00:18:05,210 --> 00:18:10,660 >> Така че има косвена дефиниция на този индекс променлива, 328 00:18:10,660 --> 00:18:14,350 чиято стойност започва при 0, и продължава на всеки цикъл на итерация 329 00:18:14,350 --> 00:18:17,950 да се увеличи с 1, докато една точка която е равна на grades.count, 330 00:18:17,950 --> 00:18:20,380 в този момент, цикълът абортира. 331 00:18:20,380 --> 00:18:23,730 >> Забележете, че в нашия низ интерполация тук, 332 00:18:23,730 --> 00:18:26,910 всъщност ние може да изпълнява някои прости манипулации на тези ценности. 333 00:18:26,910 --> 00:18:31,230 Така индекс плюс 1 действително ще извърши сумиране на тази стойност 334 00:18:31,230 --> 00:18:34,780 защото е индекс, в този случай, цяло число. 335 00:18:34,780 --> 00:18:37,810 И в този момент, тя ще след това се превръща в низ 336 00:18:37,810 --> 00:18:42,230 и интерполира в този низ тук, и отпечатва както бихме очаквали. , 337 00:18:42,230 --> 00:18:44,520 >> И хубавото около масивите тук е 338 00:18:44,520 --> 00:18:50,730 че ние също са в състояние да имат Извличат се стойности и определяне на стойностите 339 00:18:50,730 --> 00:18:54,080 използване на квадратен скоба нотация като сме виждали на други езици, както добре. 340 00:18:54,080 --> 00:18:57,130 341 00:18:57,130 --> 00:19:01,030 >> Добре, така че от тук, ние сега изчисли нашия сбор от всички наши класове. 342 00:19:01,030 --> 00:19:02,780 Сега нещо на следващия логична стъпка би била 343 00:19:02,780 --> 00:19:07,580 да се направи операция по разделяне, за да намерите от средната стойност на тези класове. 344 00:19:07,580 --> 00:19:10,150 Но нещо важно тук се случва, което 345 00:19:10,150 --> 00:19:15,020 е, че тази сума може би е цяло число. 346 00:19:15,020 --> 00:19:18,020 Но ние трябва да изпълнява някои сортиране на двойното деление. 347 00:19:18,020 --> 00:19:20,600 И това ще бъде изключително важно, когато 348 00:19:20,600 --> 00:19:24,140 ние искаме да изпълните тази операция, защото това, което казваме 349 00:19:24,140 --> 00:19:28,430 е, че ние трябва да всъщност извършва разделяне на две двойки. 350 00:19:28,430 --> 00:19:31,370 И отново, защото Swift е много силно написали, 351 00:19:31,370 --> 00:19:36,760 ние трябва изрично да зададете всички от пратки на двойки, преди да можем действително 352 00:19:36,760 --> 00:19:38,300 изпълнява тази операция. 353 00:19:38,300 --> 00:19:40,550 >> Така че, за да можем да изпълнява двойна разделение, 354 00:19:40,550 --> 00:19:43,730 това не е достатъчно само за една на тези елементи, за да бъде двойно. 355 00:19:43,730 --> 00:19:46,400 Двете от тях трябва да бъде двойно, за да може бързо 356 00:19:46,400 --> 00:19:50,860 за да сте сигурни, че това е това, което искаме да направим. 357 00:19:50,860 --> 00:19:54,360 Така че ние ще изрично typecast сумата, която сме изчислена по-горе 358 00:19:54,360 --> 00:19:58,970 и броят на степените на двойки, и След извършване на тази операция и магазин 359 00:19:58,970 --> 00:20:02,390 че в тази нова променлива, или по-скоро тази нова постоянна нарича средна, 360 00:20:02,390 --> 00:20:06,810 което ще има какъв тип, можете да си представите? 361 00:20:06,810 --> 00:20:07,587 Двойна, да. 362 00:20:07,587 --> 00:20:09,420 Така че в този случай, ние не е нужно да я укажете 363 00:20:09,420 --> 00:20:13,450 защото може да се изведе от операция какъв тип средно данни 364 00:20:13,450 --> 00:20:14,730 ще бъде. 365 00:20:14,730 --> 00:20:19,025 И Swift обикновено е доста добър за да може да се направи извод, видовете. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Искате ли да видите това тичам, или мога да продължиш напред? 368 00:20:24,200 --> 00:20:25,640 Искам да продължава напред. 369 00:20:25,640 --> 00:20:28,130 Всякакви въпроси относно някой от това? 370 00:20:28,130 --> 00:20:28,630 Страхотен. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Сега ние ще започнем да стигнем до добрите stuff-- функциите, определящи 373 00:20:35,010 --> 00:20:39,090 и няколко други видове, които са уникални за Swift, че не трябва 374 00:20:39,090 --> 00:20:41,620 виждал и на други езици до този момент, 375 00:20:41,620 --> 00:20:46,290 но те се намират в друга езици, които може да намерите по-късно. 376 00:20:46,290 --> 00:20:48,210 Така че първото, ако искате за определяне на функция, 377 00:20:48,210 --> 00:20:52,170 можете да го определите с фънки дума функция, и след това името на функцията, 378 00:20:52,170 --> 00:20:56,710 и след това в скоби, аргументите който искате тази функция, за да приеме. 379 00:20:56,710 --> 00:21:00,280 Аргументите трябва също specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 трябва също така да се определи видът на данните, които те са, освен ако не може да се заключи. 381 00:21:05,010 --> 00:21:07,500 И ние ще видим, че малко по- протест в съвсем малко. 382 00:21:07,500 --> 00:21:09,920 >> Така че в този случай имаме функция, наречена printGradeCount. 383 00:21:09,920 --> 00:21:12,840 Отиваме да приеме variable-- или по-скоро в този случай, 384 00:21:12,840 --> 00:21:14,450 а constant-- нарича gradebook. 385 00:21:14,450 --> 00:21:18,517 И това ще бъде на Типове масив от цели числа. 386 00:21:18,517 --> 00:21:20,600 Сега има нещо това е наистина важно тук 387 00:21:20,600 --> 00:21:21,849 че аз искам да разбереш. 388 00:21:21,849 --> 00:21:27,560 Това е, че по подразбиране, тези аргументи които са входове към тази функция са 389 00:21:27,560 --> 00:21:34,380 определено с имплицитен нека дума, което означава, че не мога да променя това 390 00:21:34,380 --> 00:21:39,850 gradebook променлива тук. 391 00:21:39,850 --> 00:21:43,360 И това нещо има смисъл, защото сте преминаване данни инча 392 00:21:43,360 --> 00:21:45,860 И вие може би не го искат да бъде променено от под теб. 393 00:21:45,860 --> 00:21:50,800 Възможно е да се споменава изрично че това е променлива с удар 394 00:21:50,800 --> 00:21:52,070 VaR, ключовата дума тук. 395 00:21:52,070 --> 00:21:56,832 Но това е нещо, за което, че сме забелязали хора са направили в миналото 396 00:21:56,832 --> 00:21:59,790 е, че те се приеме, че то се случва да бъде променлива, когато в действителност, 397 00:21:59,790 --> 00:22:02,640 е константа. 398 00:22:02,640 --> 00:22:07,340 >> Добре, така че тук след това, в този случай, ние не се уточнява всякакъв вид връщане. 399 00:22:07,340 --> 00:22:09,460 Ние ще ви покажем как да се направи че в един момент. 400 00:22:09,460 --> 00:22:12,340 Но забележете, че тук имаме само един прост, ако състояние. 401 00:22:12,340 --> 00:22:14,560 Ако е gradebook празна, което в този случай 402 00:22:14,560 --> 00:22:19,310 е само имуществото на това число масив, тогава ние разпечатате нещо. 403 00:22:19,310 --> 00:22:23,100 В противен случай ние правим нещо друго. 404 00:22:23,100 --> 00:22:25,000 >> Доста ясно досега мисля. 405 00:22:25,000 --> 00:22:27,960 Но ме спре, ако имате някакви въпроси. 406 00:22:27,960 --> 00:22:33,350 >> Сега тази функция, Средно, също взема някои аргументи, или по-скоро един аргумент, 407 00:22:33,350 --> 00:22:37,507 която е gradebook и този път ще се върне двойно тип. 408 00:22:37,507 --> 00:22:39,340 Тъй като това е изчислителна средното и това е 409 00:22:39,340 --> 00:22:45,010 ще се върне, че всъщност изчислената средна до линията на викащия. 410 00:22:45,010 --> 00:22:50,070 >> В този случай, ние се уточни Тип върне след една стрела. 411 00:22:50,070 --> 00:22:53,260 И това може да се почувства вид странно на първо време. 412 00:22:53,260 --> 00:22:55,610 Вие сте свикнал до определяне на възвръщаемостта 413 00:22:55,610 --> 00:22:57,720 Типове пред името на функцията. 414 00:22:57,720 --> 00:23:00,310 Но ако мислите, че на този от гледна точка на математиката, 415 00:23:00,310 --> 00:23:03,320 като, когато имате математика които определят функция, 416 00:23:03,320 --> 00:23:06,807 имате функция с някои входове, и тя произвежда изход. 417 00:23:06,807 --> 00:23:08,890 И това е точно това, което това е трябвало да се имитира. 418 00:23:08,890 --> 00:23:12,460 А има и няколко други езици които имат подобен синтаксис, както и, 419 00:23:12,460 --> 00:23:15,674 но най-вероятно никой, който които сте виждали в CS50. 420 00:23:15,674 --> 00:23:17,090 Но все още не се бърка с него. 421 00:23:17,090 --> 00:23:21,650 Стрелката означава това, което се случва да бъдат върнати в този случай. 422 00:23:21,650 --> 00:23:23,650 ОК, така че как ще да се изчисли тази средна? 423 00:23:23,650 --> 00:23:25,649 Е, ако gradebook е празна, и тогава ние сме 424 00:23:25,649 --> 00:23:30,731 ще се върне 0, което може би разумен начин за лечение на това. 425 00:23:30,731 --> 00:23:32,980 Аз не знам, нека да дойде върнем към това в малко. 426 00:23:32,980 --> 00:23:34,688 Това не може в действителност да бъде разумен начин 427 00:23:34,688 --> 00:23:38,310 да се изчисли средна, ако имаме празен gradebook. 428 00:23:38,310 --> 00:23:41,260 >> Тогава ние просто ще изпълнява нашата сумиране. 429 00:23:41,260 --> 00:23:43,900 Забележете, че тук ние всъщност има заместник версия на 430 00:23:43,900 --> 00:23:49,190 за електрическа верига, която ни позволява да превъртите над всеки един елемент в масив 431 00:23:49,190 --> 00:23:53,630 и постави всеки елемент в своя собствена променлива. 432 00:23:53,630 --> 00:23:56,200 Чрез определяне на клас в gradebook, това, което казваме 433 00:23:56,200 --> 00:24:00,560 е, че ние ще се имплицитно създаване на нов постоянен нарича 434 00:24:00,560 --> 00:24:05,180 клас, който ще представлява всяка уникална позиция в gradebook 435 00:24:05,180 --> 00:24:06,769 всеки път, че за контур итерации. 436 00:24:06,769 --> 00:24:08,560 Така за първи път това е тичам, степен ще 437 00:24:08,560 --> 00:24:09,800 да бъде първа точка в gradebook. 438 00:24:09,800 --> 00:24:12,300 За втори път тя ще бъде най- втори елемент, така и на т.н. 439 00:24:12,300 --> 00:24:15,970 докато има gradebook се изчерпване на елементи. 440 00:24:15,970 --> 00:24:20,390 Тогава ще можем да обобщим, че клас в нашето сумиране променлива 441 00:24:20,390 --> 00:24:22,570 и да се върнете нашата средна както сме виждали преди. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, някакви въпроси? 444 00:24:26,950 --> 00:24:27,699 Да? 445 00:24:27,699 --> 00:24:28,990 АУДИТОРИЯ: Имам два въпроса. 446 00:24:28,990 --> 00:24:33,586 Номер едно, хипотетично, може стартирате число на този един? 447 00:24:33,586 --> 00:24:35,604 Не е нужно да бъде двойно, така ли е? 448 00:24:35,604 --> 00:24:37,520 DAN AMRMENDARIZ: Можете ли да Повтарям, че въпрос? 449 00:24:37,520 --> 00:24:39,587 АУДИТОРИЯ: Мога ли да направя число като средна стойност? 450 00:24:39,587 --> 00:24:41,670 DAN AMRMENDARIZ: Можете ли да направя число като средна? 451 00:24:41,670 --> 00:24:45,015 Така че да връща цяло число Средната вместо двойно? 452 00:24:45,015 --> 00:24:48,204 >> АУДИТОРИЯ: можете Return-- имаме, че точно сега по-долу. 453 00:24:48,204 --> 00:24:49,870 DAN AMRMENDARIZ: Точно тук, върнете 0.0? 454 00:24:49,870 --> 00:24:51,790 АУДИТОРИЯ: Да, просто се върнете 0. 455 00:24:51,790 --> 00:24:56,590 Така че това ще бъде или 80 или 85, но не и 85.2. 456 00:24:56,590 --> 00:24:59,465 >> DAN AMRMENDARIZ: Така че в този случай, така че има няколко различни начина 457 00:24:59,465 --> 00:25:00,090 да отговоря на този въпрос. 458 00:25:00,090 --> 00:25:02,760 Нека да отговори на тях в ред. 459 00:25:02,760 --> 00:25:06,740 Така че, ако аз просто направи това завръщане 0, 0 е целочислена стойност. 460 00:25:06,740 --> 00:25:09,730 И така, това ще предизвика тип грешка за този случай 461 00:25:09,730 --> 00:25:13,210 защото тя очаква двойно но след това се връща цяло число. 462 00:25:13,210 --> 00:25:16,770 Ако искам да връща цяло число, което мога. 463 00:25:16,770 --> 00:25:20,450 Мога да зададете типа връщане да INT, върнете 0 тук, 464 00:25:20,450 --> 00:25:22,047 и не изпълнява двойна дивизия. 465 00:25:22,047 --> 00:25:23,880 Но тогава ние ще бъдем правене на целочислено деление. 466 00:25:23,880 --> 00:25:27,080 И така, ние тогава няма да получите Средната че ние вероятно ще очаквам. 467 00:25:27,080 --> 00:25:29,210 Но да можем да модифицирате видовете по този начин. 468 00:25:29,210 --> 00:25:32,598 >> АУДИТОРИЯ: И на второ място, вие има една двойна на върха. 469 00:25:32,598 --> 00:25:35,502 Но по-долу, когато направя върне Double Double, 470 00:25:35,502 --> 00:25:38,280 това е вече автоматично връщане Double формат. 471 00:25:38,280 --> 00:25:42,278 Защо все още трябва да го дефинират със стрелка отгоре с двойна? 472 00:25:42,278 --> 00:25:45,010 >> DAN AMRMENDARIZ: Значи в случай, че това е част 473 00:25:45,010 --> 00:25:50,580 на the-- така да повторя въпроса, защото това е косвена от връщането 474 00:25:50,580 --> 00:25:56,030 типове тук, какъв вид това всъщност е, че трябва да бъде изрично с Swift 475 00:25:56,030 --> 00:25:59,970 за това, което ние искаме да върнат от тази функция 476 00:25:59,970 --> 00:26:02,690 така че, когато тя изпълнява латиница проверка, тя може да се уверите, 477 00:26:02,690 --> 00:26:05,850 че това, което всъщност сме написали по-долу действително отговаря на това. 478 00:26:05,850 --> 00:26:10,225 Така че това е нещо като проверка със себе си подобна ситуация. 479 00:26:10,225 --> 00:26:11,050 Но има are-- 480 00:26:11,050 --> 00:26:12,560 >> АУДИТОРИЯ: [недоловим] стрелка? 481 00:26:12,560 --> 00:26:19,490 >> DAN AMRMENDARIZ: Има случаи, когато ние можем да се уточни, че можем имплицитно 482 00:26:19,490 --> 00:26:21,550 зададете типа възвръщаемост. 483 00:26:21,550 --> 00:26:23,940 Но в този случай, аз не правя Мисля, че ще работи. 484 00:26:23,940 --> 00:26:26,190 Има някои други синтаксис че ние ще видим по-късно. 485 00:26:26,190 --> 00:26:30,320 486 00:26:30,320 --> 00:26:35,280 >> Добре, така че този източник код е малко по-различно 487 00:26:35,280 --> 00:26:41,839 защото това прави разбор аргументи от функцията, която ние се обаждате. 488 00:26:41,839 --> 00:26:44,130 Нека ви покажа как работи преди да можем действително да продължат напред 489 00:26:44,130 --> 00:26:48,050 до някои интересни неща , което се случва в Swift. 490 00:26:48,050 --> 00:26:51,870 >> Така че в този случай, ако просто стартирате тази код, забележите, че какво се прави 491 00:26:51,870 --> 00:26:54,900 is-- време, той вид ми дава странни грешки. 492 00:26:54,900 --> 00:26:59,730 Аз трябва да го давате на няколко числа като аргумент на командния ред. 493 00:26:59,730 --> 00:27:06,220 Така че нека да видим, 150 и 80, и натиснете Enter да разберете какво всъщност прави. 494 00:27:06,220 --> 00:27:09,890 Тя приема всеки от тези ценности като цели числа. 495 00:27:09,890 --> 00:27:12,040 Той е като ги въведе в gradebook. 496 00:27:12,040 --> 00:27:14,470 И тогава й е висока че средно изчисление 497 00:27:14,470 --> 00:27:16,650 и извеждане, че както бихме очаквали. 498 00:27:16,650 --> 00:27:19,950 >> Но очевидно има нещо, ще с тази отхвърля нещо 499 00:27:19,950 --> 00:27:23,300 нещо като цяло число. 500 00:27:23,300 --> 00:27:27,300 Както можете да си спомните, от времето, когато бяхме занимаващи се с аргументи от командния ред 501 00:27:27,300 --> 00:27:32,640 в C и други езици, самото начало 0-та позиция в този аргумент на командния ред 502 00:27:32,640 --> 00:27:35,774 списък е името на командата че ние всъщност екзекутиран. 503 00:27:35,774 --> 00:27:38,690 Така че в този случай, аз съм просто примка над всички аргументи на командния ред. 504 00:27:38,690 --> 00:27:41,650 Но аз не правя някаква фантазия проверете, за да прескочим че първо. 505 00:27:41,650 --> 00:27:45,920 Аз съм просто явно или неявно, че съм проверка на които тези видове 506 00:27:45,920 --> 00:27:49,900 са цели числа, преди аз всъщност изпълнява тази изчисление. 507 00:27:49,900 --> 00:27:52,420 >> И това е по същество какво се случва тук. 508 00:27:52,420 --> 00:27:55,860 За всеки аргумент в доводите на процеса е, 509 00:27:55,860 --> 00:27:59,210 Отивам да изпълнява някои проверка. 510 00:27:59,210 --> 00:28:01,970 И в този случай, аз ще съм да се опита първо да конвертирате 511 00:28:01,970 --> 00:28:07,620 този довод в цяло число от извършване изрично typecast, 512 00:28:07,620 --> 00:28:12,310 защото това е, на входа, низ и в действителност не е цяло число. 513 00:28:12,310 --> 00:28:18,140 >> Но това е вид странен синтаксис, ако споделите деление се равнява Int (аргумент). 514 00:28:18,140 --> 00:28:21,120 Какво всъщност се случва тук е изключително 515 00:28:21,120 --> 00:28:24,390 важно да си използва Swift. 516 00:28:24,390 --> 00:28:27,610 Това е използване на това, което е наречено незадължителен тип. 517 00:28:27,610 --> 00:28:34,790 >> Така че тази функция, Int (аргумент), връща не само цяло число, но се връща 518 00:28:34,790 --> 00:28:37,470 което се нарича незадължителен число. 519 00:28:37,470 --> 00:28:41,200 И така, това е нещо тип на върха на тип. 520 00:28:41,200 --> 00:28:45,900 Можете да си представите нещо като него това е връщане като пакет. 521 00:28:45,900 --> 00:28:47,750 И когато отворите, че пакет, тя или 522 00:28:47,750 --> 00:28:53,930 е цяло число, което е резултат, или тя няма абсолютно нищо в него изобщо. 523 00:28:53,930 --> 00:28:58,140 И това е полезно като проверка за грешка механизъм, защото в този случай 524 00:28:58,140 --> 00:29:02,080 можем да разберем, е това тип реализация успешен? 525 00:29:02,080 --> 00:29:05,810 Ако е било, то е в действителност ще трябва цяло число вътре. 526 00:29:05,810 --> 00:29:08,750 В противен случай това ще има някакъв стойност, която ние ще се обадя на нула, което 527 00:29:08,750 --> 00:29:10,920 е представител на не по число на всички. 528 00:29:10,920 --> 00:29:13,270 Това е наистина представителна за нищо. 529 00:29:13,270 --> 00:29:18,130 >> И така, това, ако строителството ни позволява да разопакова, че пакетите, 530 00:29:18,130 --> 00:29:19,850 че по желание на свързване. 531 00:29:19,850 --> 00:29:25,560 И ако ние сме в състояние да разопакова, че опаковат и намери цяло число вътре, 532 00:29:25,560 --> 00:29:27,720 След това, което казваме тук е, че ние ще след това 533 00:29:27,720 --> 00:29:33,090 позволяват тази стойност да се определя в тази константа, наречена клас. 534 00:29:33,090 --> 00:29:36,590 И тази част от отчета, ако, горната част на отчета, ако 535 00:29:36,590 --> 00:29:40,390 ще работи, защото това отварям е била успешна. 536 00:29:40,390 --> 00:29:43,290 >> Ако това се случи, че просто така Имаше грешка може би 537 00:29:43,290 --> 00:29:47,040 в тази изрична тип реализация от низ до цяло число, може би 538 00:29:47,040 --> 00:29:49,160 това е АВС стойност за пример. 539 00:29:49,160 --> 00:29:52,120 И това е, всъщност не става да се превърнат в едно цяло число. 540 00:29:52,120 --> 00:29:55,520 След това тя ще се върне нула, което не е цяло число. 541 00:29:55,520 --> 00:29:57,570 И това ако изявление и след това се провали. 542 00:29:57,570 --> 00:30:01,930 клас няма да съществува, защото тя няма съдържание число. 543 00:30:01,930 --> 00:30:06,391 И това ще изпълня този друг блок, вместо. 544 00:30:06,391 --> 00:30:06,890 Да? 545 00:30:06,890 --> 00:30:09,652 >> АУДИТОРИЯ: Nil е N-I-L? 546 00:30:09,652 --> 00:30:11,110 DAN AMRMENDARIZ: нулева е N-I-L, да. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Така че това е може би един от най- трудните неща за Swift, 549 00:30:20,310 --> 00:30:23,690 особено когато сте в плевелите на IOS ап 550 00:30:23,690 --> 00:30:27,442 а ти всъщност се опитва да се направят някои развитие там. 551 00:30:27,442 --> 00:30:29,400 Това ще се крещи при вас за избор. 552 00:30:29,400 --> 00:30:33,050 Това ще бъде ли пита за въпросителни и удивителни знаци. 553 00:30:33,050 --> 00:30:37,100 Но след като разбера out-- ако посвети известно време, за да разберете 554 00:30:37,100 --> 00:30:41,990 какво се случва с допълнителни видове, вие ще си спестите много главоболия 555 00:30:41,990 --> 00:30:46,040 като се опитвате да напиши един апартамент в Swift. 556 00:30:46,040 --> 00:30:47,660 >> Това всъщност е много мощна функция. 557 00:30:47,660 --> 00:30:49,826 И вие просто ще трябва да вземат думата ми за това за сега. 558 00:30:49,826 --> 00:30:52,620 Но ще видим тази конструкция и някои други го обичат 559 00:30:52,620 --> 00:30:56,740 в някои от другите, че изходния код ще ви покажем в съвсем малко. 560 00:30:56,740 --> 00:31:00,440 >> Има ли някакви първоначални въпроси тук? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Така важната храна за вкъщи е, че избор на типа е нещо като metatype. 563 00:31:08,690 --> 00:31:12,500 Той или има стойност, и ако това е така, то тогава 564 00:31:12,500 --> 00:31:18,110 може би ще има тази стойност, свързана с него, или го няма стойност от всякакъв вид, 565 00:31:18,110 --> 00:31:19,620 и е представен от нула. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 Останалата част на това е може би както бихте очаквали. 568 00:31:28,870 --> 00:31:32,900 >> Така че нека да се увеличава нагоре трудност за пореден път. 569 00:31:32,900 --> 00:31:37,070 И този път, нека да разгледаме някои други типове данни, че действително съществуват. 570 00:31:37,070 --> 00:31:41,290 Един от тях е речници, което е много подобен на Python речници. 571 00:31:41,290 --> 00:31:48,270 Това е нещо подобно на хеш таблица в C. Това по същество е картографиране на ключове 572 00:31:48,270 --> 00:31:49,820 където ключове могат да бъдат струни. 573 00:31:49,820 --> 00:31:52,670 И когато погледнете нагоре тези ключове, тези ключове ще имат стойност. 574 00:31:52,670 --> 00:31:56,020 Така че това не е съвсем масив, но Вместо това, по-тясно свързана 575 00:31:56,020 --> 00:31:58,810 на картата хеш или хеш таблица. 576 00:31:58,810 --> 00:32:02,420 >> Нека да видим как това е трябвало да работят, преди да можем действително 577 00:32:02,420 --> 00:32:05,210 отидат в източник самия код. 578 00:32:05,210 --> 00:32:07,680 Ако аз просто стартирате тази, нищо наистина се случва. 579 00:32:07,680 --> 00:32:12,430 Той ми казва, че аз съм очаквал някои параметри от следния вид. 580 00:32:12,430 --> 00:32:16,050 Така че аз отивам да предостави на то някои проблемни зададете имена, 581 00:32:16,050 --> 00:32:18,490 така pset0, може би аз имам 100. 582 00:32:18,490 --> 00:32:20,790 И pset1, имам 5. 583 00:32:20,790 --> 00:32:24,630 И тогава на изпита, аз Направих много добре и имам 30. 584 00:32:24,630 --> 00:32:27,180 И Опа, аз удари пространство тук. 585 00:32:27,180 --> 00:32:30,940 >> Когато удари Enter, можете да видите тя изпълнява някои изчисления. 586 00:32:30,940 --> 00:32:33,740 Той казва gradebook е три класове, pset1, pset0, изпит. 587 00:32:33,740 --> 00:32:36,120 И gradebook има тази специфична средна. 588 00:32:36,120 --> 00:32:38,370 Така че отново, ние работим с този gradebook идея, 589 00:32:38,370 --> 00:32:44,650 но ние ще продължим итерации със сложността на нашата функция. 590 00:32:44,650 --> 00:32:47,650 >> Така че в началото, ние сме просто Ще се създаде функция, която 591 00:32:47,650 --> 00:32:49,390 е отговорен за отпечатването на ползването. 592 00:32:49,390 --> 00:32:51,920 А има и този изход функция, която просто ще 593 00:32:51,920 --> 00:32:53,710 принудително спиране на прилагането. 594 00:32:53,710 --> 00:32:56,530 Това не е нещо, което Вие ще използвате в IOS ап. 595 00:32:56,530 --> 00:32:59,750 Това е само в този случай, с аргумент на командния ред. 596 00:32:59,750 --> 00:33:01,990 Сега ще започнат да се движат в посока Xcode. 597 00:33:01,990 --> 00:33:07,760 Но това е специфична команда Програма линия стил в Swift. 598 00:33:07,760 --> 00:33:11,490 >> Нека да разгледаме някои от интересните неща тук. 599 00:33:11,490 --> 00:33:15,150 Нека да видим, само няколко интересни неща говорим може би 600 00:33:15,150 --> 00:33:19,930 е, че в моята функция на отпечатване на броя на марките, 601 00:33:19,930 --> 00:33:26,090 можете да си спомните, че имах този списък на items-- pset1, pset0 и изпит. 602 00:33:26,090 --> 00:33:29,130 Всъщност можете да бързо и лесно да направите това 603 00:33:29,130 --> 00:33:34,490 чрез вземане на gradebook, което е речника, който има ключове и стойности. 604 00:33:34,490 --> 00:33:38,730 Намери всички ключът е чрез метода на дот ключове тук, 605 00:33:38,730 --> 00:33:43,180 и след това използвайте този joinWithSeparator, които след това ще вземе всички ключове 606 00:33:43,180 --> 00:33:48,590 че сме въвели в, pset1-- или Съжалявам, pset0, pset1 и exam-- 607 00:33:48,590 --> 00:33:53,030 и да ги свързвам заедно използване на запетая и интервал 608 00:33:53,030 --> 00:33:55,400 да се създаде един дълъг низ. 609 00:33:55,400 --> 00:34:00,190 Тази операция е просто феноменално присъедините полезни при различни условия. 610 00:34:00,190 --> 00:34:03,450 И така е тази joinWithSeparator. 611 00:34:03,450 --> 00:34:06,939 >> И това е едно нещо, което е Swift променя от 1 до 2 Swift. 612 00:34:06,939 --> 00:34:08,730 Няма да бъдат използвани по- Python style-- ако сте 613 00:34:08,730 --> 00:34:13,219 запознат с Python-- на Python стил присъединят метод на низове. 614 00:34:13,219 --> 00:34:15,699 Но това не е вече случаят в Swift 2. 615 00:34:15,699 --> 00:34:19,400 Вие искате да използвате това, ако искате да свързвам масив от неща 616 00:34:19,400 --> 00:34:23,380 заедно с низ. 617 00:34:23,380 --> 00:34:27,889 >> Така че може би след това в нашия обсъждане на средната преди, 618 00:34:27,889 --> 00:34:32,659 това прави малко повече разум за нас, за да настроите функцията средни 619 00:34:32,659 --> 00:34:36,610 да бъде по избор двойна скоро отколкото само с изрично двойно. 620 00:34:36,610 --> 00:34:39,239 Защото имахме, че необичайно състояние, при което, 621 00:34:39,239 --> 00:34:41,550 какво ще стане ако действително gradebook все още няма стойности в него? 622 00:34:41,550 --> 00:34:44,280 Какво трябва средната възвръщаемост? 623 00:34:44,280 --> 00:34:46,350 >> Е, може би в C вас би направил нещо 624 00:34:46,350 --> 00:34:50,040 като условие на стойност страж, като 0.0, или може би с отрицателна стойност, 625 00:34:50,040 --> 00:34:53,690 или нещо просто, като е показателно че е имало някакво условие за грешка 626 00:34:53,690 --> 00:34:57,910 а вие може би всъщност не са способността да се изчисли, че средната. 627 00:34:57,910 --> 00:35:05,590 Ами красотата на посочвате по желание тип би било да се направи това. 628 00:35:05,590 --> 00:35:09,540 И аз сега като каза всички тези думи, но това всъщност не използва Евентуалната. 629 00:35:09,540 --> 00:35:12,970 Но ще видим, че само та, където можем да определят средната 630 00:35:12,970 --> 00:35:17,230 да бъде по избор тип данни, така че ако действително се връща някои данни, след това 631 00:35:17,230 --> 00:35:18,470 ние ще се върне, че данните. 632 00:35:18,470 --> 00:35:20,570 В противен случай ние ще се върне нула, като каза, че това 633 00:35:20,570 --> 00:35:22,200 има никакво смислено изчисляване. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Нека да преминем към нещо друго. 636 00:35:28,570 --> 00:35:35,910 Така че от тук, ние сме били гледа всички тези примери в командния ред. 637 00:35:35,910 --> 00:35:39,470 Но наистина това, което ти започваш да се занимават с е Xcode. 638 00:35:39,470 --> 00:35:43,720 И един от най-хубавите неща Xcode е, и по-конкретно в Swift, 639 00:35:43,720 --> 00:35:47,450 е, че ние имаме това нещо, наречено Playground. 640 00:35:47,450 --> 00:35:51,470 И детска площадка е изобщо не е IOS ап. 641 00:35:51,470 --> 00:35:54,751 Но тя ви позволява да експериментирате с Swift по много лесен начин. 642 00:35:54,751 --> 00:35:56,000 Можете да въведете всичките си код. 643 00:35:56,000 --> 00:35:58,140 Това е добре, синтаксис подчертани тук. 644 00:35:58,140 --> 00:36:01,600 Когато създавате нов файл, той ще поиска вас, ако искате да създадете Playground. 645 00:36:01,600 --> 00:36:08,720 Но хубавото на детската площадка е, че в дясно на прозореца, 646 00:36:08,720 --> 00:36:12,020 пък всъщност ти покажа изход от вашия код. 647 00:36:12,020 --> 00:36:16,110 Така че, ако превъртите надолу, можем да видим това, което на изхода на различни редове код 648 00:36:16,110 --> 00:36:17,200 всъщност се случва да бъде. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Така че в този случай, ние ще промяна посоки само малко 651 00:36:26,790 --> 00:36:30,960 и да поговорим за нещо, което е наистина важно за това високо ниво начин 652 00:36:30,960 --> 00:36:34,020 че Swift работи, и то е тази идея за затваряне. 653 00:36:34,020 --> 00:36:36,960 И вие вероятно сте виждали това малко в JavaScript. 654 00:36:36,960 --> 00:36:40,770 За тези от вас, които са в CS50, затваряне 655 00:36:40,770 --> 00:36:47,240 са много популярни, много добър начин за правене високо равнище неща в модерни езици. 656 00:36:47,240 --> 00:36:50,270 Но това е също вид трудно да се увийте главата си около първи път. 657 00:36:50,270 --> 00:36:52,269 Така че, ако погледнете в тази за първи път, това е ОК. 658 00:36:52,269 --> 00:36:56,740 Само погледнете в сорс кода и да видите ако можете да го разбера у дома. 659 00:36:56,740 --> 00:37:01,050 >> Така че в този случай, нека да кажем, че сме искате да създадете много експонати 660 00:37:01,050 --> 00:37:04,134 с някои фиксирана стойност. 661 00:37:04,134 --> 00:37:05,800 Така че в този случай мога да се създаде функция. 662 00:37:05,800 --> 00:37:09,270 Отивам да го наричат ​​мощност 2, чиято единствена цел в живота 663 00:37:09,270 --> 00:37:15,770 е да се вземат някои вход и два пъти тя, и да се върнете на тази стойност. 664 00:37:15,770 --> 00:37:21,210 Забележете, че аз съм тук приемане на един тип данни. 665 00:37:21,210 --> 00:37:23,137 Това ще бъде променлива, наречена х. 666 00:37:23,137 --> 00:37:23,970 Това е от тип Double. 667 00:37:23,970 --> 00:37:26,190 И аз отивам да се върне на два пъти тук. 668 00:37:26,190 --> 00:37:29,100 И аз съм просто ще направя много, честно казано, доста 669 00:37:29,100 --> 00:37:32,650 наивен начин за удвояване на тази стойност. 670 00:37:32,650 --> 00:37:35,600 И аз ще ви покажа защо това е полезен само за секунда. 671 00:37:35,600 --> 00:37:40,418 >> Забележете, че тук имаме този диапазон отново. за нещо в 1, точка 672 00:37:40,418 --> 00:37:44,130 дот точка, 2, което означава, че този цикъл ще се проведе два пъти. 673 00:37:44,130 --> 00:37:46,480 Но това представлява фиктивна променлива. 674 00:37:46,480 --> 00:37:49,650 Това означава, че аз не съм наистина ще да се използва тази променлива навсякъде 675 00:37:49,650 --> 00:37:51,070 вътре в този цикъл. 676 00:37:51,070 --> 00:37:55,380 Аз просто искам тази линия код, за да видят два пъти, 677 00:37:55,380 --> 00:37:58,980 без да е необходимо да се знае, стойността на този диапазон. 678 00:37:58,980 --> 00:38:02,570 >> Така че в този случай Бягам резултат пъти х два пъти, което по същество 679 00:38:02,570 --> 00:38:06,560 означава, че аз съм квадратура тази стойност. 680 00:38:06,560 --> 00:38:10,230 И това се случва с работи като бихме могли да очакваме. 681 00:38:10,230 --> 00:38:16,410 Мощност на 2, минаваща на стойност 2.0 ни дава изход от 4. 682 00:38:16,410 --> 00:38:18,810 3.2 произведения за 10.24. 683 00:38:18,810 --> 00:38:22,660 >> Сега можем да направим подобен нещо за мощност от 3. 684 00:38:22,660 --> 00:38:25,330 Но сега се променят само границите. 685 00:38:25,330 --> 00:38:28,840 За фиктивна променлива в 1 през 3, умножете 3 пъти, 686 00:38:28,840 --> 00:38:29,830 и да направи същото нещо. 687 00:38:29,830 --> 00:38:32,240 >> Така че това би могло да се чувствам малко скалъпен. 688 00:38:32,240 --> 00:38:34,270 Но има важна нещо, което тук 689 00:38:34,270 --> 00:38:37,770 е, че те гледа две функции, има 690 00:38:37,770 --> 00:38:43,600 само едно нещо, което е различно, който е тази стойност в интервала. 691 00:38:43,600 --> 00:38:46,910 Всичко останало около тези две функции, мощност от 3 и мощност от 2, 692 00:38:46,910 --> 00:38:50,440 са, в действителност, тъй като идентичен те работят по същия начин. 693 00:38:50,440 --> 00:38:53,460 >> Така че в този момент, малко сигнал за тревога трябва да се случва на разстояние. 694 00:38:53,460 --> 00:38:56,200 Надяваме се това, което казвате, знаете ли, това се чувства малко по- 695 00:38:56,200 --> 00:38:59,250 като дублирането на усилия. 696 00:38:59,250 --> 00:39:02,950 Може би има начин, че бих да може да се капсулира цялата 697 00:39:02,950 --> 00:39:06,630 и да се осигури функция или да създадете функция, която 698 00:39:06,630 --> 00:39:11,550 прави точно това, което искам, без да се налага да го напишете изрично. 699 00:39:11,550 --> 00:39:15,732 И това е, което властта на затваряне ни позволява да направим. 700 00:39:15,732 --> 00:39:16,940 Така че нека да погледнем на това. 701 00:39:16,940 --> 00:39:18,700 И аз ще прекара няколко та по този въпрос, тъй като това 702 00:39:18,700 --> 00:39:20,310 е доста важно за Swift. 703 00:39:20,310 --> 00:39:22,900 Ние виждаме това през цялото време. 704 00:39:22,900 --> 00:39:24,550 Отиваме да се дефинира функция. 705 00:39:24,550 --> 00:39:26,380 Това ще бъде наречен powerOf. 706 00:39:26,380 --> 00:39:29,470 Това ще приеме параметър, наречен у от тип Int. 707 00:39:29,470 --> 00:39:32,220 Но да погледнем на типа възвръщаемост. 708 00:39:32,220 --> 00:39:38,730 Типът на връщане е по- скоби, Double Double стрелка. 709 00:39:38,730 --> 00:39:43,370 Което означава, че тази функция, тази функция powerOf, 710 00:39:43,370 --> 00:39:46,550 се завръща функция. 711 00:39:46,550 --> 00:39:50,845 Това е приемане на Double и връщане на Double. 712 00:39:50,845 --> 00:39:53,720 Така че може да звучи вид лудост, но нека да превъртите надолу малко 713 00:39:53,720 --> 00:39:55,060 и гледам да се види какво се случва. 714 00:39:55,060 --> 00:39:57,910 Ние сме вътре в тази функция powerOf. 715 00:39:57,910 --> 00:40:00,760 Ние сме за създаване на нова функция наречено exponentiator, 716 00:40:00,760 --> 00:40:02,900 но това няма значение какво е то. 717 00:40:02,900 --> 00:40:06,410 >> Забележете, че това е входна стойност на х. 718 00:40:06,410 --> 00:40:09,910 И това е като в двойна и връщане на Double. 719 00:40:09,910 --> 00:40:16,320 И това е един и същ код, че ние Видях по-горе, с изключение на тази на стойност 2 720 00:40:16,320 --> 00:40:20,060 или стойността на 3, че горна граница на този диапазон, 721 00:40:20,060 --> 00:40:23,210 е заменен с тази стойност на у, които 722 00:40:23,210 --> 00:40:27,230 беше първоначално параметър на нашия powerOf функция. 723 00:40:27,230 --> 00:40:31,700 И в този момент, ние върнете exponentiator. 724 00:40:31,700 --> 00:40:33,345 Ние сме връщането на функцията. 725 00:40:33,345 --> 00:40:36,300 726 00:40:36,300 --> 00:40:39,550 >> Това е нещо като малко ум разпенващ. 727 00:40:39,550 --> 00:40:44,360 Но нека си представим какво ще се случи когато аз наричам тази функция powerOf 728 00:40:44,360 --> 00:40:47,610 и да премине в него някаква стойност, като 2. 729 00:40:47,610 --> 00:40:50,020 Какво означава това е, че Сега имам стойността 730 00:40:50,020 --> 00:40:55,130 2 за Y, което означава, че тази стойност ш в тази exponentiator функция 731 00:40:55,130 --> 00:40:56,410 ще бъде тази стойност 2. 732 00:40:56,410 --> 00:41:01,290 Но аз съм този връщане exponentiator функция. 733 00:41:01,290 --> 00:41:05,900 >> Така че забележите това, което казва Swift I са създали в този случай. 734 00:41:05,900 --> 00:41:10,550 нека квадрат е определение, това е функция, която приема Double 735 00:41:10,550 --> 00:41:12,610 и връща двойно. 736 00:41:12,610 --> 00:41:16,590 Аз създадох функция че площади нещо 737 00:41:16,590 --> 00:41:19,782 използването на този механизъм, точно тук. 738 00:41:19,782 --> 00:41:22,490 И наистина това, което се случва е, че се връща тази функция 739 00:41:22,490 --> 00:41:26,390 exponentiator, но тази стойност ш е обвит в нея. 740 00:41:26,390 --> 00:41:31,080 И така, сега всеки път, когато използвате този променлива или константа, наречена 741 00:41:31,080 --> 00:41:35,180 квадрат, то това ще да се държи като функция. 742 00:41:35,180 --> 00:41:39,960 И за да мога да се обадя, че променливата след това като аз бих нарекъл функция, 743 00:41:39,960 --> 00:41:43,830 и да премине в това число, като в този случай 3. 744 00:41:43,830 --> 00:41:45,910 И аз тогава ще изправят тази стойност. 745 00:41:45,910 --> 00:41:53,340 Така 3 на квадрат ще след това стане 9, както можем да видим тук. 746 00:41:53,340 --> 00:41:56,530 >> Наистина луда, но това сега ми позволява възможност 747 00:41:56,530 --> 00:41:59,040 да се създадат други функции powerOf. 748 00:41:59,040 --> 00:42:03,680 Както мога да кажа, OK, и сега искам да се създаде нова функция, powerOf (3), 749 00:42:03,680 --> 00:42:06,290 и съхраняване на тази в константа, наречена куб. 750 00:42:06,290 --> 00:42:10,220 И сега куб ще бъде отделна функция, която след това ще 751 00:42:10,220 --> 00:42:14,800 отнеме известно стойност като ресурс и кубче, че стойност, както можем да видим в най-долния ред 752 00:42:14,800 --> 00:42:16,420 тук. 753 00:42:16,420 --> 00:42:18,590 куб на 2 ще доведе до 8. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Надяваме доста чист неща. 756 00:42:22,680 --> 00:42:25,920 Вие никога не сте виждали преди. 757 00:42:25,920 --> 00:42:29,990 Препоръчвам ви да погледнете в капачки и да разследва този малко повече. 758 00:42:29,990 --> 00:42:33,570 Това е наистина мощен неща виждаме много в JavaScript и някои други езици. 759 00:42:33,570 --> 00:42:37,160 Това е наистина жизненоважно значение за разбирането APIs, както и 760 00:42:37,160 --> 00:42:38,620 че ние ще стигнем до само за секунда. 761 00:42:38,620 --> 00:42:39,456 Да? 762 00:42:39,456 --> 00:42:43,740 >> АУДИТОРИЯ: Когато правиш powerOf (2), скоби, и след това 763 00:42:43,740 --> 00:42:48,764 друга скоба, друг input-- което основно подмяна на площада. 764 00:42:48,764 --> 00:42:50,930 DAN AMRMENDARIZ: Така изглеждат в най-последния ред тук. 765 00:42:50,930 --> 00:42:55,930 Всъщност, това е напълно възможно да се направя това верижното както ти предложи. 766 00:42:55,930 --> 00:43:00,990 Така powerOf (5) означава, че отиваме да има exponentiator от 5 до тук. 767 00:43:00,990 --> 00:43:04,160 Така че това е по същество ще бъде най- едно и също нещо като 4 до петата власт, 768 00:43:04,160 --> 00:43:07,200 защото ние създадохме exponentiating функционира до петата власт, 769 00:43:07,200 --> 00:43:09,920 и ние сме преминава в които функционират стойността 4. 770 00:43:09,920 --> 00:43:12,619 И ние получаваме тази стойност че ние очакваме, 1024. 771 00:43:12,619 --> 00:43:14,785 АУДИТОРИЯ: И това не е име, така че е по-лесно 772 00:43:14,785 --> 00:43:16,570 да се чете, на площада каквото. 773 00:43:16,570 --> 00:43:17,903 >> DAN AMRMENDARIZ: Точно така, точно така. 774 00:43:17,903 --> 00:43:21,120 Така че, преди аз просто го сложи в постоянна тук, така че 775 00:43:21,120 --> 00:43:23,808 че го прави лесно да се носи това име. 776 00:43:23,808 --> 00:43:24,308 Да? 777 00:43:24,308 --> 00:43:26,942 >> АУДИТОРИЯ: В този контекст powerOf, това е част 778 00:43:26,942 --> 00:43:30,774 на езика за програмиране за разлика от вас начин 779 00:43:30,774 --> 00:43:33,952 мисля за powerOf в [недоловим]? 780 00:43:33,952 --> 00:43:35,660 DAN AMRMENDARIZ: Значи в този случай, powerOf 781 00:43:35,660 --> 00:43:39,280 е просто името на функция, която аз определено тук. 782 00:43:39,280 --> 00:43:41,801 Така че това не е присъщо до самия език, 783 00:43:41,801 --> 00:43:43,550 но вместо това, тя е просто функция, която е 784 00:43:43,550 --> 00:43:45,628 това име, защото аз го даде това име. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 Всякакви други въпроси? 787 00:43:51,920 --> 00:43:52,800 Всичко е наред. 788 00:43:52,800 --> 00:43:54,750 >> Сега това е страхотно. 789 00:43:54,750 --> 00:43:58,170 Но ти няма да видят Много от затваряне функции, които 790 00:43:58,170 --> 00:44:03,440 са като този, където можете да зададете, вътре от една функция, друга функция. 791 00:44:03,440 --> 00:44:04,320 И вие можете да го направите. 792 00:44:04,320 --> 00:44:06,430 Но това не е вид наистина необходимо, нали? 793 00:44:06,430 --> 00:44:09,189 Подобно защо да дефинирам този функция, наречена exponentiator 794 00:44:09,189 --> 00:44:10,480 и веднага след това да го върне. 795 00:44:10,480 --> 00:44:15,220 Защо не мога да просто веднага върнете на тази функция? 796 00:44:15,220 --> 00:44:18,890 >> И в действителност, това е точно идеята зад концепция, наречена 797 00:44:18,890 --> 00:44:22,410 анонимни функции, когато анонимни функции всъщност не 798 00:44:22,410 --> 00:44:25,270 има име, защото те не е необходимо да разполагате с такъв. 799 00:44:25,270 --> 00:44:28,700 И така, в този случай, в 7В, ние можем да намерим точно това. 800 00:44:28,700 --> 00:44:31,470 Всичко това е един и същ код, прави точно същото нещо, 801 00:44:31,470 --> 00:44:35,570 но сега ние сме го леко променена, така че че това powerOf функция веднага 802 00:44:35,570 --> 00:44:37,750 връща функция. 803 00:44:37,750 --> 00:44:44,150 Забележете, че след завръщането, там е една отворена къдрава скоба. 804 00:44:44,150 --> 00:44:46,410 Той е очаквал този вход Double. 805 00:44:46,410 --> 00:44:48,560 Той е очаквал, че продукцията Double. 806 00:44:48,560 --> 00:44:52,175 И тогава в ключова дума разделя самия код. 807 00:44:52,175 --> 00:44:53,550 Така че това е един анонимен функция. 808 00:44:53,550 --> 00:44:57,030 Той всъщност не си име, като има предвид, преди тя да се нарича exponentiator. 809 00:44:57,030 --> 00:45:00,229 Но както видяхме, просто наистина не се отнасят до exponentiator 810 00:45:00,229 --> 00:45:01,270 извън тази функция. 811 00:45:01,270 --> 00:45:02,470 Така че това нямаше значение. 812 00:45:02,470 --> 00:45:06,300 Така че тази анонимна функция е така наречените, защото е безименно, 813 00:45:06,300 --> 00:45:09,107 но тя все още се използва в контекста на този код. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> Следващите няколко тези, които аз съм Ще продължим да се надяваме 816 00:45:16,079 --> 00:45:17,370 духаше ума си малко. 817 00:45:17,370 --> 00:45:20,410 Ние можем да опрости това още повече. 818 00:45:20,410 --> 00:45:24,490 Тъй като е проницателно посочи по-рано, 819 00:45:24,490 --> 00:45:29,100 Може би ние всъщност знаят, чрез от това заключава код, какво 820 00:45:29,100 --> 00:45:31,750 на изхода на този код ще бъде. 821 00:45:31,750 --> 00:45:38,180 И в действителност, в тази анонимна функция, в действителност можем да заключим, видовете данни. 822 00:45:38,180 --> 00:45:41,650 >> Така че в този мач, ние вече не трябва да определя изрично 823 00:45:41,650 --> 00:45:44,850 вида на данните, който е в вход и изход от тази функция 824 00:45:44,850 --> 00:45:45,890 за няколко причини. 825 00:45:45,890 --> 00:45:51,390 Един от тях е, че сме определени, нагоре към прототип на функцията обвивката, 826 00:45:51,390 --> 00:45:55,770 какъв тип данни тази анонимни функция трябва вход и изход. 827 00:45:55,770 --> 00:45:57,900 И от друга, да заключим от кода 828 00:45:57,900 --> 00:46:01,930 тук, че ние приемаме вход, който е от типа двойно 829 00:46:01,930 --> 00:46:03,670 и връщане на Double. 830 00:46:03,670 --> 00:46:07,890 >> Забележете, че тук не трябва изрично дефинирани имената на аргументите 831 00:46:07,890 --> 00:46:11,220 че тази функция се приема. 832 00:46:11,220 --> 00:46:16,180 И така ние виждаме, ние можем да се отнасят до тези параметри, използващи $ 0, $ 1, 833 00:46:16,180 --> 00:46:20,140 така нататък и така нататък, в зависимост от броят на този параметър се използва 834 00:46:20,140 --> 00:46:20,850 в тази функция. 835 00:46:20,850 --> 00:46:23,370 836 00:46:23,370 --> 00:46:29,740 >> Това е нещо, което вие ще да видите много е това отворено къдрава скоба 837 00:46:29,740 --> 00:46:32,797 определение, последвано от $ 0, и след това някои операция, 838 00:46:32,797 --> 00:46:34,130 и след това затворена къдрава скоба. 839 00:46:34,130 --> 00:46:38,630 Това е анонимна функция който изпълнява тази операция. 840 00:46:38,630 --> 00:46:42,940 Той има този параметър, където това е тип е подразбираща се. 841 00:46:42,940 --> 00:46:44,860 Това първо параметър е 0 $. 842 00:46:44,860 --> 00:46:49,010 А някои операция е случва, че $ 0. 843 00:46:49,010 --> 00:46:52,100 >> АУДИТОРИЯ: Така знака за долар е параметър основно, 844 00:46:52,100 --> 00:46:53,429 и 0 означава първата? 845 00:46:53,429 --> 00:46:54,720 DAN Armendariz: Точно така. 846 00:46:54,720 --> 00:46:59,100 Така знака за долар същество означава, параметър, и 0 означава първия. 847 00:46:59,100 --> 00:47:02,760 Но тя работи по-специално в този случай, където не съм кръстен 848 00:47:02,760 --> 00:47:07,940 аргументите в моята анонимна функция. 849 00:47:07,940 --> 00:47:11,119 >> АУДИТОРИЯ: Има ли нещо, което трябва Perl или този знак за долар, долар 0 там? 850 00:47:11,119 --> 00:47:12,702 DAN Armendariz: Дали които, съжалявам? 851 00:47:12,702 --> 00:47:15,360 АУДИТОРИЯ: Има ли Perl този долар 0, долар 1-- 852 00:47:15,360 --> 00:47:17,318 DAN Armendariz: Аз не съм твърде запознат с Perl, 853 00:47:17,318 --> 00:47:21,340 но това, което определя променливи PHP въз основа на долара знаци. 854 00:47:21,340 --> 00:47:26,120 И може да има някои езици които имат функции, като тази. 855 00:47:26,120 --> 00:47:28,240 В действителност, Swift заимства една много функции, като този 856 00:47:28,240 --> 00:47:29,489 от много други езици. 857 00:47:29,489 --> 00:47:32,380 Ние виждаме нотки на Python в него. 858 00:47:32,380 --> 00:47:35,800 Това определение на типа изглежда, че идват от OCaml. 859 00:47:35,800 --> 00:47:38,932 И ние имаме само един куп неща от много различни езици. 860 00:47:38,932 --> 00:47:40,640 Това е една от хубавите неща за Swift 861 00:47:40,640 --> 00:47:43,390 е, че това отнема много от най-добрите идеи от един куп езици 862 00:47:43,390 --> 00:47:47,229 и на всички тях заедно Обувалки в една супер език. 863 00:47:47,229 --> 00:47:49,520 В действителност, ако ми позволите да продължи духаше ума си, 864 00:47:49,520 --> 00:47:51,000 така че ние сме били прави всичко това. 865 00:47:51,000 --> 00:47:56,690 Може би можем да опрости това малко малко по осъзнавайки, че, разбира се, 866 00:47:56,690 --> 00:48:02,120 Swift има exponentiating Тези функции са вградени вътре. 867 00:48:02,120 --> 00:48:04,660 Ако внеса Дарвин, която е само, че библиотеката 868 00:48:04,660 --> 00:48:09,680 Характеристика на тази функция, наречена Pow, сега Мога да се опрости по силите ми, за функция 869 00:48:09,680 --> 00:48:11,830 да бъде следното. 870 00:48:11,830 --> 00:48:15,860 Той ще се върне тази анонимна функция. 871 00:48:15,860 --> 00:48:17,950 >> Но вижте колко е просто това е сега. 872 00:48:17,950 --> 00:48:22,780 Това е функция, която анонимен се приемат някакъв вид данни, 873 00:48:22,780 --> 00:48:26,600 и това ще бъде един доводи, насочени, 874 00:48:26,600 --> 00:48:29,320 съотнесени към $ 0, че е от тип Double. 875 00:48:29,320 --> 00:48:32,680 Той ще се върне тип Double. 876 00:48:32,680 --> 00:48:35,760 Но отчета за връщане сега мълчаливо. 877 00:48:35,760 --> 00:48:39,990 >> И това е точно този стил, че е много, много често в Swift, 878 00:48:39,990 --> 00:48:40,790 навсякъде. 879 00:48:40,790 --> 00:48:43,190 Отиваме да видим това през цялото време в Swift. 880 00:48:43,190 --> 00:48:46,150 Така че аз съм показва всичко това, за да вас, защото на този синтаксис. 881 00:48:46,150 --> 00:48:49,070 Това е много често за да видите, която означава 882 00:48:49,070 --> 00:48:51,420 е анонимна функция че се представя 883 00:48:51,420 --> 00:48:54,640 някои операция на следните аргументи. 884 00:48:54,640 --> 00:48:56,940 И там е косвена възвръщаемост. 885 00:48:56,940 --> 00:49:01,850 Така че това е абсолютно същото нещо за нас да кажа, че това, точно тук. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> Поради тази къдрава скоба е функция, 888 00:49:08,150 --> 00:49:10,480 ние сме извършите тази операция на първия аргумент. 889 00:49:10,480 --> 00:49:12,170 Отиваме да се върне, че. 890 00:49:12,170 --> 00:49:14,815 Но това е външната връщане връщане, че цялата функция, 891 00:49:14,815 --> 00:49:19,855 че цялата анонимна функция че ние току-що сте създали. 892 00:49:19,855 --> 00:49:21,689 Всякакви други въпроси? 893 00:49:21,689 --> 00:49:23,980 Добре, аз не знам, ако вие сте готови за това, 894 00:49:23,980 --> 00:49:27,455 но можем да отидем още по-луд с Swift. 895 00:49:27,455 --> 00:49:28,560 Готов ли си? 896 00:49:28,560 --> 00:49:29,930 OK, това е страхотно. 897 00:49:29,930 --> 00:49:35,310 >> Сега ние всъщност имаме възможността да, в Swift, поради как модулна 898 00:49:35,310 --> 00:49:39,650 и как е базиран протокол, за да дефинира нашите собствени възбуждате оператори. 899 00:49:39,650 --> 00:49:44,060 Както и в този случай, ние нямахме оператор за exponentiation-- добре, 900 00:49:44,060 --> 00:49:47,990 за извършване на правомощия на нещо. 901 00:49:47,990 --> 00:49:53,632 Но мога да, в Swift, дефиниране на нов Операторът, който прави точно това. 902 00:49:53,632 --> 00:49:55,590 Така че в този случай има куп синтаксис тук. 903 00:49:55,590 --> 00:49:59,980 И аз ще ви позволи да го погледнете у дома, когато се вгледате в това. 904 00:49:59,980 --> 00:50:06,890 Но ние сме определянето на тази въвирам оператор, **, която ще ни позволи след това, 905 00:50:06,890 --> 00:50:09,840 чрез определяне на това, което, че функция ** всъщност 906 00:50:09,840 --> 00:50:15,010 няма да приемат лява ръка страна и от дясната ръка, 907 00:50:15,010 --> 00:50:21,190 и след това да се върне експонентата на това лявата страна на дясната страна. 908 00:50:21,190 --> 00:50:24,850 >> И така, сега изведнъж I Създадохме нов числител. 909 00:50:24,850 --> 00:50:29,490 Така 2 ** 3 означава 2 до трета мощност. 910 00:50:29,490 --> 00:50:34,420 [Против разпенващ SOUND] Това от Самата трябва да ви накара да бъде като, 911 00:50:34,420 --> 00:50:37,960 OK, винт C. Отивам Swift целия път. 912 00:50:37,960 --> 00:50:38,740 Това е чудесно. 913 00:50:38,740 --> 00:50:40,140 Това е доста фантастично. 914 00:50:40,140 --> 00:50:42,240 >> Въпреки, че това е един чудесен пример. 915 00:50:42,240 --> 00:50:45,570 Но аз никога не трябва веднъж извън на този пример, всъщност 916 00:50:45,570 --> 00:50:46,800 дефинирани моя собствен оператор. 917 00:50:46,800 --> 00:50:49,710 Но все пак, той показва Много от силата на Swift 918 00:50:49,710 --> 00:50:54,050 и защо това е всъщност наистина много готино. 919 00:50:54,050 --> 00:50:55,832 OK, нали? 920 00:50:55,832 --> 00:50:57,790 АУДИТОРИЯ: Ако сте Определяне на свой собствен оператор, 921 00:50:57,790 --> 00:51:02,940 как да знаеш, че не правя случайно опитате и да се създаде един оператор, който е 922 00:51:02,940 --> 00:51:06,040 в някъде в C, като скрито някъде в Swift, 923 00:51:06,040 --> 00:51:12,210 като един неясен този, който ви Не може да не сте виждали преди. 924 00:51:12,210 --> 00:51:15,050 >> DAN Armendariz: Така че, ако се опитвате да дефинирате собствени оператори, 925 00:51:15,050 --> 00:51:20,970 съществува риск за определяне една върху съществуващ оператор. 926 00:51:20,970 --> 00:51:24,870 Това отива в степен на подробност, която Не мисля, че имаме време да отидем. 927 00:51:24,870 --> 00:51:27,620 Но това е риск. 928 00:51:27,620 --> 00:51:31,320 И това всъщност е причината, поради Не използвайте символа карета, които 929 00:51:31,320 --> 00:51:36,210 когато сме пишете на властта, ние обикновено използвате 4 карета малко 5 или нещо 930 00:51:36,210 --> 00:51:40,560 ей така, просто, когато сме Gchatting приятели или каквото. 931 00:51:40,560 --> 00:51:43,660 Но в този случай, че действително щяло да предизвика сблъсък. 932 00:51:43,660 --> 00:51:46,450 И така, аз го избягва, само защото Аз се случи да се знае в този случай 933 00:51:46,450 --> 00:51:50,430 че това ще предизвика че сблъсък. 934 00:51:50,430 --> 00:51:52,270 >> Всичко е наред. 935 00:51:52,270 --> 00:51:55,080 Сега за съжаление, за последните седем минути, 936 00:51:55,080 --> 00:51:57,410 Аз трябва да се запази издухване умовете ви малко. 937 00:51:57,410 --> 00:52:00,230 Така че позволете ми да ви покажа някои други неща, както добре. 938 00:52:00,230 --> 00:52:03,710 >> Ние ви показах тази идея за като тези анонимни функции, 939 00:52:03,710 --> 00:52:07,040 това затваряне, които ви позволяват да вид премине функции наоколо. 940 00:52:07,040 --> 00:52:08,100 Можете да ги върне. 941 00:52:08,100 --> 00:52:09,490 Можете да ги манипулира. 942 00:52:09,490 --> 00:52:11,790 Можете да направите всички видове луди неща. 943 00:52:11,790 --> 00:52:14,850 >> Но едно друго нещо, че се случва да бъде полезна 944 00:52:14,850 --> 00:52:19,740 е способността да, за разлика да се връщат тези функции 945 00:52:19,740 --> 00:52:25,146 във функция, за да премине функция като параметър за друга функция. 946 00:52:25,146 --> 00:52:30,430 Може да се мисли и защо на Земята ще искам да направя нещо такова? 947 00:52:30,430 --> 00:52:33,660 >> Е, нека да кажем, че искам да се възползвам от оператор, който I 948 00:52:33,660 --> 00:52:40,260 работили толкова усилено, за да създадете и приложите тя да куп различни номера 949 00:52:40,260 --> 00:52:41,770 в масив. 950 00:52:41,770 --> 00:52:46,700 Така че в този случай имам масив от integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 И аз искам да ги удвои. 952 00:52:48,080 --> 00:52:50,430 Начинът, по който бихме обикновено направите това е да просто напишете 953 00:52:50,430 --> 00:52:53,440 прост за линия, която итерации над всички тях 954 00:52:53,440 --> 00:52:57,140 и изпълнява някаква квадратен операция над тях, 955 00:52:57,140 --> 00:53:02,700 въвеждане на тези нови ценности в едно ново променлива, или по-скоро, нов масив тук. 956 00:53:02,700 --> 00:53:07,370 И стойността на продукцията на резултат е след всички тези масиви, 957 00:53:07,370 --> 00:53:10,200 или по-скоро всички, елементи вече квадрат. 958 00:53:10,200 --> 00:53:12,680 >> И ние може да направи същото нещо, за да го cubing, 959 00:53:12,680 --> 00:53:15,360 но малко по сигнал за тревога следва да бъде излизането 960 00:53:15,360 --> 00:53:17,360 казва, че може би има някакъв начин, че бихме 961 00:53:17,360 --> 00:53:19,860 да бъде в състояние да се опрости тази малко. 962 00:53:19,860 --> 00:53:21,130 И в действителност съществува. 963 00:53:21,130 --> 00:53:25,320 Какво става, ако бихме могли да създадем функция, която ни позволява 964 00:53:25,320 --> 00:53:28,350 да приеме, като хищник, функция? 965 00:53:28,350 --> 00:53:30,350 Така че в този случай, да вземе Посетете тези аргументи. 966 00:53:30,350 --> 00:53:33,220 Отиваме да приеме списък на двойки. 967 00:53:33,220 --> 00:53:35,030 И тогава отиваме да приеме функция 968 00:53:35,030 --> 00:53:40,990 в променлива наречена е, което се случва да вземе два пъти и да се върнете на Double. 969 00:53:40,990 --> 00:53:43,320 И цялата продукция от цялата тази функция 970 00:53:43,320 --> 00:53:47,310 наречено Mapper ще върне масив, наречен двойна. 971 00:53:47,310 --> 00:53:52,380 >> Това, което след това ще ми позволи да направите, е да обхождане този списък 972 00:53:52,380 --> 00:53:56,350 и да направи същото нещо, но сега прилага тази функция на всеки 973 00:53:56,350 --> 00:53:58,970 на индивидуалните стойности в този списък. 974 00:53:58,970 --> 00:54:00,750 Така че аз наистина не знам какво е то. 975 00:54:00,750 --> 00:54:02,010 Няма значение за мен. 976 00:54:02,010 --> 00:54:06,530 Но толкова дълго, колкото е необходимо в двойна, някои извършва операция на това, 977 00:54:06,530 --> 00:54:08,640 и след това се връща Двойна, аз след това ще бъде 978 00:54:08,640 --> 00:54:13,415 в състояние да съставят карта на тази функция могат да всеки един елемент от списъка. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> И този тип програми е наречени висши функции поръчка, 981 00:54:20,930 --> 00:54:24,440 накъде сме се прехвърляха функции наоколо като параметри 982 00:54:24,440 --> 00:54:26,430 и прави неща, с функции. 983 00:54:26,430 --> 00:54:29,640 Това е нещо като да всички тези идеи, които сме научили в CS50 984 00:54:29,640 --> 00:54:31,390 и като ги подреди от до следващото ниво. 985 00:54:31,390 --> 00:54:34,140 И това е всичко, CS51 стил неща. 986 00:54:34,140 --> 00:54:37,080 И така, ние ще отидем в дълбочина повече в класове по този начин. 987 00:54:37,080 --> 00:54:38,930 >> Но това е също важно тук, защото ние 988 00:54:38,930 --> 00:54:42,010 Виждам много функции които се използват в Swift 989 00:54:42,010 --> 00:54:45,590 които по същество прави Това, където имаме 990 00:54:45,590 --> 00:54:48,300 някои цифри, някои масив от числа. 991 00:54:48,300 --> 00:54:50,850 Отиваме да мине, че масив в нашата Mapper. 992 00:54:50,850 --> 00:54:55,770 И ние също започваш да преминат някои функции, които 993 00:54:55,770 --> 00:54:57,950 вече сме дефиниран тук. 994 00:54:57,950 --> 00:54:59,690 Това ще бъде квадрат. 995 00:54:59,690 --> 00:55:02,220 И ние ще се тогава квадратна всички тези номера 996 00:55:02,220 --> 00:55:04,710 и съхраняване на тази в този линк тук. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Така че този случай ние определено ни собствена функция, наречена Mapper. 999 00:55:11,000 --> 00:55:15,370 Но точно това нещо е, в действителност, вградена в Swift. 1000 00:55:15,370 --> 00:55:18,960 Съществува голямо разнообразие от функции, наречени карта. 1001 00:55:18,960 --> 00:55:21,520 Има една функция на картата, има намаляване на функция, 1002 00:55:21,520 --> 00:55:25,630 и там е функция на филтър, които по същество прилага функции 1003 00:55:25,630 --> 00:55:30,782 на всеки елемент в изброят да ги променя по някакъв начин. 1004 00:55:30,782 --> 00:55:34,510 >> АУДИТОРИЯ: Така че, тъй като сте трансформира данните в друг формат 1005 00:55:34,510 --> 00:55:36,134 чрез function-- 1006 00:55:36,134 --> 00:55:37,050 DAN Armendariz: Точно така. 1007 00:55:37,050 --> 00:55:39,420 Да, така функцията че ние приемаме 1008 00:55:39,420 --> 00:55:41,790 се трансформира данните по някакъв начин. 1009 00:55:41,790 --> 00:55:44,700 В този случай, ние бяхме или тя квадратура, или бяхме го cubing, 1010 00:55:44,700 --> 00:55:50,060 или наистина, ние може да изпълнява никаква операция върху него изобщо. 1011 00:55:50,060 --> 00:55:54,150 >> Но нека да ви покажа как тогава този ще изглежда на практика. 1012 00:55:54,150 --> 00:55:56,681 И отново, Бягам а малко време. така че не съм 1013 00:55:56,681 --> 00:55:59,430 ще бъде в състояние да премине всички на изходния код тук в подробности. 1014 00:55:59,430 --> 00:56:00,721 Но аз Ви препоръчваме да се направи това. 1015 00:56:00,721 --> 00:56:03,850 Ние ще го публикуваме възможно най- възможно след този разговор. 1016 00:56:03,850 --> 00:56:07,610 >> Но ако се вземе един поглед на това, приемем, че имаме списък с номера, 1017 00:56:07,610 --> 00:56:10,260 масив от номера в тази променливи, наречени номера. 1018 00:56:10,260 --> 00:56:16,670 След това ние искаме да се извърши това операция филтър на тези номера. 1019 00:56:16,670 --> 00:56:19,730 Така филтър е по-висока функция, за която 1020 00:56:19,730 --> 00:56:24,660 приема масив и функция. 1021 00:56:24,660 --> 00:56:28,760 И на всеки елемент в тази масив, тя изпълнява тази функция. 1022 00:56:28,760 --> 00:56:31,990 >> Ако тази функция връща Вярно, той държи тази позиция. 1023 00:56:31,990 --> 00:56:36,100 Ако тази функция връща невярна, го изхвърля, че т. 1024 00:56:36,100 --> 00:56:40,480 И тогава се връща списък След това, че се състои всички 1025 00:56:40,480 --> 00:56:44,360 на тези елементи, които са филтрирани. 1026 00:56:44,360 --> 00:56:47,150 >> Така че с други думи, това е една и съща идея, на gradebook. 1027 00:56:47,150 --> 00:56:50,800 Ние може да има различни степени в тази стойност, наречена номера. 1028 00:56:50,800 --> 00:56:55,590 Може да е 100, и 70, и 40, така нататък и така нататък. 1029 00:56:55,590 --> 00:56:59,110 Какво прави този филтър е предизвестие че това е, че синтактична захар 1030 00:56:59,110 --> 00:57:01,310 за анонимна функция. 1031 00:57:01,310 --> 00:57:05,980 Това е анонимна функция казвайки че параметърът, че аз съм приемане 1032 00:57:05,980 --> 00:57:09,690 ще бъде, ако е по-голяма от 70, 1033 00:57:09,690 --> 00:57:15,837 След това ще се върнете вярно, което означава, че тази позиция ще се съхраняват в този филтър. 1034 00:57:15,837 --> 00:57:17,920 Така че нека да бъдем малко по- по-конкретно за това. 1035 00:57:17,920 --> 00:57:25,760 Ако имам този масив от числа и се състои от 100, 70 и 40, 1036 00:57:25,760 --> 00:57:29,730 I изпълнява този филтър работа на всеки един от тях. 1037 00:57:29,730 --> 00:57:33,270 Така че първо е тази стойност 100. 1038 00:57:33,270 --> 00:57:36,770 100-голям или равен 70 е вярно, които 1039 00:57:36,770 --> 00:57:41,950 означава, че 100 се съхранява в това ново копие на този масив. 1040 00:57:41,950 --> 00:57:44,290 70 също минава. 1041 00:57:44,290 --> 00:57:46,020 Но 40 не. 1042 00:57:46,020 --> 00:57:54,290 Така че това, което се връща в passingCount е масив от елементи 100 и 70-- 1043 00:57:54,290 --> 00:57:57,410 100, запетая, 70. 1044 00:57:57,410 --> 00:57:59,870 Това бяха единствените две елементи, които са били държани. 1045 00:57:59,870 --> 00:58:03,740 И така, причината, поради която бързо премина през много от тези видове с висока цел 1046 00:58:03,740 --> 00:58:08,680 нещата са, защото това е, че общата нещо, което ще видите в доста Swift 1047 00:58:08,680 --> 00:58:16,810 често, е изпълнение на някои операция използването на тази анонимна функция синтаксис. 1048 00:58:16,810 --> 00:58:18,450 >> Има някои готини неща. 1049 00:58:18,450 --> 00:58:24,730 Ключове са наистина силни в Swift, Искам да кажа точно като луд, луд мощен. 1050 00:58:24,730 --> 00:58:28,250 Можете да използвате превключвател, и всъщност можете да ги прилагат 1051 00:58:28,250 --> 00:58:33,160 да диапазони, което е вид лудост, и да направим фантазия подобни неща. 1052 00:58:33,160 --> 00:58:37,540 >> Но в последните няколко минути, Искам да прескочите доста далеч 1053 00:58:37,540 --> 00:58:46,940 и ще ви покаже конкретен пример за това как ние можем да създадем в IOS ап използвайки Swift. 1054 00:58:46,940 --> 00:58:49,040 Така че, когато правиш това, ще трябва да се вземат 1055 00:58:49,040 --> 00:58:51,990 а погледнете at-- на Apple, документация, те 1056 00:58:51,990 --> 00:58:56,084 има много наистина добри уроци за създаване на първата си кандидатура. 1057 00:58:56,084 --> 00:58:58,250 И аз ви насърчавам да се направи че тъй като те ви отведе 1058 00:58:58,250 --> 00:59:04,110 през всички етапи на какво точно до кликнете върху, за да се създаде приложение, IOS. 1059 00:59:04,110 --> 00:59:07,290 >> Но тук ние имаме това IOS ап. 1060 00:59:07,290 --> 00:59:10,960 И това е доста проста ап наистина. 1061 00:59:10,960 --> 00:59:13,840 Ако стартирате това, нека да покажем вие на какво прилича. 1062 00:59:13,840 --> 00:59:19,480 Всичко, което е по същество прави, че е дърпа от интернет файл JSON 1063 00:59:19,480 --> 00:59:22,300 че съм се съхранява на сървър. 1064 00:59:22,300 --> 00:59:26,310 И това JSON файл дефинира изображения, които позволяват 1065 00:59:26,310 --> 00:59:31,680 ми да след това преминете през, на моя ап, картинки от моя уеб сървър. 1066 00:59:31,680 --> 00:59:32,880 >> Така че аз имам тук getNextImage. 1067 00:59:32,880 --> 00:59:37,100 Тя зарежда изображение от интернет, и след това го показва на екрана. 1068 00:59:37,100 --> 00:59:38,200 >> Така че това е доста проста. 1069 00:59:38,200 --> 00:59:41,550 Но целта тук е да се покаже, как ние можем да комбинираме нещата 1070 00:59:41,550 --> 00:59:47,820 от последните няколко седмици от CS50 в действително IOS приложения. 1071 00:59:47,820 --> 00:59:53,140 С други думи, може би един от най- неща, които вие ще искате да направите, 1072 00:59:53,140 --> 00:59:56,340 е да има заявление, че IOS може да тегли данни от интернет 1073 00:59:56,340 --> 00:59:59,070 и да се покаже на потребителя някаква информация. 1074 00:59:59,070 --> 01:00:03,130 Това е изцяло точката на този изходен код тук. 1075 01:00:03,130 --> 01:00:07,890 >> Така че има много какво да се каже за как да се направи действително развитие IOS. 1076 01:00:07,890 --> 01:00:12,860 Има много луди синтаксис че сме доста още не сме видели 1077 01:00:12,860 --> 01:00:15,580 като клас, какво всъщност е един клас. 1078 01:00:15,580 --> 01:00:19,470 Ние до голяма степен може да пренебрегне че за момента. 1079 01:00:19,470 --> 01:00:23,250 >> Но забележете, че ние сме съдържаше в рамките на този най-различни неща 1080 01:00:23,250 --> 01:00:27,720 че вече съм виждал подобно функции, които имат конкретни имена. 1081 01:00:27,720 --> 01:00:32,650 И когато ние даваме тези, Функционира правилните имена 1082 01:00:32,650 --> 01:00:36,530 които се очаква да стане до IOS, в действителност това се чувства малко по-вълшебно. 1083 01:00:36,530 --> 01:00:40,300 Но когато създавате IOS заявление, има 1084 01:00:40,300 --> 01:00:47,590 са специфични имена на функции, които призовани от самия телефон 1085 01:00:47,590 --> 01:00:52,440 като заявлението се зарежда, за да се опитам да се създаде процес, който всъщност 1086 01:00:52,440 --> 01:00:54,787 спринта на вашата кандидатура. 1087 01:00:54,787 --> 01:00:58,120 Така че отново, че има много неща, които аз Трябва да замаже тук, за да можем 1088 01:00:58,120 --> 01:01:00,570 да се говори за това специално. 1089 01:01:00,570 --> 01:01:06,050 Но аз ви насърчавам да погледнете може би От друга семинара IOS, но също така и някои 1090 01:01:06,050 --> 01:01:09,290 на уроци онлайн, което правим много по-добра работа за описване 1091 01:01:09,290 --> 01:01:11,030 конкретната информация. 1092 01:01:11,030 --> 01:01:15,760 >> Но ние можем да видим няколко неща, които са интересни от кода тук. 1093 01:01:15,760 --> 01:01:17,950 Забележете, че ако имаме изявления. 1094 01:01:17,950 --> 01:01:20,400 Между другото, едно важно нещо за, ако отчети 1095 01:01:20,400 --> 01:01:24,860 е, че скобите около Булев израз са задължителни. 1096 01:01:24,860 --> 01:01:30,800 Но фигурните скоби, не са задължителни, без значение колко малко или много редове код 1097 01:01:30,800 --> 01:01:32,360 имате в случай изявление. 1098 01:01:32,360 --> 01:01:38,670 Вие не може да има, ако отчети без фигурни скоби в Swift. 1099 01:01:38,670 --> 01:01:41,000 >> И това е, добре, нещо глупаво. 1100 01:01:41,000 --> 01:01:43,910 Но има и исторически причини за това. 1101 01:01:43,910 --> 01:01:46,180 Той е трябвало да ви спаси от себе си. 1102 01:01:46,180 --> 01:01:49,899 Харесвам това например, че не може премахване на фигурните скоби около които 1103 01:01:49,899 --> 01:01:50,440 ако изявление. 1104 01:01:50,440 --> 01:01:52,730 Тези, са в действителност е необходимо. 1105 01:01:52,730 --> 01:01:54,480 Така че аз Ви препоръчваме да се да разгледаме това. 1106 01:01:54,480 --> 01:01:56,230 Но има и още една конструиране, че искам 1107 01:01:56,230 --> 01:02:02,640 да ви покажа, че за Swift е нов за Swift 2.0 сравнение 1108 01:02:02,640 --> 01:02:08,460 до по-стари версии на Swift, който е следното. 1109 01:02:08,460 --> 01:02:11,620 Нека да видим къде го сложих тук? 1110 01:02:11,620 --> 01:02:16,630 >> Така че в тази функция, наречена fetchJSON, тази функция 1111 01:02:16,630 --> 01:02:23,450 е отговорен за дърпане, че JSON файл от URL, които просто така се случва 1112 01:02:23,450 --> 01:02:26,310 да се работи на моя CS50 IDE. 1113 01:02:26,310 --> 01:02:28,580 Току-що започна Apache, сложа JSON файл там, 1114 01:02:28,580 --> 01:02:32,110 и аз съм в състояние да тегли, че след това данни от интернет, използвайки 1115 01:02:32,110 --> 01:02:36,430 тази функция и това URL, която се предоставя от телефона. 1116 01:02:36,430 --> 01:02:40,490 Тя е предоставена от библиотека, която можете да използвате, когато 1117 01:02:40,490 --> 01:02:43,140 правиш някаква развитие IOS ап. 1118 01:02:43,140 --> 01:02:49,690 >> Забележете, че има тази необичайна синтактичен конструкт, наречен охрана. 1119 01:02:49,690 --> 01:02:53,530 И наистина всичко това е в Swift е начин за проверка 1120 01:02:53,530 --> 01:02:56,870 че някои неща имат са изпълнени, преди да 1121 01:02:56,870 --> 01:03:00,000 продължи с останалата част на функцията. 1122 01:03:00,000 --> 01:03:04,260 Така че мога да имам, като се използва тази опция тип, 1123 01:03:04,260 --> 01:03:10,530 Бих могъл да намери адреса от използвате тази функция NSURL 1124 01:03:10,530 --> 01:03:16,640 и съхраняване, че в URL постоянна и след проверка 1125 01:03:16,640 --> 01:03:20,820 да видим дали URL е нулева, тъй като тя щеше да се върне на допълнителен тип. 1126 01:03:20,820 --> 01:03:25,660 И ако това е нулева, тогава аз ще разпечатате грешка и след това се върнете. 1127 01:03:25,660 --> 01:03:29,970 >> Но вместо това, какво ви позволява охрана ни направи, е, че много неща, 1128 01:03:29,970 --> 01:03:34,550 но гарантира, че тя е всъщност се случва, че URL 1129 01:03:34,550 --> 01:03:38,020 е правилно определен от NSURL. 1130 01:03:38,020 --> 01:03:41,810 И ако е така, то тогава прескача това, и то 1131 01:03:41,810 --> 01:03:46,110 ще ви позволи да се пристъпи URL като са били дефинирани правилно. 1132 01:03:46,110 --> 01:03:48,830 Но ако това е така, че URL не е правилно определено, 1133 01:03:48,830 --> 01:03:52,550 ако тази функция се връща грешка или някой друг нещо неочаквано 1134 01:03:52,550 --> 01:03:58,030 всъщност се случва, този предпазител конструкт ни позволява да после изход тази грешка 1135 01:03:58,030 --> 01:04:00,390 и да се върнете веднага. 1136 01:04:00,390 --> 01:04:00,890 Да? 1137 01:04:00,890 --> 01:04:04,839 >> АУДИТОРИЯ: Така че това е вид на като ако след друго? 1138 01:04:04,839 --> 01:04:07,130 DAN Armendariz: Това е вид като ако след друго, да, 1139 01:04:07,130 --> 01:04:14,200 с изключение на това, че URL тогава дефинирано за всичко това долу. 1140 01:04:14,200 --> 01:04:20,420 Ако премине на този предпазител, а след това всъщност ще бъде изпълнен с данни 1141 01:04:20,420 --> 01:04:29,500 и използваема в останалите изходния код във вашата функция. 1142 01:04:29,500 --> 01:04:33,790 Така че аз подозирам, че ти започваш да се започнете да виждате тази охрана, както добре. 1143 01:04:33,790 --> 01:04:36,670 И да помнят, че. 1144 01:04:36,670 --> 01:04:46,270 >> Така че просто гледам на няколко други неща, това право тук е това, 1145 01:04:46,270 --> 01:04:53,377 мислите ли, просто въз основа на това, което ние говорим за преди? 1146 01:04:53,377 --> 01:04:56,650 >> АУДИТОРИЯ: Мисли, че ще работи в списъка? 1147 01:04:56,650 --> 01:04:59,100 >> DAN Armendariz: Така че това е близо. 1148 01:04:59,100 --> 01:05:02,360 Това е функция, която ние сме дефиниране. 1149 01:05:02,360 --> 01:05:07,240 И ние сме въвеждане на тази функция като аргумент за тази функция е тук. 1150 01:05:07,240 --> 01:05:09,120 >> АУДИТОРИЯ: [недоловим], ако не е нула. 1151 01:05:09,120 --> 01:05:11,470 Така че това е в списъка, нали? 1152 01:05:11,470 --> 01:05:15,450 >> DAN Armendariz: Ако грешката не е нула, така че is-- така че трябва да преминете. 1153 01:05:15,450 --> 01:05:18,060 Е, нека да видим, аз наистина не може да превъртете надясно тук. 1154 01:05:18,060 --> 01:05:23,161 грешка е аргумент, който се е предава на тази анонимна функция. 1155 01:05:23,161 --> 01:05:24,410 Това е анонимна функция. 1156 01:05:24,410 --> 01:05:25,480 Той няма име. 1157 01:05:25,480 --> 01:05:29,850 Но ние приемаме тези три аргументи, данни, отговор и грешка. 1158 01:05:29,850 --> 01:05:33,590 И тя ще се върне за нищожни и това няма да върне нищо. 1159 01:05:33,590 --> 01:05:37,910 И това е съдържанието на тази функция. 1160 01:05:37,910 --> 01:05:41,961 И тогава ние имаме достъп вътре, че функция на всяка от тези аргументи. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Така че това е вихрушка обиколка на езика. 1163 01:05:48,679 --> 01:05:50,470 Но се надявам с това, надявам се, както ви отведе 1164 01:05:50,470 --> 01:05:54,490 един поглед към някои от уроците специфични за IOS развитие с Swift, 1165 01:05:54,490 --> 01:05:57,481 особено ако отидете Apple, разработчик на уеб page-- 1166 01:05:57,481 --> 01:05:59,980 те имат много наистина добри уроци, за да започна. 1167 01:05:59,980 --> 01:06:05,010 Но да се надяваме само на този час на говорене за синтаксиса си е дал 1168 01:06:05,010 --> 01:06:08,760 ти достатъчно, за да започнете с това. 1169 01:06:08,760 --> 01:06:12,950 >> Ние ще публикуваме всички този източник код на уебсайта на семинар 1170 01:06:12,950 --> 01:06:17,800 възможно най-скоро, а също и слайдовете така че трябва отправна точка за всички онези. 1171 01:06:17,800 --> 01:06:20,530 Но късмет с вашите проекти. 1172 01:06:20,530 --> 01:06:23,640 И всички много ви благодаря, че дойдохте. 1173 01:06:23,640 --> 01:06:26,990 >> [Аплодисменти] 1174 01:06:26,990 --> 01:06:28,026