>> [Играет музыка]
>> ДАН AMRMENDARIZ: Все, Добро пожаловать в CS50 семинара,
IOS App развития с Swift.
Я Дэн Армендарис, и я наставником информатики здесь в Гарварде.
>> И следующий час будет беглый тур как много вещей
об этой теме, как мы можем соответствовать.
Я буду размещать все исходного кода что вы увидите сегодня в Интернете.
Мы не могли бы на самом деле идти по всем
что я, что я показывая вам в этот час.
Но по крайней мере, мы надеемся, через комментарии исходного кода,
Вы сможете попробовать выяснить, что именно происходит за те вещи,
что мы не совсем добраться.
>> В целом, структура сегодняшняя беседа будет следующим.
Мы начинаем делать некоторые основные Синтаксис с Swift языка,
вдаваясь в некоторые более продвинутые Синтаксис Свифта языке.
Потому что язык действительно современный и его
есть много высоком уровне особенности, вещи, которые мы не
видел в C на протяжении CS50 или даже некоторые другие языки
что мы начали использования в CS50, как PHP,
так что я буду иметь, чтобы попытаться также вводить некоторые темы, которые
связаны с высокоуровневых языков что вы не можете видеть в глубине CS50,
но вы увидите позже компьютерные науки классы.
Так что это будет плотно час.
И, пожалуйста, не стесняйтесь, дайте мне знать, если у вас есть какие-либо вопросы.
Так что, если вы заинтересованы в этом развитие
с Swift, или действительно любое развитие IOS приложение,
Есть несколько требований.
Прежде всего, вы должны использовать Мак, работает в примерах
что мы собираемся использовать сегодня, относительно новая версия ОС
X. В этом случае, я бегу X 10.5.
Вы можете быть запущен 10.11, если вы хотите.
Но все, что вы собираетесь видите, с участием Xcode 7 и более поздней версии,
который имеет последнюю версию Свифта, который Свифт 2.0.
Это на самом деле довольно важное различие.
Много синтаксис довольно существенно изменилась
в некоторых случаях от Swift 1.0, который был выпущен в прошлом году,
Свифта 2.0, только что вышел осенью этого года.
Итак, мы собираемся, чтобы показать Свифт 2.0.
Много вещей, которые Вы ищете в Интернете
когда вы пытаетесь получить дополнительную информация о различных вещей,
Вы можете явно искать Swift 2
чем просто старый Swift сделать Убедитесь, что вы получаете синтаксис правильно.
>> На самом деле, это в целом верно.
Там это быстрый количество развития происходит в Swift языка
С тех пор компания Apple выпустила его, я думаю, Что, это было чуть больше года
Теперь.
И все изменилось резко в то время.
И так что не будут разочарованы если, когда вы ищете вокруг
по темам по Swift или как выполнить то с помощью некоторых пример кода
или что-то, что это не на самом деле работает на Swift 2.0.
Убедитесь, что вы ищете специально для этой версии
чтобы попытаться свести к минимуму влияние различных версии и те виды вещей.
>> Я постараюсь указать на некоторые вещи просто что отличаются от старых версий.
Но это что-то упустить.
Это, вероятно, будет один из самых больших головных болей
что вы будете иметь с Swift находит пример кода, который старше, даже просто
на несколько месяцев, пытаясь использовать это в более современной проекта.
И это просто не работает.
Вы получаете ошибки компилятора, синтаксис Ошибки, всякие сумасшедшие вещи.
Так что просто будьте терпеливы с что и вы, мы надеемся,
есть довольно хороший опыт с Swift в целом.
>> Теперь вы можете на самом деле join-- и я надеюсь, мы на самом деле до сих пор эта этой год--
CS 50 Яблоко приложение Команда разработчиков, которые
позволит вам устанавливать какие-либо приложения которые вы создаете на вашем IOS устройств.
Так взгляните на этот URL, если Вы заинтересованы в этом, что.
>> Так что пару вещи, о самой быстрой.
Это компилируемый язык.
Но вы увидите, что некоторые из особенностей, которые мы используем
позволяют использовать его также в немного как интерпретируемый, как хорошо.
>> Много синтаксиса заимствовано из C. Он основан и написан на C.
И таким образом, мы увидим, что Есть много еды на дом
от существующей знаний из С, что мы можем порт Swift.
>> Но есть вещи, которые сделать это очень отличается от C.
Это очень сильно набрали.
Там это автоматическое управление памятью.
Вы не будете иметь, чтобы использовать таНос или бесплатно в любом месте.
Он предназначен для обобщения.
Итак, другими словами, вы можете использовать его в все виды контекстов, из Apple Наблюдать
в iPhone все, вплоть до OS X, и даже некоторые серверы, даже некоторые сценариев.
Но мы видим, что поддержка сценариев
не совсем там еще, как это на других языках.
Так что скорее всего вы будете использовать это исключительно для развития
на вашем компьютере или в вашем iPhone.
>> И она имеет много современных функций.
И многие из этих вещей вещи, которые мы собираемся, чтобы попытаться решить сегодня,
но также наши темы, которые, откровенно говоря, мы можем посвятить всю курсы.
В самом деле, CS 51, который предложил в следующем семестре,
фокусируется много на эти темы которые описаны ниже.
Таким образом, вы можете провести весь семестр понимание этих вещей.
Но мы собираемся, чтобы попытаться получить через них
по крайней мере, достаточно, чтобы вас может понять, что
происходит, когда вы смотрите в Swift программы
и быть в состоянии взломать ваш путь через него для окончательного проекта.
>> Теперь один из лучших способов, которыми вы можете получить дополнительную информацию об этом
откровенно просто через Apple, предоставил документацию для Swift.
Там очень много API, которые доступны.
И это хорошая базой для вас искать, конкретных вещей, которые вы
хочу сделать с API с участием IOS.
Если вы хотите использовать камеру для Например, вы можете начать искать здесь,
а также использовать Google и стек Переполнение, как обычно.
>> Любые вопросы по этой прежде, чем мы прыгать прямо в?
Отлично.
Давайте двигаться дальше.
>> Итак, сначала, у меня есть Количество примеров файлов.
И я собираюсь попытаться шаг через них относительно быстро.
Это Hello World файла для Swift.
Это очень просто.
Там путь более комментариев чем есть реальный код.
Обратите внимание, что фактический код находится в В самом низу в строке 14.
Это говорит печать.
И тогда это вызов функции.
Мы проходя в него строка называется Hello CS50.
Обратите внимание, что нет никаких запятой.
Обратите внимание, что нет INT основной.
Там нет ни один из хлама, что у нас с С.
При мы используем Свифта, таким образом, который только что написал в текстовом файле
и хранится на моем компьютере, а затем Я могу скомпилировать его и запустите его.
>> Обратите внимание, что здесь я не используя CS50 IDE.
Это предполагает, что я работает и что я на OS X,
и что я уже установлена ​​Xcode на этой машине для того, чтобы это
на самом деле функции.
Но это всего лишь обычный текстовый файл что мы можем скомпилировать и редактировать.
Итак, давайте посмотрим, как это работает на самом деле.
Что делать, если я хочу, чтобы скомпилировать его?
swiftc 1.Swift.
Через некоторое время или два, это увидите, что мы имеем сейчас
составлен этот код в файл под названием 1.
И теперь мы напечатали нашу CS50, наше приложение Hello World, а.
>> Обратите внимание одну вещь как хорошо, что по умолчанию,
мы не должны ввести а / п для печати на новую строку.
По умолчанию, функция печати в Свифт печати новую линию для вас.
Вы можете передать необязательный дополнительный Параметр, чтобы сказать ему, чтобы не сделать так.
Но Google для получения дополнительной информации о том, что.
По умолчанию, он будет делать печать линию.
>> Ладно, так что давайте двигаться дальше затем с некоторыми другими вещами.
Так как мы можем на самом деле определить переменные?
Мы можем сделать это с помощью один из двух методов.
И тот, который я хочу вам сказать, о-первых, это пусть определения.
И это важно потому эффективно
то, что мы делаем, определяя константу.
Мы собираемся создать переменную, или, скорее, постоянная называется имя,
обеспечить ему некоторые data-- в этот случай, строка Дан.
Но с помощью этого Пусть Ключевое слово, мы говорим
что это переменная-- или снова constant-- называется
имя никогда не будет изменен.
Это собирается быть неизменными на протяжении продолжительность этой программы
или в течение Продолжительность контексте
что это переменная доступна.
>> Это действительно важно, что, когда у вас есть данные, которые не
собирается менять в своей программе, и вы увидите разнообразные примеры
о том, когда мы хотим использовать пусть по сравнению с другим синтаксисом,
важно, что вы используете пусть там, где это возможно, потому что этого извещает
язык, что это не будет изменен,
и он может фактически выполнять много оптимизаций
для повышения скорости и безопасность вашей программы.
И безопасность, я имею в виду не позволить это крах с сумасшедшими ошибок
что мы могли бы быть привыкли видеть в С.
>> Тогда мы можем использовать строку интерполяции инкапсулировать это в строке.
Итак, мы видим в этом печать линии, распечатать привет,
а затем с помощью обратной косой черты открытые скобки, а затем имя моего переменной,
в этом случае константы, закрыть скобки.
Я по существу затем положить Содержимое этой переменной называется именем
внутри строки, а затем печать результат есть.
>> Там еще одна изменение этого файла что что у меня есть, на самом верху,
положить в хижину линии, которые в основном только определяет
что я хочу, чтобы использовать Свифт интерпретатор,
означает, что я больше не придется компиляции этой программе.
Я могу только запустить его, как своего собственного сценария.
Но это, в данном случае, за сцены составляется, а затем
бежится.
Это просто невидимы для нас.
>> Ладно, так что давайте двигаться дальше.
Так что это немного хитрости что только что произошло раньше.
Я показал вам, что я может определить константу.
И я мог бы предоставить некоторые данные, чтобы сделать это.
Но в этом случае, обратите внимание, что я не сделал на самом деле указать тип данных,
что это.
И это потому, что компилятор, Свифт может
определить тип данных, основываясь только от данных, которые я вложил в нее.
Потому что он знает, что, оценивая это Переменная прямо здесь, это право данные
Здесь, он знает, что это строка.
И так это постоянное имя, поэтому будет строку, как хорошо.
>> Но мы также может быть явным о типе, что это
мы собираемся использовать для постоянные и переменные
с помощью этого синтаксис instead-- пусть имя толстой кишки Строка равна
Дэн, который в данном случае означает, что мы будет определять постоянную названием имя.
Это будет типа String.
И ценность будет Дан.
Теперь в другую сторону, что мы можем создать variables--
и эти изменяемые переменные, которые означает, что мы, по сути, происходит
изменить их содержание нибудь в длительности контексте
что эта переменная defined-- мы использовать Вар ключевое слово, а не пусть.
Но, опять же, по умолчанию, если вы не знаете, что вам нужно, чтобы манипулировать, что данные,
попробуйте использовать пусть для улучшения производительности.
>> В этом случае, я могу указать тип данных,
что мы ожидаем, чтобы быть внутри это новая переменная называется метка.
Это собирается быть строкой.
И мы собираемся, чтобы затем соедините две строки вместе, строка привет,
и строка лице Проекта Переменная, или, скорее, имя константы.
>> Так что это хорошо, потому что это в несколько PHP, как и в этом мы
есть очень простой конкатенации.
Мы не должны автоматически использовать какой-либо управления памятью
увеличить размер и делать какой-либо забавных вещей там.
Это работает, как мы бы на самом деле ожидать.
>> Ладно, какие-либо вопросы по этому поводу?
>> Теперь другая причина, что мы нуждаемся в вас есть способность
чтобы быть в состоянии определить, что тип переменных данных являются
потому что иногда мы не хочу, чтобы инициализировать переменные
с некоторыми данными на точка определения.
Таким образом, в этом случае, скажем, что я хочу, чтобы начать ввод
некоторые сорта в книге класса.
Ну, я знаю, что один из переменные, которые я хочу быть
будет изменчивая сорта.
И мы также знаем, что мы хочу, чтобы это было целое.
Но, может быть, мы еще не есть, что сорт доступны.
>> В Swift, вы должны определить тип данных,
который связан с переменная или константа пусть
Прежде чем вы действительно использовать эту переменную.
Потому что это сильно типизированных, Вы должны ассоциировать тип
с этими переменными.
>> Таким образом, в этом случае, если я не правильно инициализируется первым с некоторым значением,
то я должен сказать, что Свифт Я ожидаю, что тип данных, чтобы быть.
И это останется что тот же тип данных
на протяжении всей истории этой программы.
>> Теперь вы можете быть искушение, как только Я создал эту переменную класса
и при условии, что в число 100, теперь, если я
хочу попробовать объединить строка с этой числа,
может возникнуть соблазн по-прежнему использовать что оператор конкатенации
как мы сделали всего несколько строк, прежде чем.
Но, к сожалению, это будет на самом деле не
работать, потому что вы по существу, выполняя
операция на двух различных типов.
>> Теперь это очень отличается от других Языки, как PHP, которые действительно
loosey неуравновешенный с их рода типов.
Они просто хотели, да, все, я не волнует.
Просто дайте мне один тип и может быть, я буду делать правильные вещи.
>> В этом случае, Свифт чрезвычайно строг о типах
что вы имеете дело с.
Этот оператор суммирования или оператор конкатенации
по существу имеет пару различные возможные варианты.
Вы можете сделать суммирование с целыми числами, или вы
можно сделать конкатенацию, и возможно, некоторые другие вещи, как хорошо.
Но если оператор не признает то, что на обе стороны от него,
или, скорее, сочетание этих два типа, это не то, что ждет,
то это будет вызывать сбой.
>> Таким образом, в этом случае, что это значит иметь строку плюс целое число?
Хорошо в контексте это, мы, вероятно, хотите
сделать операцию конкатенации.
Но, конечно, компьютер не имеет, что-то из контекста.
И поэтому мы должны обеспечить что дополнительная информация
чтобы она знаю, что это является то, что мы хотим сделать.
>> Итак, другими словами, с тем, что Свифт сильно типизированных
означает, что вы должны сделать немного дополнительной работы
чтобы получить это, чтобы управлять путь, который вы хотели бы.
Но в результате, это безопаснее.
И как только у вас есть взять в счет тех видов,
вещи просто откровенно начать работать очень хорошо.
>> Таким образом, в этом случае, мы тогда бы выполнить конкатенацию
явным литья целое число в строку
обернув его в этом Столица функция S Строка,
а затем с помощью конкатенации Оператор изменить нашу переменную метки,
а затем распечатать его.
>> Все идет нормально?
Ладно, давайте двигаться дальше.
>> Сейчас есть множество данных типы, которые мы можем использовать в Swift.
Как вы уже привыкли к, мы можем создать изменяемый массив.
И, что массив может только содержать один тип.
>> Таким образом, в этом случае, мы собираемся создать изменяемый массив целых чисел, которые
мы будем называть оценки, и мы сможем для хранения, что в этом квадратной скобки
формат, как вы привыкла в различных других языках.
Но обратите внимание, что здесь мы определение пару вещей.
сорта является изменяемым переменная-- мы не использовать пусть ключевое слово.
Так это означает, что мы можем затем изменить содержимое этого массива.
Это типа массив Int, и мы можем сказать, что
на основе этих квадратных скобках здесь.
>> Теперь один из хороших вещей о том, что мы
иметь доступ к много Дополнительная информация
о массиве только с помощью некоторые простые точечной нотации.
Так, например, grades.count обеспечивает нас
количество элементов, которые существуют в том, что массив, мы можем получить доступ к довольно
легко просто с помощью точечной нотации, что.
>> Если вы хотите добавить дополнительные предметы в этом массиве,
Вы не можете сделать стиль PHP где вы просто явно определить,
по данному индексу, некоторое значение что вы хотите вставить.
Вместо этого, используйте команды добавления Способ типа массива
добавить этот пункт, 95, к этому списку.
>> Так что теперь этот массив имеет следующее contents-- 100, 0, 90, 85.
И теперь мы приложили 95 к тому, что, как хорошо.
>> Есть и другие способы мы можем добавить вещи.
Вы можете использовать оператор суммирования,
который будет интерпретироваться как операция массив добавлением.
И вы можете добавить еще один, то Массив, содержимое которого 70 и 80,
в этом массиве.
Так что теперь у нас есть Содержание в этой переменной
grades-- 100, 0, 90, 85, 95, 70 и 80.
Это просто миленький синтаксический сахар, который обеспечивает Свифт нам.
>> Так что, если мы хотим, чтобы суммировать сортов, мы, возможно,
захочет повторять над каждым пунктом в этом цикле.
И у нас есть, у Свифта, понятие А для цикла, как можно было бы ожидать.
Но путь, который мы указываем диапазон немного отличается.
Таким образом, в этом случае, чтобы Подводя все, мы будем
собирается создать временный Переменная называется сумма для того, чтобы нас
чтобы сохранить этот счет.
>> И заметьте, наш для цикл строительства здесь.
Для индекса в 0 .. <grade.count.
Таким образом, это строительство, 0 .. <grades.count это рабочий диапазон, где мы
сказав, что мы собираемся создать диапазон целых чисел от 0 до
чтобы исключая grades.count.
Так что это будет 0, 1, 2, 3, 4, 5, до тех пор, пока Однако многие друг
Перед grades.count.
>> Так что это отличается от, как мы обычно используется для петель
где вы есть индекс Переменная, установите его равным 0, во-первых,
а затем интегрировать, что до некоторых значение меньше, чем количество элементов
в этом массиве.
>> Так что есть модификация к этому, на самом деле,
что позволяет очень легко установить различные типы диапазонов.
Если вы измените этот диапазон для три точки, 0 ... grade.count,
это представляет диапазон 0 чтобы grades.count включительно,
Это означает, что это число также затем включаются в этом диапазоне.
>> Но это очень удобно для этих точных вещей,
когда мы должны выполнить итерации цикла более
потому что эти индексы равны нулю индексируются, как мы видели в других языках
также.
Любые вопросы по этому для цикла?
>> Так что неявное определение этой индексной переменной,
значение которого начинается с 0, и продолжается в каждой итерации цикла
не увеличится на 1 до тех пор, точки что равно grades.count,
в какой точке, цикл прерывается.
>> Обратите внимание, что в нашей строке интерполяции здесь,
мы можем на самом деле выполнить некоторые простые манипуляции с этими значениями.
Так индекс плюс 1 будет на самом деле выполнить суммирование стоимости этого
потому что индекс, в этот случай, целое число.
И в тот момент, он будет Затем быть преобразованы в строку
и в эту строку здесь, и распечатать, как можно было бы ожидать. ,
>> И хорошая вещь о массивах здесь
что мы также в состоянии иметь Извлечение значения и значения параметров
используя квадратный обозначения кронштейн как мы видели в других языках.
>> Ладно, так здесь, мы теперь вычислить наш сумму всех наших марок.
Теперь вроде следующего логическим шагом было бы
сделать операцию деления, чтобы найти из среднего этих марок.
Но что-то важное здесь происходит, который
является то, что эта сумма может быть, целое число.
Но мы должны выполнить некоторые Сортировать двойного деления.
И это будет чрезвычайно важно, когда
мы хотим, чтобы выполнить эту операцию, потому что то, что мы говорим,
является то, что мы на самом деле нужно выполнять деление на два двухместных.
И снова, потому что Свифт очень сильно набрали,
мы должны явно установить все предметы в парном разряде, прежде чем мы на самом деле
выполнить эту операцию.
>> Так для того, чтобы нас выполнять двойную разделение,
это не достаточно только для одного из тех пунктов, которые будут в два раза.
Оба из них должны быть дважды для того, чтобы быстрым
чтобы убедиться, что это это то, что мы хотим сделать.
Таким образом, мы тогда явно приведение сумма, которую мы вычисляется выше
и количество сортов до удваивается, и затем выполнить эту операцию и магазин
что в этом новом переменной, или, скорее, это новая постоянная называется среднем
которые будут иметь какой тип, вы представляете?
Двухместный, да.
Таким образом, в этом случае, мы не нужно указывать его
потому что это может быть выведено из работа, какой тип данных в среднем
будет.
И Свифт правило, очень хорошо о том, в состоянии вывести типы.
>> Вы хотите, чтобы это бежать, или я могу двигаться дальше?
Я хочу, чтобы продолжать идти.
Любые вопросы по любой из этого?
Отлично.
>> Теперь мы собираемся, чтобы начать, чтобы добраться до хорошие stuff-- определяющие функции,
и несколько других типов, которые уникальным для Swift, что у вас нет
видно на других языках до этого момента,
но они присутствуют в другом языки, которые вы могли бы найти позже.
Итак, сначала, если вы хотите определить функцию,
Вы определяете его с фанки слова Функция, а затем имя функции,
а затем в скобках, аргументы что вы хотите, чтобы функция принять.
Аргументы должны также specify-- generally--
необходимо также указать тип данных, которые они, если они не могут быть случайными.
И мы увидим, что немного предостережение в только немного.
>> Таким образом, в этом случае у нас есть Функция называется printGradeCount.
Мы собираемся принять переменная-- или, скорее, в данном случае,
constant-- называется зачетную книжку.
И это будет иметь типа массив из целых чисел.
Теперь есть что-то что действительно важно здесь
что я хочу, чтобы вы поняли.
Это, что по умолчанию эти аргументы что входы в этой функции
определяется с неявной, пусть ключевое слово, Это означает, что я не могу изменить это
зачетную книжку переменной.
И что-то имеет смысл, потому что вы передаете данные в.
И вы, возможно, не хотите его чтобы быть изменены из-под вас.
Можно отметить явно что это является переменной, поместив
под риском Ключевое слово здесь.
Но это глюк, что мы заметил люди сделали в прошлом
является то, что они предполагали, что это будет чтобы быть переменной, когда, на самом деле, это
является константой.
>> Ладно, так вот тогда, в этом случае, мы не указав любой тип возвращаемого значения.
Мы покажем вам, как сделать что в минуту.
Но обратите внимание, что здесь мы имеем простой, если состояния.
Если это зачетную книжку пустым, который в данном случае
это просто свойство этого числа Массив, то распечатать что-то.
В противном случае мы делаем что-то еще.
>> Довольно просто до сих пор, я думаю.
Но остановить меня, если у вас есть какие-либо вопросы.
>> Теперь эта функция, в среднем, также принимает некоторые аргументы, или, вернее, один аргумент,
который является зачетную книжку, и на этот раз собирается вернуться двойной тип.
Потому что вычисления средняя, ​​и это
происходит на самом деле, что вернуться компьютерная среднем вызывающей линии.
>> В этом случае, мы указать вернуться типа после стрелки.
И это может чувствовать себя немного странно на первый взгляд.
Вы привыкла установлению возвращение
тип перед именем функции.
Но если вы думаете об этом с точки зрения математики,
например, когда у вас есть математику которые определяют функцию,
у вас есть функция с некоторыми Входы, и выдает выходной сигнал.
И это именно то, что это, как предполагается, чтобы имитировать.
И есть несколько других языков которые имеют похожий синтаксис, а также,
но, вероятно, не, что ни один вы видели в CS50.
Но до сих пор не смущайтесь этим.
Стрелка означает, что происходит должны быть возвращены в этом случае.
Итак, как мы собираемся вычислить это среднее?
Ну, если зачетную книжку пуст, а затем мы
собирается вернуться 0, что, может быть, разумный способ лечения этого.
Я не знаю, давайте приходят вернуться к этому в немного.
Это не может на самом деле быть разумным способом
вычислить среднее если у нас есть пустой зачетную книжку.
>> Тогда мы просто выполняем свою суммирование.
Обратите внимание, что здесь мы на самом деле есть альтернативный вариант
цикл, что позволяет для перебора над каждой позиции в массиве
и поместите каждый элемент в свою переменную.
Указав на классе в зачетную книжку, что мы говорим,
является то, что мы собираемся неявно создать новую константу под названием
сорт, который будет представлять каждый уникальный предмет в зачетную книжку
каждый раз, что для цикла итерации.
Так в первый раз, что это запустить, класс будет
первым пунктом в зачетную книжку.
Во второй раз это будет Второй пункт, так далее, и так далее
до зачетную книжку не имеет исчерпала себя элементов.
Тогда мы сможем подвести, что переходят в нашей переменной суммирования
и вернуться на нашу среднюю как мы видели раньше.
ОК, какие-либо вопросы?
Да?
Зала: У меня два вопроса.
Номер один, гипотетически, может запустить целое на этом?
Не нужно быть дважды, это правильно?
ДАН AMRMENDARIZ: Можете ли вы повторить этот вопрос?
АУДИТОРИЯ: Могу ли я сделать число как среднее?
ДАН AMRMENDARIZ: Можете ли вы сделать целое, как в среднем?
Так возвращают целое число, Средняя вместо двойной?
>> АУДИТОРИЯ: Return-- вас есть, что сейчас ниже.
ДАН AMRMENDARIZ: Прямо здесь, вернуться 0.0?
АУДИТОРИЯ: Да, просто вернуть 0.
Так это будет либо 80 или 85, но не 85,2.
>> ДАН AMRMENDARIZ: Таким образом, в этом случае, так что пару различные способы
ответить на это.
Позвольте мне ответить на них в порядке.
Так что, если я просто сделать это возвращение 0, а 0 является целым числом.
И так, что вызовет Ошибка типа в этом случае
потому что он ожидал двойной но затем возвращаются целое.
Если я хочу, чтобы возвращать целое число, я могу.
Я могу установить тип возвращаемого в целое, вернуться сюда 0,
и не выполняют двойную деление.
Но тогда мы были бы делает целое подразделение.
И так мы тогда не получили бы Средняя что мы, возможно, ожидали.
Но да, мы можем изменить типы таким образом.
>> АУДИТОРИЯ: А во-вторых, вам есть один двойной на вершине.
Но внизу, когда вам сделать вернуться двойной двойной,
что уже автоматически возвращение двойном формате.
Почему вы все еще должны определить его со стрелкой на вершине с двойной?
>> ДАН AMRMENDARIZ: Так В случае, это часть
из the-- так, чтобы повторить вопрос, потому что это неявное от возвращения
типы здесь, то, что это на самом деле тип , мы должны быть четко с Свифт
о том, что мы хотим, чтобы вернуться из этой функции
так что, когда он выполняет тип проверки, он может убедиться, что
что то, что мы на самом деле написано внизу на самом деле соответствует этому.
Так что это вроде как проверки с самим собой своего рода ситуации.
Но are--
>> АУДИТОРИЯ: [неразборчиво] стрелка?
>> ДАН AMRMENDARIZ: Есть случаи, когда мы можем указать, что мы можем неявно
установить тип возвращаемого значения.
Но в этом случае, я не думаю, что будет работать.
Там какая-то другая синтаксис что мы увидим позже.
>> Ладно, так что это источник код немного отличается
потому что это разбирает аргументы из функция, мы называем.
Позвольте мне показать вам, как это работает прежде, чем мы на самом деле двигаться дальше
в некоторых интересных вещей что происходит в Swift.
>> Таким образом, в этом случае, если я просто запустите этот Код, заметить, что то, что он делает
is-- в то время, это своего рода дает мне странные ошибки.
Мне нужно, чтобы передать ей пару целые как аргумент командной строки.
Итак, давайте посмотрим, 150 и 80, и жмём Enter чтобы выяснить, что это на самом деле делает.
Это принятие каждой из эти значения как целые числа.
Это ввода их в зачетную книжку.
И тогда он выполняет что средняя расчет
и вывода, что, как мы ожидали.
>> Но, очевидно, что-то происходит с этой отвергающей то
то как целое.
Как вы, возможно, помните из когда мы были дело с аргументами командной строки
в С и других языках, первый 0-й элемент в этой аргумента командной строки
Список название команды что мы на самом деле выполняются.
Таким образом, в этом случае, я просто цикл более всех аргументов командной строки.
Но я не делаю каких-либо фантазии проверить пропустить что первый.
Я просто явно или неявно Я проверки, какой из этих типов
целые числа, прежде чем я на самом деле выполнить это вычисление.
>> И это, по существу что тут происходит.
Для каждого аргумента в аргументы процесса,
Я собираюсь выполнить некоторые проверки.
И в этом случае, я собираюсь попробовать сначала преобразовать
что аргумент в целое путем выполнения явного приведение типа,
потому что это, на входе, строка и на самом деле не целое число.
>> Но это своего рода странный синтаксис, если позволить оценка равна Int (аргумент).
Что на самом деле происходит здесь чрезвычайно
важно, чтобы ваш использованием Swift.
Это то, что с помощью называется дополнительный тип.
>> Таким образом, это функция, Int (аргумент), возвращает не только целое число, а возвращается
то, что называется необязательным целым.
И таким образом, это своего рода тип сверху типа.
Вы можете сортировать представить это, как это возвращение, как пакет.
И когда вы открываете, что Пакет, он либо
имеет целое число, которое является результатом, или это не имеет абсолютно ничего в нем на всех.
И это полезно в качестве проверки на ошибки Механизм, потому что в этом случае
мы можем узнать, это было Преобразование успешным видом?
Если это так, то это на самом деле будет иметь целое внутри.
В противном случае это будет иметь некоторые Значение, которое мы будем называть нулевым, что
является представителем целого не на всех.
Это действительно представитель ничего.
>> И так это, если строительство позволяет нам развернуть этот пакет,
что дополнительный связывания.
И если мы в состоянии развернуть, что пакет и найти целое внутри,
то, что мы говорим здесь является то, что мы будем затем
позволяют это значение установлено в быть эта постоянная называется сорт.
И эта часть, если заявление, верхняя часть, если заявление
будет работать, потому что это разворачивать был успешным.
>> Если так случилось, что произошла ошибка, возможно,
в этом явного преобразования типа из строки в целое число, может быть,
это значение АВС например.
И это на самом деле не собирается преобразовать в целое число.
Затем он вернется ноль, который не является целым числом.
И это, если заявление и затем провал.
оценка не будет существовать, потому что она не имеет целочисленное содержание.
И он будет работать вместо этого еще блок.
Да?
>> АУДИТОРИЯ: Нил является N-я-L?
ДАН AMRMENDARIZ: ноль является N-я-Л, да.
>> Так что это, возможно, один из тяжелые вещи о Swift,
особенно, когда вы находитесь в сорняки на приложение IOS
и вы на самом деле пытается сделать некоторые разработки есть.
Это будет кричать у вас о необязательной.
Это будет просить вас за вопросительные знаки и восклицательные знаки.
Но как только вы поймете out-- если вы посвятить некоторое время, чтобы выяснить,
что происходит с дополнительными видами, Вы сэкономите много головной боли
как вы пытаетесь написать приложение в Swift.
>> Это на самом деле очень мощная функция.
И вы просто должны принять мои слова для него сейчас.
Но мы увидим, эту конструкцию и некоторые другие нравится
в некоторых других исходным кодом, который мы покажем вам, в только немного.
>> Есть ли какие-первоначальные вопросы здесь?
Таким образом, важно, вынос является то, что дополнительный тип рода метатип.
Она либо есть значение, и если это так, то это
будет, возможно, есть что значение, связанное с ней, или она не имеет никакой ценности,
и она представлена ​​ноль.
Остальные это, пожалуй, как вы ожидаете.
>> Итак, давайте нарастить Трудность еще раз.
И на этот раз, давайте взглянем на некоторые другие типы данных, которые на самом деле существуют.
Одним из них является словари, который очень похож на Python словарей.
Это несколько похоже на хэш-таблице в С. По существу, это отображение ключей
где ключи могут быть строками.
И когда вы смотрите на эти ключи, эти ключи будут иметь значение.
Так что это не совсем массив, но вместо этого, более тесно связаны
в хэш-карте или хэш-таблицы.
>> Давайте посмотрим, как это должно работать, прежде чем мы на самом деле
перейти в самой исходного кода.
Если я просто запустите это, на самом деле ничего не происходит.
Это говорит мне, что я ожидал некоторые параметры следующего типа.
Так что я собираюсь предоставить это некоторые имена проблема установить,
так pset0, может быть, я получил 100.
И pset1, я получил 5.
И тогда на экзамене, я сделал очень хорошо, и получил 30.
И ой, я ударил пространство здесь.
>> Когда я попал Enter, вы можете увидеть он выполняет некоторые вычисления.
Это говорит зачетную книжку в три сортов, pset1, pset0, экзамен.
И зачетную книжку имеет этот конкретный среднем.
Итак, еще раз, мы работаем с этой идеей зачетную книжку,
но мы будем продолжать итерации со сложностью нашей функции.
>> Так в начале, мы просто собирается создать функцию, которая
несет ответственность за использование печати.
И есть этот выход функция, которая будет просто
насильно выйти из приложения.
Это не то, что Вы будете использовать в IOS приложение.
Это только в этом случае, с аргументом командной строки.
Далее мы начнем двигаться в сторону Xcode.
Но это относится только к команде Программа Стиль линии в Swift.
>> Давайте взглянем на некоторые из интересные вещи здесь.
Давайте посмотрим, только пару интересные вещи говоря, возможно,
является то, что в моей функции печати количество сортов,
Вы могли бы вспомнить, что у меня этот список из items-- pset1, pset0, и экзамен.
Вы можете на самом деле быстро и легко сделать это
взяв зачетную книжку, которая является Словари, которая имеет ключи и значения.
Найти все клавиши через метод ключи точка здесь,
а затем использовать эту joinWithSeparator, которые будут затем все ключи
что мы ввели в, pset1-- или извините, pset0, pset1 и exam--
и объединить их вместе через запятую и пробел
чтобы создать одну длинную строку.
Это операция слияния просто феноменально полезно в различных контекстах.
И так это joinWithSeparator.
>> И это одна вещь, которая изменяется от 1 до Swift Swift 2.
Там когда-то Python style-- если вы
знакомы с Python-- питона стиль присоединиться метод на строках.
Но, что более не в случае Swift 2.
Вы хотите, чтобы использовать это, если вы хотите чтобы объединить массив материала
вместе со строкой.
>> Так что, возможно, то в нашем обсуждение среднем раньше,
это делает немного больше смысла для нас, чтобы установить среднюю функцию
чтобы быть необязательным, а дважды чем просто явного вдвое.
Потому что мы были, что необычное состояние, когда,
что, если на самом деле зачетную книжку не имеет значения внутри нее?
Что должен средняя доходность?
>> Ну, может быть, в C вы сделали бы что-то
как предусмотрено значение дозорного, как 0.0, или, может быть отрицательным числом,
или что-то просто, представляющий тот факт, что существует некоторое состояние ошибки
и вы, возможно, на самом деле не имеют способность вычислить, что в среднем.
Ну красота указав дополнительный тип будет это делать.
И я теперь говорят все эти слова, но это на самом деле не использовать УСТРОЙСТВА.
Но мы видим, что в только что минут, где мы можем установить средний
чтобы быть необязательным типом данных, так что если это на самом деле возвращает некоторые данные, а затем
мы вернемся к этим данным.
В противном случае мы вернемся ноль, говорят, что это
не имеет значимого вычислений.
>> Давайте перейдем к что-то еще.
Так отсюда, мы смотрели на все эти примеры в командной строке.
Но на самом деле то, что вы собираетесь чтобы иметь дело с является Xcode.
И одна из хороших вещей о Xcode является, и в частности, в Swift,
является то, что у нас есть это что называется детская площадка.
И это площадка вовсе не приложение IOS.
Но это позволяет экспериментировать с Свифт в очень простой способ.
Вы можете ввести весь код.
Это красиво с подсветкой синтаксиса здесь.
При создании нового файла, он будет просить Вы, если вы хотите создать Экспозиция.
Но хорошая вещь о площадка является то, что в правой части окна,
это на самом деле показать вам, Выход из вашего кода.
Так что, если я прокрутите вниз, мы можем видеть, что выход различных строк кода
на самом деле происходит, чтобы быть.
>> Таким образом, в этом случае, мы собираемся Изменение направления только немного
и говорить о чем-то, что действительно Важно эту высокую образом уровня
что Свифт работает, и его эта идея замыканий.
И вы, наверное, видели это немного в JavaScript.
Для тех из вас, в CS50, затворы
очень популярны, очень хороший способ сделать вещи высокого уровня в современных языках.
Но это также своего рода трудно обернуть вокруг головы в первый раз.
Так что если вы ищете на это первый раз, это нормально.
Просто посмотрите на исходный код и посмотреть, если вы можете понять это у себя дома.
>> Таким образом, в этом случае, давайте скажем, что мы хотите создать много индексов
с некоторым фиксированным значением.
Таким образом, в этом случае я могу создать функцию.
Я буду называть его мощность 2 чья единственная цель в жизни
это займет некоторое вход и дважды это, и вернуть это значение.
Обратите внимание, что здесь я принимая один тип данных.
Это будет переменная называется х.
Это типа Double.
И я собираюсь вернуть Двухместный здесь.
И я просто хочу, чтобы сделать очень, честно говоря, довольно
наивно способ удвоения это значение.
И я покажу вам, почему это Полезно всего секунду.
>> Обратите внимание, что здесь мы имеем этот диапазон еще раз. что-то в 1, точка
точка точка, 2, что означает, что этот цикл будет работать в два раза.
Но это представляет собой фиктивную переменную.
Это означает, что я на самом деле не собирается использовать эту переменную в любом месте
внутри этого цикла.
Я просто хочу эту линию кода для запуска в два раза,
без необходимости знать значение этого диапазона.
>> Таким образом, в этом случае я бегу результат раз х дважды, что, по существу
означает, что я квадратуры это значение.
И это происходит в работать, как мы ожидали.
Мощность 2, передав значение 2.0 дает нам выход 4.
3.2 Работы по 10.24.
>> Теперь мы можем сделать подобный что за власть 3.
Но теперь изменить только выбор.
Для фиктивной переменной в 1 через 3, умножьте 3 раза,
и сделать то же самое.
>> Так что это может чувствовать себя немного надуманным.
Но есть важный что здесь, который
является то, что, глядя на них две функции, есть
только одна вещь, которая отличается, который это значение в диапазоне.
Все остальное об этих двух функции, сила и власть 3 2,
являются, по сути, идентичны, поскольку они работают таким же образом.
>> Таким образом, на данный момент, немного Тревожный звонок должен идти прочь.
Надеюсь, что вы говорите, Вы знаете, это чувствует себя немного
как дублирования усилий.
Может быть, есть способ, который я бы иметь возможность инкапсулировать все это
и обеспечивают функцию или создать функцию, которая
делает именно то, что я хочу, не необходимости ввести его в явном виде.
И это то, что власть из закрытия позволяет нам делать.
Итак, давайте взглянем на это.
И я буду тратить пару минут на это, потому что это
довольно важно для Swift.
Мы видим это все время.
Мы собираемся, чтобы определить функцию.
Это будет называться powerOf.
Это собирается приму в параметр, называемый у типа Int.
Но взгляните на тип возвращения.
Возвращаемый тип, в скобки, Двухместный двойную стрелку.
Это означает, что этой функции, эта функция powerOf,
возвращается функцию.
Это принимает двойную и возвращение в два раза.
Так что может показаться рода сумасшедшим, но давайте прокрутите вниз немного
и посмотрите, что происходит.
Мы внутри этой функции powerOf.
Мы создаем новую функцию называется exponentiator,
но это не имеет значения, что это такое.
>> Обратите внимание, что это имеет входное значение х.
И оно принимает в двухместном и возвращение в два раза.
И это тот же самый код, что мы видели выше, за исключением того, что значение 2
или значение 3, что Верхняя граница этого диапазона,
был заменен на Это значение г, что
был первоначальный параметр нашей функции powerOf.
И в этот момент, мы вернуться exponentiator.
Мы возвращаемся из функции.
>> Это вроде как немного сногсшибательное.
Но давайте представим, что происходит когда я вызвать эту функцию powerOf
и передать в него некоторое значение, как 2.
Что это означает, что Теперь у меня есть значение
2 при у, что означает, что это значение у этой функции exponentiator
будет то, что значение 2.
Но я возвращаюсь это Функция exponentiator.
>> Так замечать, что Свифт говорит, что я создали в этом случае.
пусть квадрат определение, это это функция, которая принимает двойную
и возвращает в два раза.
Я создал функцию что-то квадратов
с помощью этого механизма прямо здесь.
И в самом деле, что происходит вне что она возвращается эту функцию
exponentiator, но это значение у обернута внутри него.
И вот теперь каждый раз, когда я использую это переменная или константа называется это
квадрат, то это будет вести себя как функции.
И поэтому я могу назвать то, что переменная как я бы вызвать функцию,
и передать в него ряд, как в данном случае 3.
И я тогда квадрат этого значения.
То так будет квадрат 3 стать 9, как мы видим здесь.
>> Действительно с ума, но это сейчас позволяет мне возможность
создавать другие функции powerOf.
Как я могу сказать, ладно, хорошо теперь я хочу чтобы создать новую функцию, powerOf (3),
и хранить, что в постоянная называется куб.
А теперь куб будет отдельная функция, которая будет затем
занять некоторое значение в качестве входных данных и куба, Значение, как мы можем видеть в нижней строке
Вот.
куб 2 будет приводить в 8.
>> Надеюсь, довольно аккуратные вещи.
Вы никогда не видели это раньше.
Я призываю вас, чтобы посмотреть в закрытие и исследовать это немного больше.
Это действительно мощная штука, мы видим много в JavaScript и некоторых других языках.
Это действительно важно для понимание API, а также
что мы получим в только секунды.
Да?
>> АУДИТОРИЯ: Когда вы делаете powerOf (2), скобка, а затем
другой скобки, другой input-- Вы в основном заменил квадрат.
ДАН AMRMENDARIZ: Так что смотрите в самый последний линии здесь.
Это на самом деле полностью можно сделать цепочку, как Вы предложили.
Так powerOf (5) означает, что мы собираемся иметь exponentiator из 5 здесь.
Так что это, по существу, станет То же самое как 4 в пятой степени,
потому что мы создали потенцируя функционировать в пятой степени,
и мы передаем в что функционировать значение 4.
И мы получаем, что значение что мы ожидаем, 1024.
АУДИТОРИЯ: И это не назовете, так она легче
читать, площадь независимо.
>> ДАН AMRMENDARIZ: справа, точно.
Поэтому, прежде чем я просто положить его в постоянной вот так
что он сделал это легко использовать это имя.
Да?
>> АУДИТОРИЯ: В этом контексте powerOf, это часть
языка программирования в отличие от вас, как
думать о powerOf в [неразборчиво]?
ДАН AMRMENDARIZ: Так В этом случае, powerOf
это просто название из функция, я определил здесь.
Так что это не присуще на самом языке,
но вместо этого, это просто это функция, которая имеет
что имя, потому что я даю ему это имя.
Другие вопросы?
Отлично.
>> Теперь это здорово.
Но вы не собираетесь, чтобы увидеть Много функций замыкание,
, как это, где вы определяете, внутри одной функции, другой функции.
И вы можете сделать это.
Но это вроде не действительно необходимо, не так ли?
Как, почему я определить это Функция называется exponentiator
а затем сразу же вернуть его.
Почему я не могу просто сразу вернуться эту функцию?
>> И в самом деле, это именно идея концепции называется
анонимные функции, где анонимные функции на самом деле не
есть имя, потому что они не нужно есть.
И поэтому в данном случае, в 7В, мы можем найти именно это.
Это все тот же код, делает то же самое,
но теперь мы изменили его немного, таким образом что эта функция немедленно powerOf
возвращает функцию.
Обратите внимание, что после возвращения, есть открытая фигурная скобка.
Это ожидая этот вход Двойной.
Это ожидая, что выход Double.
И тогда в ключевое слово отделяет сам код.
Так что это анонимная функция.
Это на самом деле не имеет названия, в то время как прежде чем он был назван exponentiator.
Но, как мы видели, на самом деле просто не относятся к exponentiator
за пределами этой функции.
Так что не имеет значения.
Так что это анонимная функция является так называемый, потому что это безымянный,
но он по-прежнему используется В контексте данного кода.
>> Следующие пару те, которые я собирается продолжить надеюсь,
дует ваш ум немного.
Мы можем упростить это даже больше.
Потому что, как было проницательно отмечалось ранее,
возможно, мы на самом деле знаем, по выведение из этого кода, то, что
выход этого кода будет.
И в самом деле, в этом анонимной функции, мы можем сделать вывод, на самом деле типы данных.
>> Так что в этом, мы больше не необходимо явно определить
тип данных, который является вход и выход из этой функции
в течение нескольких причин.
Одним из них является, что мы определили, до на Прототип функции включения,
какой тип данных этого анонимных функция должна вход и выход.
И с другой стороны, мы может вывести из кода
сюда, что мы принимаем вход, который имеет тип двойной
и возвращение в два раза.
>> Обратите внимание, что здесь мы имеем явно не определены имена аргументов
что эта функция принимает.
И так мы видим, мы можем обратиться к эти параметры, используя $ 0, $ 1,
так далее, и так далее, в зависимости от количество этого параметра используется
в этой функции.
>> Это то, что вы собираетесь чтобы увидеть много это открытая фигурная скобка
Определение сопровождаемый $ 0, а затем некоторые операции,
а затем закрытая скобка.
Это анонимная функция который выполняет эту операцию.
Он имеет этот параметр где это тип выводится.
Это первый параметр $ 0.
И некоторые операции происходит на том, что $ 0.
>> АУДИТОРИЯ: Так знак доллара означает параметр в основном,
и 0 означает первый?
ДАН Armendariz: Это правильно.
Таким образом, знак доллара в основном означает, параметр, 0 означает первый.
Но это работает именно в это случай, когда я не назвал
аргументы в моей анонимной функции.
>> АУДИТОРИЯ: Имеет ли Perl или что-то есть это знак доллара, доллар 0 там?
ДАН Armendariz: Есть ли, которые, извините,?
АУДИТОРИЯ: Есть ли у Perl это доллар 0, доллар 1--
ДАН Armendariz: Я не слишком хорошо знакомы с Perl,
но то, что определяет PHP переменные на основе долларовых знаков.
И может быть в некоторых языках которые имеют такие функции, как это.
На самом деле, Свифт заимствует много возможностей, как это
от многих других языках.
Мы видим намеки Python в нем.
Это определение типа кажется, прибывает из OCaml.
И у нас есть только целую кучу материал от многих различных языках.
Это одна из хорошо вещи, о Swift
является то, что она занимает много из лучших идеи из кучей языков
и shoehorns их все вместе в один супер язык.
В самом деле, если вы позволите мне продолжать дуть ваш разум,
таким образом, мы делали все это.
Мы, возможно, может упростить это немного немного, понимая, что, конечно,
Свифт имеет экспоненту Встроенная функция в.
Если я импортировать Дарвина, который это просто библиотека,
имеет этой функции называется военнопленных, в настоящее время Я могу упростить свою власть функции
чтобы быть в следующем.
Это будет возвращение это анонимная функция.
>> Но посмотрите на то, как простой это теперь.
Это анонимная функция, что принимает некоторый тип данных,
и это будет один Аргумент в частности,
ссылка на $ 0, что имеет тип Double.
Это будет возвращать тип Double.
Но возвращение заявление Теперь неявные.
>> И именно это точное стиль, который очень, очень распространены в Swift,
повсеместно.
Мы собираемся, чтобы увидеть это все время в Swift.
Так я показываю все это Вы из-за этого синтаксис.
Это очень распространенная чтобы увидеть, что означает его
является анонимная функция которая выполняет
некоторые операции на этих аргументов.
И есть неявное возвращение.
Таким образом, это абсолютно то же самое, для нас, чтобы сказать это, прямо здесь.
>> Потому что это вьющиеся Кронштейн является функцией,
мы выполнить эту операцию от первого аргумента.
Мы собираемся, чтобы вернуться, что.
Но эта внешняя возвращение возвращение всю эту функцию,
что вся анонимная функция что мы только что создали.
Другие вопросы?
Ладно, я не знаю, если Вы, ребята, готовы к этому,
но мы можем пойти еще безумнее с Swift.
Вы готовы?
ОК, это здорово.
>> Теперь мы на самом деле имеют возможность чтобы в Swift, потому что, как модульная
и как протокол на основе это, чтобы определить наши собственные долбанные операторов.
Как и в этом случае, мы не имели оператор exponentiation-- хорошо,
для выполнения полномочий что-то.
Но я могу, у Свифта, определить новую Оператор, который делает именно это.
Таким образом, в этом случае есть куча синтаксиса здесь.
И я буду позволит Вам взглянуть на него дома, когда вы смотрите на это.
Но мы определяем этот инфикс Оператор **, который затем позволит нам,
определяя, что это Функция ** на самом деле
делает, чтобы принять левую руку сторона и правая сторона,
и затем вернуть экспоненту, что левая сторона к правой стороне.
>> И вот теперь вдруг I создали новый числитель.
Так 2 ** 3 означает 2 в третьей степени.
[Сногсшибательное ЗВУК] Это по само по себе должно сделать вас как,
ОК, винт C. Я иду Свифт весь путь.
Отлично.
Это довольно фантастическим.
>> Хотя это отличный пример.
Но я ни разу не снаружи в этом примере фактически
определяется свой собственный оператор.
Но все-таки, он показывает много власти Swift
и почему это на самом деле действительно очень здорово.
Да, хорошо?
АУДИТОРИЯ: Если вы Определение собственного оператора,
как вы знаете, случайно не попытаться создать оператора, что это
в где-то в C, как скрытые где-то в Swift,
как неясной один, что вы возможно, не видели прежде.
>> ДАН Armendariz: Так что, если вы пытаетесь чтобы определить свои собственные операторы,
существует риск определения одним поверх существующего оператора.
Это идет в уровень детализации, что Я не думаю, что у нас есть время, чтобы пойти снова.
Но это риск.
И это на самом деле причина того, почему Я не использовать символ курсора, который
когда мы вводим из власти, мы, как правило использовать 4 немного каретки 5 или что-то
так, просто, когда мы Gchatting приятелей или любой другой.
Но в этом случае, что на самом деле вызвало бы столкновение.
И поэтому я избегал его только потому, что Я случайно узнал, в этом случае
что которые могут вызвать что столкновение.
>> Отлично.
Теперь, к сожалению, для последние семь минут,
Я должен держать дует ваши умы немного.
Так что позвольте мне показать вам, некоторые другие вещи, как хорошо.
>> Мы показали вам эту идею имея эти анонимные функции,
эти затворы, которые позволяют вам вид передавать функции вокруг.
Вы можете вернуть их.
Вы можете манипулировать ими.
Вы можете сделать все виды сумасшедшие вещи.
>> Но одна вещь, которая бывает полезно
является возможность, в отличие возвращения этих функций
в функции, чтобы передать функцию в качестве параметра другой функции.
Вы могли бы думать, ну почему на Земле я хочу сделать что-то подобное?
>> Ну, давайте скажем, что я хочу, принять этот оператор, что я
работал так трудно создать и применить это кучу разных чисел
в массиве.
Таким образом, в этом случае у меня есть массив integers-- 1, 4, 7, 2, 5, 10, 56.
И я хочу, чтобы удвоить их всех.
Таким образом, что мы, как правило, сделать это, чтобы просто написать
простой цикл, что перебирает все из них
и выполнять какую-то квадрат операции над ними,
ввод эти новые значения в новый переменной или, скорее, новый массив здесь.
И значение на выходе Результатом является то все этих массивов,
или, скорее, все те Теперь элементы в квадрате.
>> И мы могли бы сделать то же самое вещь для кубатуры его,
но немного тревожный звоночек должен идти от
сказав, что, возможно, есть каким-то образом, что мы
быть в состоянии, чтобы упростить это немного.
И в самом деле есть.
Что делать, если мы могли бы создать функция, которая позволяет
принять, как хищник, функции?
Таким образом, в этом случае, занять посмотрите на эти аргументы.
Мы собираемся принять список парном разряде.
А потом мы собираемся принять функцию
в переменной под названием F, что происходит взять двойную и вернуть двойную.
И весь выход всей этой функции
называется преобразователь будет вернуть массив с именем дважды.
>> Что это будет, то позвольте мне сделать, это перебрать этом списке
и сделать то же самое, но теперь применить эту функцию на каждом
из отдельных значений в этом списке.
Так что я не знаю, что это е.
Это не имеет значения для меня.
Но так долго, как он принимает в двухместном, выполняет некоторые операции по нему,
а затем возвращает Двухместный, я бы тогда
возможность отобразить эту функцию по каждый элемент в списке.
>> И этот тип программирования называемые высшие функции порядка,
где мы передаем функции как параметры
и делать вещи, с функциями.
Это вроде как брать все эти идеи, которые мы узнали в CS50
и принимая их рода из на следующий уровень.
И все это CS51 стиль материал.
И поэтому мы пойдем в глубину больше классов, как, что.
>> Но это также Здесь важно, потому что мы
увидеть много функций которые используются в Свифт
что по существу делает это, где у нас есть
некоторые числа, некоторый массив чисел.
Мы собираемся пройти, что Массив в нашей картографа.
И мы также собираемся пройти некоторую функцию, которая
мы уже определили здесь.
Это собирается быть квадратной.
И мы собираемся, чтобы затем квадрат все эти цифры
и хранить, что в этом результате здесь.
>> Так что это дело мы определили наш Функция называется собственный Mapper.
Но это точно вещь, в самом деле, встроенный в Swift.
Есть множество Функции называется карту.
Там это карта функция, есть снизить функцию,
и есть функция фильтра, которые по существу применять функции
к каждому элементу в список, чтобы изменить их в некотором роде.
>> АУДИТОРИЯ: Так, так как вы трансформации данные в другой формат
через function--
ДАН Armendariz: Верно.
Да, так что функция что мы принимать
преобразует данные в некотором роде.
В этом случае мы были либо квадратура его, или мы были кубатуры его,
или действительно, мы могли бы выполнить нет операции на нем все.
>> Но позвольте мне показать вам, то, как это будет выглядеть на практике.
И опять же, я бегу немного времени. так что я не
будет в состоянии перейти на все исходного кода здесь в деталях.
Но я призываю вас, чтобы сделать это.
Мы опубликуем ее, как только возможно после этого разговора.
>> Но если вы посмотрите на это, Предположим, что у нас есть список чисел,
массив чисел в этом Переменная называемые цифры.
Затем мы хотим, чтобы выполнить это работа фильтра на этих чисел.
Так фильтр высшее Функция порядка, что
принимает массив, а также функции.
И на каждом элементе в том, что Массив, он выполняет эту функцию.
>> Если эта функция возвращает правда, он держит этот пункт.
Если эта функция возвращает ложь, это отбрасывает этот пункт.
И тогда она возвращает список который затем составил всего
из тех пунктов, которые были отфильтрованы.
>> Таким образом, в другом слова, это та же идея, то зачетную книжку.
Мы могли бы иметь различные классы в эту величину называют чисел.
Может быть, 100 и 70, и 40, так далее, и так далее.
Что этот фильтр делает уведомление что это, что синтаксический сахар
для анонимной функции.
Это анонимная функция говорят что параметр, который я принимать
будет, если он больше, чем 70,
то это возвращает истину, это означает, что что элементы будут храниться в этом фильтре.
Так что давайте быть немного более конкретно об этом.
Если у меня есть этот массив чисел и состоит из 100, 70, и 40,
Я выполняю этот фильтр работа на каждом из них.
Так что первая это значение 100.
100 больше или равно 70 Правда, что
означает, что 100 хранится в это новая копия этого массива.
70 также проходит.
Но 40 не делает.
Так что возвращается в passingCount это массив элементов 100 и 70--
100, запятая, 70.
Это были только два предметы, которые сохранились.
И так по этой причине я быстро пошел через Многие из этих видов высокого порядка
вещи, потому что это то, что общая вещь, которую вы увидите в Swift довольно
часто, выполняет некоторые операции используя следующий синтаксис анонимной функции.
>> Там какая-то интересный материал.
Коммутаторы действительно мощный в Swift, Я имею в виду, как безумный, безумный мощным.
Вы можете использовать переключатель, и Вы можете применять их на самом деле
диапазонам, который является своего рода сумасшедшим, и делать модные вещи, как, что.
>> Но в последние несколько минут, Я хочу, чтобы пропустить вперед достаточно далеко
и показать вам конкретный пример того, как мы можем создать в IOS приложение, с помощью Swift.
Поэтому, когда вы делаете это, вы будете иметь, чтобы взять
Взгляд at-- на Apple, Документация, они
есть много действительно хороших уроков для создания первого приложения.
И я призываю вас сделать что, потому что они вас
через все этапы, что именно нажмите на создать приложение IOS.
>> Но здесь мы имеем это приложение IOS.
И это довольно простое приложение, на самом деле.
Если я запускаю это, позвольте мне показать Вы, как он выглядит.
Все это, по существу делает это тянет из интернета файл JSON
что я хранятся на сервере.
И, что JSON файл определяет изображения, которые позволяют
мне тогда цикл через, по моему Приложение, изображения из моего веб-сервера.
>> Так что я здесь getNextImage.
Он загружает изображение из Интернета, а затем отображает его на экране.
>> Так что это довольно просто.
Но цель здесь, чтобы показать Вы, как мы можем объединить вещи
Из последних нескольких недель CS50 в реальном приложении IOS.
Другими словами, пожалуй, один из вещи, которые вы хотите сделать
это есть приложение IOS, что может потянуть данные из Интернета
и показать пользователю информацию.
Это совершенно точка этого исходного кода здесь.
>> Таким образом, есть много, чтобы сказать о как сделать фактическое развитие IOS.
Существует много сумасшедших синтаксиса что мы не видели еще достаточно
как класс, то, что класс на самом деле.
Мы можем в основном игнорируют что в настоящее время.
>> Но обратите внимание, что мы содержали в этом множество вещей
что мы уже видели, как Функции, которые имеют конкретные имена.
И когда мы даем тем, Функции правильные имена
что ожидает прошивкой, на самом деле это чувствует себя немного волшебным.
Но когда вы создаете Приложение IOS, там
конкретные имена функций, которые называются самим телефону
как приложение загружается, чтобы попытаться создание процесса, который фактически
работает приложение.
Итак, еще раз, есть много вещей, которые я должны замалчивать здесь для того, чтобы нас
говорить об этом конкретно.
Но я призываю вас посмотреть на, возможно, другой семинар IOS, но также и некоторые
из учебников онлайн, которые делают гораздо лучше описывать
конкретная информация.
>> Но мы можем увидеть пару вещей, которые интересны с кодом здесь.
Обратите внимание, что у нас есть, если заявления.
Кстати, одним из важных вещь, если заявления
является то, что скобки вокруг Логическое выражение являются необязательными.
Но фигурные скобки являются обязательными, независимо от того, как мало или много строк кода
у вас есть в заявлении, если.
Вы не можете иметь, если заявления без фигурных скобках в Swift.
>> И это, ну, вроде глупо.
Но есть исторические причины.
Предполагается, чтобы спасти вас от себя.
Как это, например, вы можете не устранить фигурные скобки вокруг этого
если заявление.
Те, которые на самом деле требуется.
Поэтому я призываю вас, чтобы Взгляни на это.
Но есть еще один построить, что я хочу
чтобы показать вам, о том, что Swift является новым для Swift 2.0 сравнению
в старых версиях Swift, который заключается в следующем.
Давайте посмотрим, где я положил его здесь?
>> Таким образом, в этой функции называется fetchJSON, эта функция
несет ответственность за потянув что JSON файл с URL, который просто так случается
чтобы быть запущен на моем CS50 IDE.
Я только начал Apache, положил JSON файл существует,
и я в состоянии, то тянуть, что Данные из интернета, используя
эта функция и этот адрес, которая предоставляется по телефону.
Это обеспечивается Библиотека, что вы используете, когда
Вы делаете некоторое развитие IOS приложение.
>> Обратите внимание, здесь есть эта необычная синтаксический конструкт называется охранника.
И действительно, все это в Свифт способ проверки
что некоторые вещи должны были выполнены перед вами
приступить к остальной части функции.
Так что я мог бы, используя этот необязательный тип,
Я мог бы найти URL по работает эта функция NSURL
и хранения, что в URL постоянным, а затем проверки
чтобы увидеть, если URL был нулевым, потому что это собирается вернуться дополнительный тип.
И если это было ноль, то я бы распечатать ошибку, а затем вернуться.
>> Но вместо этого, то, что охранник позволяет нам сделать то, что очень вещь,
но убедитесь, что это на самом деле так, что гиперссылка
был надлежащим образом установлен NSURL.
И если это так, то пропускает это, и это
позволит вам продолжить гиперссылка будучи должным образом определены.
Но если это так, что гиперссылка, не правильно определены,
если эта функция возвращает ошибку или некоторые другие неожиданные вещи
на самом деле происходит, это охранник конструкцию позволяет затем выход этой ошибки
и немедленно вернуться.
Да?
>> АУДИТОРИЯ: Так что это своего рода из Like An, если потом еще?
ДАН Armendariz: Это своего рода Like An, если потом еще, да,
кроме того, что это гиперссылка затем определяется для всего ниже этого.
Если она проходит этот охранник, то его на самом деле будет заполнен данными
и использовать в оставшееся Исходный код в функции.
Так я подозреваю, что вы собираетесь начать видеть эту стойку, а также.
И помнить о том, что.
>> Так что, глядя на пару с другом вещи, это прямо здесь есть что,
Как вы считаете, только на основании каких мы говорили о раньше?
>> АУДИТОРИЯ: Думаю, что это будет работать в списке?
>> ДАН Armendariz: Так что это близко.
Это функция, которую мы определяем.
И мы эту функцию ввода в качестве аргумента этой функции здесь.
>> АУДИТОРИЯ: [неразборчиво], если не ноль.
Так что это в списке, не так ли?
>> ДАН Armendariz: Если ошибка не ноль, так что is-- так что я должен прокрутки.
Ну, давайте посмотрим, я не могу действительно прокрутки вправо здесь.
Ошибка аргумент, что в настоящее время переданный в анонимной функции.
Это анонимная функция.
Это не имеет имени.
Но мы принимаем эти три Аргументы, данные, ответ, и ошибок.
И это собирается вернуться недействительными, так он не собирается ничего возвращать.
И это содержание этой функции.
И тогда у нас есть доступ внутрь, что Функция каждого из этих параметров.
>> Так что это вихрь экскурсия по языку.
Но я надеюсь, с этим, мы надеемся, как вы принимаете
взгляд на некоторые из учебников специфичных для разработки IOS с Свифт,
особенно если вы идете в Разработчик веб-page-- от Apple
у них есть много действительно хороших учебники, чтобы вы начали.
Но мы надеемся, просто этот час говорить о синтаксисе сам дал
Вы достаточно, чтобы начать с этим.
>> Мы разместим все это источник Код на сайт семинара
как можно скорее, а также слайды так у вас есть ссылки для всех них.
Но удача с вашими проектами.
И спасибо всем большое, что пришли.
>> [АПЛОДИСМЕНТЫ]