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 Все остальное об этих двух функции, сила и власть 3 2, 692 00:38:46,910 --> 00:38:50,440 являются, по сути, идентичны, поскольку они работают таким же образом. 693 00:38:50,440 --> 00:38:53,460 >> Таким образом, на данный момент, немного Тревожный звонок должен идти прочь. 694 00:38:53,460 --> 00:38:56,200 Надеюсь, что вы говорите, Вы знаете, это чувствует себя немного 695 00:38:56,200 --> 00:38:59,250 как дублирования усилий. 696 00:38:59,250 --> 00:39:02,950 Может быть, есть способ, который я бы иметь возможность инкапсулировать все это 697 00:39:02,950 --> 00:39:06,630 и обеспечивают функцию или создать функцию, которая 698 00:39:06,630 --> 00:39:11,550 делает именно то, что я хочу, не необходимости ввести его в явном виде. 699 00:39:11,550 --> 00:39:15,732 И это то, что власть из закрытия позволяет нам делать. 700 00:39:15,732 --> 00:39:16,940 Итак, давайте взглянем на это. 701 00:39:16,940 --> 00:39:18,700 И я буду тратить пару минут на это, потому что это 702 00:39:18,700 --> 00:39:20,310 довольно важно для Swift. 703 00:39:20,310 --> 00:39:22,900 Мы видим это все время. 704 00:39:22,900 --> 00:39:24,550 Мы собираемся, чтобы определить функцию. 705 00:39:24,550 --> 00:39:26,380 Это будет называться powerOf. 706 00:39:26,380 --> 00:39:29,470 Это собирается приму в параметр, называемый у типа Int. 707 00:39:29,470 --> 00:39:32,220 Но взгляните на тип возвращения. 708 00:39:32,220 --> 00:39:38,730 Возвращаемый тип, в скобки, Двухместный двойную стрелку. 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