[Играет музыка] ДАН 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 ..