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 >> ДАН AMRMENDARIZ: Все, Ласкаво просимо в CS50 семінару, 4 00:00:09,590 --> 00:00:11,690 IOS App розвитку з Swift. 5 00:00:11,690 --> 00:00:15,690 Я Ден Армендаріс, і я наставником інформатики тут в Гарварді. 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 вдаючись у деякі більш просунуті Синтаксис Свіфта мовою. 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 Перш за все, ви повинні використовувати Мак, працює в прикладах 30 00:01:39,940 --> 00:01:43,880 що ми збираємося використовувати сьогодні, відносно нова версія ОС 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 який має останню версію Свіфта, який Свіфт 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 Свіфта 2.0, щойно вийшов восени цього року. 39 00:02:08,514 --> 00:02:09,889 Отже, ми збираємося, щоб показати Свіфт 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-- і я сподіваюся, ми насправді досі ця цієї год-- 64 00:03:28,430 --> 00:03:30,910 CS 50 Яблуко додаток Команда розробників, які 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 >> Так що пару речі, про найшвидшу. 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 від існуючої знань з С, що ми можемо порт 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 Спостерігати 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 на вашому комп'ютері або в вашому 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 Там дуже багато API, які доступні. 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 і стек Переповнення, як звичайно. 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 Зверніть увагу, що немає INT основною. 116 00:06:07,010 --> 00:06:10,392 Там немає ні один з мотлоху, що у нас з С. 117 00:06:10,392 --> 00:06:15,020 При ми використовуємо Свіфта, таким чином, який щойно написав у текстовому файлі 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 За замовчуванням, функція друку в Свіфт друку нову лінію для вас. 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 що це переменная-- або знову 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 що ми могли б бути звикли бачити в С. 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 а потім за допомогою зворотної косої межі відкриті дужки, а потім ім'я мого змінної, 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 що я хочу, щоб використовувати Свіфт інтерпретатор, 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 І це тому, що компілятор, Свіфт може 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-- нехай ім'я товстої кишки Рядок дорівнює 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-- ми використовувати Вар ключове слово, а не нехай. 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 то я повинен сказати, що Свіфт Я очікую, що тип даних, щоб бути. 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 >> У цьому випадку, Свіфт надзвичайно суворий про типи 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 >> Отже, іншими словами, з тим, що Свіфт сильно типізованих 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 Рядок, 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 сорту є змінним переменная-- ми не використовувати нехай ключове слово. 274 00:14:45,350 --> 00:14:49,620 Так це означає, що ми можемо потім змінити вміст цього масиву. 275 00:14:49,620 --> 00:14:53,420 Це типу масив Int, і ми можемо сказати, що 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 Це просто миленький синтаксичний цукор, який забезпечує Свіфт нам. 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 І у нас є, у Свіфта, поняття А для циклу, як можна було б очікувати. 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 І знову, тому що Свіфт дуже сильно набрали, 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 Таким чином, ми тоді явно приведення сума, яку ми обчислюється вище 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 І Свіфт правило, дуже добре про те, в змозі вивести типи. 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 Ми збираємося прийняти переменная-- або, скоріше, в даному випадку, 384 00:21:12,840 --> 00:21:14,450 constant-- називається залікову книжку. 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 залікову книжку змінної. 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 під ризиком Ключове слово тут. 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 Якщо це залікову книжку порожнім, який в даному випадку 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 який є залікову книжку, і на цей раз збирається повернутися подвійний тип. 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 Ну, якщо залікову книжку порожній, а потім ми 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 обчислити середнє якщо у нас є порожній залікову книжку. 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 Вказавши на класі в залікову книжку, що ми говоримо, 433 00:23:56,200 --> 00:24:00,560 є те, що ми збираємося неявно створити нову константу під назвою 434 00:24:00,560 --> 00:24:05,180 сорт, який представлятиме кожен унікальний предмет в залікову книжку 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 першим пунктом у залікову книжку. 438 00:24:09,800 --> 00:24:12,300 Вдруге це буде Другий пункт, так далі, і так далі 439 00:24:12,300 --> 00:24:15,970 до залікову книжку не має вичерпала себе елементів. 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 ОК, які-небудь питання? 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 ДАН AMRMENDARIZ: Чи можете ви повторити це питання? 449 00:24:37,520 --> 00:24:39,587 АУДИТОРІЯ: Чи можу я зробити число як середнє? 450 00:24:39,587 --> 00:24:41,670 ДАН 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 ДАН 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 >> ДАН 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 Я можу встановити тип повертається в ціле, повернутися сюди 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 Але внизу, коли вам зробити повернутися подвійний подвійний, 470 00:25:35,502 --> 00:25:38,280 що вже автоматично повернення подвійному форматі. 471 00:25:38,280 --> 00:25:42,278 Чому ви все ще повинні визначити його зі стрілкою на вершині з подвійною? 472 00:25:42,278 --> 00:25:45,010 >> ДАН AMRMENDARIZ: Так У разі, це частина 473 00:25:45,010 --> 00:25:50,580 з the-- так, щоб повторити питання, бо це неявне від повернення 474 00:25:50,580 --> 00:25:56,030 типи тут, те, що це насправді тип , Ми повинні бути чітко з Свіфт 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 >> ДАН 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 Це введення їх в залікову книжку. 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 в С та іншими мовами, перший 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 що аргумент в ціле шляхом виконання явного приведення типу, 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 >> АУДИТОРІЯ: Ніл є N-я-L? 546 00:30:09,652 --> 00:30:11,110 ДАН AMRMENDARIZ: нуль є N-я-Л, так. 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 Таким чином, важливо, винос є те, що додатковий тип роду метатіп. 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 Це дещо схоже на хеш-таблиці в С. По суті, це відображення ключів 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 Це говорить залікову книжку в три сортів, pset1, pset0, іспит. 587 00:32:33,740 --> 00:32:36,120 І залікову книжку має цей конкретний середньому. 588 00:32:36,120 --> 00:32:38,370 Отже, ще раз, ми працюємо з цією ідеєю залікову книжку, 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 взявши залікову книжку, яка є Словники, яка має ключі і значення. 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 >> І це одна річ, яка змінюється від 1 до Swift Swift 2. 612 00:34:06,939 --> 00:34:08,730 Там колись Python style-- якщо ви 613 00:34:08,730 --> 00:34:13,219 знайомі з 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 що, якщо насправді залікову книжку не має значення всередині неї? 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 є те, що у нас є це що називається дитячий майданчик. 640 00:35:47,450 --> 00:35:51,470 І це майданчик зовсім не додаток IOS. 641 00:35:51,470 --> 00:35:54,751 Але це дозволяє експериментувати з Свіфт в дуже простий спосіб. 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 При створенні нового файлу, він буде просити Ви, якщо ви хочете створити Експозиція. 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 що Свіфт працює, і його ця ідея замикань. 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 Все інше про цих двох функції, сила і влада 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 Повертається тип, в дужки, Двомісний подвійну стрілку. 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 Це приймає подвійну і повернення в два рази. 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 І воно приймає в двомісному і повернення в два рази. 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 при у, що означає, що це значення у цієї функції 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 >> Так помічати, що Свіфт говорить, що я створили в цьому випадку. 734 00:41:05,900 --> 00:41:10,550 нехай квадрат визначення, це це функція, яка приймає подвійну 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 Як я можу сказати, гаразд, добре тепер я хочу щоб створити нову функцію, 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 Це дійсно важливо для розуміння API, а також 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 ДАН 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 бо ми створили потенціюючи функціонувати в п'ятому ступені, 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 >> ДАН 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 ДАН 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 Це чекаючи цей вхід Подвійний. 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 і повернення в два рази. 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 ДАН 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 ДАН Armendariz: Чи є, які, вибачте ,? 851 00:47:12,702 --> 00:47:15,360 АУДИТОРІЯ: Чи є у Perl це долар 0, долар 1-- 852 00:47:15,360 --> 00:47:17,318 ДАН 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 Насправді, Свіфт запозичує багато можливостей, як це 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 і shoehorns їх всі разом в один супер мову. 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 Свіфт має експоненту Вбудована функція в. 867 00:48:02,120 --> 00:48:04,660 Якщо я імпортувати Дарвіна, який це просто бібліотека, 868 00:48:04,660 --> 00:48:09,680 має цієї функції називається військовополонених, в даний час Я можу спростити свою владу функції 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 ОК, це здорово. 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 Але я можу, у Свіфта, визначити нову Оператор, який робить саме це. 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 [Карколомне ЗВУК] Це по саме по собі має зробити вас як, 911 00:50:34,420 --> 00:50:37,960 ОК, гвинт C. Я йду Свіфт весь шлях. 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 ОК, так? 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 >> ДАН 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 >> Ну, давайте скажемо, що я хочу, прийняти цей оператор, що я 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 >> І ми могли б зробити те ж саме річ для кубатури його, 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 у змінній під назвою F, що відбувається взяти подвійну і повернути подвійну. 969 00:53:40,990 --> 00:53:43,320 І весь вихід всієї цієї функції 970 00:53:43,320 --> 00:53:47,310 називається перетворювач буде повернути масив з ім'ям двічі. 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 побачити багато функцій які використовуються в Свіфт 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 Ми збираємося пройти, що Масив в нашій картографа. 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 ДАН 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 У цьому випадку ми були або квадратура його, або ми були кубатури його, 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 >> Таким чином, в іншому слова, це та ж ідея, то залікову книжку. 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 Я виконую цей фільтр робота на кожному з них. 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 що очікує прошивкою, насправді це відчуває себе трохи чарівним. 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 ця функція і ця адреса, яка надається за телефоном. 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 І дійсно, все це в Свіфт спосіб перевірки 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 Я міг би знайти URL по працює ця функція 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 але переконайтеся, що це насправді так, що гіперпосилання 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 дозволить вам продовжити гіперпосилання будучи належним чином визначені. 1132 01:03:46,110 --> 01:03:48,830 Але якщо це так, що гіперпосилання, не правильно визначені, 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 >> АУДИТОРІЯ: Так що це свого роду з Like An, якщо потім ще? 1138 01:04:04,839 --> 01:04:07,130 ДАН Armendariz: Це свого роду Like An, якщо потім ще, так, 1139 01:04:07,130 --> 01:04:14,200 крім того, що це гіперпосилання потім визначається для всього нижче цього. 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 >> ДАН 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 >> ДАН 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 з Свіфт, 1165 01:05:54,490 --> 01:05:57,481 особливо якщо ви йдете в Розробник веб-page-- від Apple 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