>> DANIEL Armendáriz: Всем привет, Добро пожаловать в развитие IOS приложения
с SWIFT.
Я Дэн Armendariz.
Я precepter компьютера наука здесь в школе
инженерных и прикладных наук.
И Свифт на самом деле вид из действительно аккуратный языке.
И у меня есть некоторые планы на сегодняшний день.
Так в течение следующего часа или таким образом мы собираемся посмотреть на само развитие IOS приложения
с помощью Xcode и фактически создавая некоторые очень простой, очень простые приложения.
И, глядя на том, как вы на самом деле принять эти приложения,
и строить их, а на самом деле положить их на устройстве IOS.
Некоторые из вещей, которые мы не будем смотреть на
будет включать в себя такие вещи, как на самом деле принимает заявку
и положить его на App Store.
Там это много учебных пособий в Интернете, что поможет вам в этом аспекте его.
Но и потому, что, как часть CS50, вы получите
чтобы присоединиться к развитию компании Apple Команда, команда разработчиков приложения CS50-х годов.
Если вы не сделали, что еще и вы связаны с CS50,
Я рекомендую вам сделать это, потому что это
как вы сможете создать некоторые программы в Xcode,
строить их, а на самом деле положить их на некоторые из ваших IOS устройств
Если у вас действительно есть физическое устройство IOS.
Если у вас нет физического IOS Устройство, которое более чем в порядке.
Вы на самом деле можем разработать для IOS.
И Xcode имеет симулятор, который позволяет
чтобы увидеть вашу заявку в действия на компьютере.
Но он вроде есть приятная вещь на самом деле играть и взаимодействовать
с приложением на реальном устройстве.
Так что пара требований к на самом деле все это развитие.
Один из них является то, что Вы должны иметь Mac.
Он должен быть запущен 10.9.4 или более поздней версии для того, чтобы сделать развитие со стремительным.
>> Вы можете использовать ранее версия для развития
с Objective-C для МО и Mac.
Но я рекомендую, и много Примеры, которые мы видим сегодня,
использовать 10,10 Йосемити.
Так что если вы еще не выполнено, это хороший повод, чтобы сделать это.
Теперь Xcode 6.1 последняя версия интегрированная среда разработки
что компания Apple предоставляет бесплатно, что для Вы можете скачать с магазина приложений.
И я рекомендую вам также запустить последнюю версию.
>> Если вам случится быть запущен раньше версия, Xcode 5 и ниже просто
просто не поддерживают быстрые бы то ни было.
И бета-версии шести, которые были освобождены в течение лета,
поддерживают быстрые, но есть был огромный номер
изменений в языке, достаточно так что код, который вы
будем смотреть на и что вы может найти в Интернете
не может быть скомпилирован правильно в этих предыдущих версиях Xcode.
Итак, еще раз, еще, если вы не есть учетная запись разработчика,
Я рекомендую вам пойти developer.apple.com.
Зарегистрироваться создайте учетную запись разработчика, и присоединится к команде разработчиков CS50 приложение.
Это обеспечит вам возможность для компиляции приложений
и положил их на вашем устройстве.
Итак, давайте начнем.
Самое первое, что мы собираемся сделать, это
на самом деле создать очень простой проект в Xcode
что позволит вам подать заявку.
>> Так что если вы еще не имеют Xcode открыт, идти вперед и открыть его
и создать новый проект.
Специальная заставка откроется, и даст вам
некоторые варианты о том, что это то, что вы хотите сделать.
Сразу скажем, что вы хотите создать Новый проект, новое приложение.
Это окно появится, при условии, что вы используете Xcode 6.1.
Прямо сейчас, и Продолжительность этого семинара,
мы будем использовать одиночные приложения Вид, просто
своего рода базовой заявке чтобы получить ваши ноги мокрые.
И вы можете расшириться по своему усмотрению оттуда.
>> Нажмите кнопку Далее на этом этапе.
Теперь здесь есть несколько вещей, что вы, возможно, захотите, чтобы войти.
Название продукта Имя Вашего проекта.
В этом случае, я просто буду называть его Seminar1
потому что это наш первый пример.
Название организации, в в этом случае это только мое имя.
Вы, конечно, можете изменить его в свое собственное имя, или CS50.
Идентификатор организации, если вас случается, есть веб-сайт, просто взять
Доменное имя реверс, com.yourname.
а затем название продукта должен появиться автоматически
После этого в качестве идентификатора расслоения.
>> Очевидно, язык, который мы собираетесь использовать на сегодняшний день является быстрым.
Можно, конечно, использовать Objective C для этого, но сегодня будет быстрым.
И мы будем сейчас говорить, универсальные устройства, так
что он работает на обоих IPAD и iPhone.
И мы выйдем ядро Данные непроверенные, чтобы сохранить
Проект относительно просто до поры до времени.
Так что давайте идти вперед и нажмите кнопку Далее.
И это будет спрашивать меня где я хочу, чтобы спасти его.
Я просто сохранить его на моем рабочем столе сейчас.
>> Ладно, так что теперь это то, что будет произойдет, когда вы на самом деле открытый Xcode.
И заметьте, что Самое первое, что вы видите
это восклицательный знак, что говорит не личность подписание найден.
Я намеренно сделал это на моем компьютере, и я
надеясь, что я собираюсь быть в состоянии фактически это исправить,
потому что я хочу, чтобы вы, как это действительно будет работать на вашей машине.
>> Идите вперед и нажмите Исправлена ​​проблема.
Она будет просить вас, если у вас есть существующую учетную запись Apple, разработчиков.
Это где присоединение CS50 команда разработчиков приложения
Важно, чтобы вы не только есть приложение счет,
но вы также должны Возможность подписать приложения
и положил их на вашем устройстве IOS.
Это не-- щелчок Исправлена ​​проблема не стоит
Если вы только собираетесь строить и развивать на местном уровне,
полностью в симуляторе IOS.
>> Но сейчас я собираюсь разработать и поставить их
на моем Ipad, который будет возможность транслировать, а также.
Так что я хочу на самом деле добавить это.
И это-то спросит, мне в моем Apple ID.
Так что это будет это.
И у меня есть за моим пароль, который сюда.
Так дайте мне только одну секунду, чтобы найти, что, и скопируйте и вставьте его сюда.
>> Нажмите кнопку Добавить.
Это будет просить меня какая команда Я хочу присоединиться к ней.
Я собираюсь сделать инженерной школе.
Нажмите Играть.
Ой, что это не тот.
Давайте сделаем это.
Надеюсь, что один будет работать.
Это один до сих пор не работает.
Мы бежим из хороших здесь.
ОК, на этот раз должно работать.
Теперь закройте это.
Теперь давайте сделаем школу машиностроение, нажмите выбрать.
>> А теперь, надеюсь, после пару секунд Вы can-- ОК,
Я отозвать и запрос.
О человек, это будет не работают.
Хорошо, я попробую другой.
Давайте сделаем этот здесь.
Живые демки не удается мне.
Мы, возможно, придется вернуться к только что здание, полностью локально,
но это было бы ОК в этом случае.
>> Так вот, в то время как это на самом деле Рабочая, что мы собираемся сделать, это просто
создать очень простой Привет мир приложений.
Так что это Xcode.
И если вы его еще не видел, его может быть немного пугающим на первый взгляд.
Там это много стекла, есть много декораций в различных областях.
Но только понимаю, что есть действительно несколько основных компонентов
в этой среде разработки.
На дальней левой все файлы которые применимы только к вашей программе
или вашего конкретного проекта.
Мы будем нажав вокруг на некоторых из них, и мы
отметить наиболее важные с течением времени.
На крайний справа, мы есть набор атрибутов.
И все эти атрибуты, есть различные стекла для атрибутов.
Стекла будет меняться в зависимости от контекст основного содержания, которые
оказывается в середине.
Теперь средний может на самом деле показывают Вы множество вещей, например
Ваш код сам по себе.
Или вы можете на самом деле have--, когда Вы нажимаете на раскадровке, которые
это, кстати, просто графический представительство Вашей пользователя
интерфейс для вашего application-- то атрибуты панели
на очень дальнем правом на самом деле изменить.
Теперь есть несколько других вещи, которые я хочу обратить внимание.
Вы можете сортировать изучить вокруг в среде по своему усмотрению.
Но одна из вещей, которая была очень полезна
это кнопка здесь, в правом верхнем углу окна.
Там эта кнопка, Похоже, на далеко
слева от него пункт в сопровождении двух кругах и сортировки
из двух стрелки, указывающие друг от друга.
При переключении между стандартный редактор, который
это далеко левого, один который выбран по умолчанию,
и две окружности перекрывающихся друг друга, что вы на самом деле получаете
двойные вид панели.
>> И это на самом деле будет полезно для нас
когда мы должны связать элементы в пользовательском интерфейсе к коду.
И мы будем говорить больше о что в минуту.
Но поймите, что если вы получите еще больше стекла, как это,
вы можете упростить ваш взгляд просто немного, нажав назад
на одной редакторе.
Все идет нормально.
Поэтому в основном мы имеем код, указанный на левый, атрибуты справа,
и то, что это мы работаем здесь, в самом центре.
>> Так вот, я нажал на главной раскадровке.
И раскадровки, опять же, способ Xcode
что вы можете создать свой пользователю интерфейс с помощью просто перетащите
методы.
И так наша очень Первое применение этого
это именно то, что мы собираемся делать.
Мы собираемся спуститься к очень далеко в правой нижней части
на экране, который содержит Разнообразие элементов пользовательского
что вы можете нажать и перетащить создать свой пользовательский интерфейс.
>> Теперь все это элементы называются просмотров
поскольку в них какой-то точки зрения.
Там же вид изображения, для Например, на самом деле показывают,
изображение на пользовательском интерфейсе.
Там это вид таблица на самом деле показывают таблицу.
Так далее, и так далее.
Там это широкий спектр взгляды, которые вы можете выбрать здесь.
Так что сейчас мы идем искать этикетке.
Вы можете просто пролистать все списки, что там.
Но есть поиск бар в самом низу
что делает его легче определить, конкретные мнения, что вы на самом деле
хочу, чтобы перетащить в пользовательском интерфейсе.
>> Найдено мой лейбл.
Я собираюсь тащить его здесь, прямо на мой приложения.
Прямо там, в средней выглядит хорошо.
И я собираюсь ввести "Hello World!"
Нажмите Enter.
Теперь у меня есть ярлык.
Это не выглядит, как будто это в центре вполне пристойно.
Так что я могу попытаться повторно его в центр.
К счастью, это предлагает эти путеводителей, чтобы сделать вещи намного легче.
Я собираюсь попробовать скомпилировать его.
Надеемся, что она на самом деле работать здесь.
А если это не так, через минуту это будет на самом деле появляются на моем Ipad.
Это прямо здесь.
Там оно и есть.
>> Итак, вот оно что.
Мы закончили.
Мы создали наш очень Первое приложение.
Теперь, очевидно, это ничего не делать.
Это просто метка.
Там нет никакой связи между Пользовательский интерфейс и код.
Так что, если мы на самом деле хотели создать эту связь,
если мы действительно хотели иметь какой-то связи между элементами
которые существуют на экраном и код, который
позволяет нам контролировать эти элементы, то
мы на самом деле нужно посмотреть на сам код.
>> Так что это то, что называется ViewController.swift.
И, в особенности для Ваши первые несколько программ,
Это будет своего рода Большая часть кода, который вы enter--
будет в этом документе здесь.
Там очень много вещей это здесь до сих пор, не так ли?
Там это комплект UI Импорт класса, переопределить, [? фанк,?] все эти различные вещи.
И это не совсем понятно, что это то, что все это значит.
Итак, давайте сделаем шаг назад от от Xcode для немного
и посмотреть на сам язык, стремительное.
>> Таким образом, с быстрым, это было в дизайн и разработка
на Apple, в течение приблизительно четырех лет до моего понимания.
И есть несколько функций о ней, что действительно здорово.
Прежде всего, это составлен языка, так же, как С.
Таким образом, вы сначала должны скомпилировать его и запустите его
Прежде чем вы действительно выполнить код, который приводит.
Но есть, в отличие от C, интерактивный подскажите что можно реально работать
и введите произвольные команды в.
И очень похоже на консоли JavaScript, которые вы можете быть знакомы с сейчас,
это на самом деле будет оценивать тех, команды и обеспечит Вам выход.
И они даже взяли что к следующему уровню
и они создали что-то называемые игровые площадки в Xcode
что позволит вам визуально работать с кодом.
И мы действительно увидеть некоторые примеры того, что в чуть-чуть.
Он основан на C. C лежит в основе это, потому что все компиляторы
создать код из С и создать объектный код от него.
Но это действительно акции сравнительно мало синтаксис.
Это будет выглядеть довольно разные.
Там будет некоторое сходство.
Но есть будет довольно мало различий
по сравнению, скажем, JavaScript или PHP.
И мы будем указывать эти в минуту.
>> Теперь один из самых больших вещей, о стремителен, что приятно
в том, что, особенно по сравнению С, это означало, чтобы быть безопасным.
Все в нем предназначено для быть очень сильно набрал в.
На самом деле это почти раздражает Во-первых, когда вы впервые
начать работать с быстрым, насколько сколько это усиливает типов во всем мире.
Все это строка должен оставаться строка.
Это очень трудно разобраться в преобразовании это или принудить его в какой-то другой форме.
>> И опять же, мы покажем примеры этого.
Но в конечном итоге понять, что это означало, чтобы защитить вас,
и вам я имею в виду ваш код, от сбой в какой-то ужасный путь, когда
у вас есть какие-то несоответствующие типа.
И опять же, работать с ней.
Потому что это будет неприятно сначала как вы пытаетесь выяснить, почему именно
Вы получаете это необычное ошибки дело с типами.
Но это будет стоит в конце.
>> Это дело с автоматическим управление памятью,
поэтому уже не сделать вас иметь дело с вещами,
как таНос и бесплатно, и все из этих видов вещей.
И это также предназначен для обобщений.
Таким образом, хотя мы можем использовать Xcode для создать IOS приложений и приложений для Mac,
мы также можем просто использовать его в качестве скриптового языка.
И поэтому мы можем использовать его рода не вместо PHP или вместо
Питона на самом деле быстро разобрать и обработать
некоторые данные, которые у нас есть на нашем компьютере.
>> Он имеет широкий спектр современных Особенности, дополнительные принадлежности, изменчивость,
дженерики, затворы, и многое из этого вещи, которые вы можете или не можете признать.
И это только вид сожаления часть языка, что некоторые из них
Сортировать футуристических современных элементов, которые содержатся в элементы
так глубоко укоренилась, что я на самом деле будет есть, чтобы научить вас CS50.5 немного.
>> Мы должны узнать немного больше о некоторых особенностях того,
чтобы понять, что происходит далее, и так что вы можете посмотреть на код
и не чувствовать себя полностью потеряны.
И вы увидите, что я имею в виду с тем, что буквально за минуту.
Итак, let's-- достаточно этого Сортировать теоретического материала.
Давайте реально взглянуть на наш Самый первый Swift программа.
Это одна строка кода.
Строка 14 здесь, это говорит печати L N привет CS50.
>> Так что несколько вещей, которые это очень разные об этом по сравнению
к вещам, которые вы могли бы используется, чтобы из С, например.
Один из них является то, что нет никакого intmain, нет включают раздел,
нет ни этого дополнительного материала.
Включают в себя, как стандарт I / O, как в библиотеках
что на самом деле обеспечивают Стандартные функции языка,
автоматически включаются, как часть стандартной библиотеки Свифта
и что автоматически импортируются.
Вы не должны делать что импорт вручную.
>> Intmain не существует, поскольку Главная точка входа для кода
на самом деле в начале кода.
Таким образом, любой код, который у вас есть с начала
на самом деле будет выполняться с самого начала.
Так что это действительно существенно упрощает.
Обратите внимание также, что нет запятой.
Там нет точки с запятой в этом языке.
Вы ставите заявление на индивидуальной линии
а затем следующая строка представляет другую заявление.
Если Вы хотите положить mulitiple заявления онлайн,
то у вас есть отделить его точкой с запятой.
Но по большей части, Хороший стиль, мы
никогда не увидите запятой для цели, разделяющих отчетности
в SWIFT.
Так как это действительно работает?
Ну очень похоже на C мы на самом деле нужно собрать это.
И поэтому мы можем сделать, что с помощью Свифт С, а затем 1.Swift.
А потом через пару минут будет скомпилирован
и тогда я могу запустить один пункт.
И чем это будет просто сказать "Привет CS50."
Высокий, так что мы идем.
Там наш первый привет мир программа.
Давайте перейдем к номер два.
>> Сейчас в this-- это изменилось чуть-чуть, потому что в то время как правило, вы
do-- на самом деле всегда вы должны составить быстрый приложение перед вами
реально работать it-- один из замечательных особенностей
что я упоминал прежде, что Свифт действительно может быть использован в то
из псевдо-режиме интерпретации, есть на самом деле, как переводчика.
Но то, что это будет сделать, это есть является, по сути, быстрые приложения
что вы можете запустить.
>> Так, например, если вы просто введите Свифт здесь, что произойдет
является то, что вы получите подсказку.
И вы можете ввести быстрые Код, распечатать привет, и запустить его.
И это будет на самом деле print-- Ну, это не печатали в этом случае
потому что это печатается по центру из, которых не видно здесь.
Но это на самом деле может функционировать.
И поэтому в данном случае, я просто собирается использовать это в качестве сценария.
И я могу на самом деле запустить этот код.
Так так, что я на самом деле запустить это будет немного отличаться,
но вы увидите, что через минуту.
Теперь, в этом случае, что мы собираемся сделать это сначала определить переменную.
Так что это, как мы определяем переменная быстро,
что мы используем, пусть ключевое слово, а затем по имени переменной,
а затем мы приведем некоторые инициализации данных необязательно.
Так что это дело мы определяем константа, названная имя,
и мы собираемся использовать, что Выход нашей печати линии
в самом низу, привет именем.
>> Теперь обратите внимание, что вместо использования% S, мы можем инкапсулировать имя этого
Переменная в / () и быть в состоянии объединить в содержимом это
Строка в эту строку.
Теперь в отличие от C, строка текущая реальная введите SWIFT.
И так сидит рядом Интс и рядом
удваивается очень легко и, естественно, по сравнению
некоторые из другой языки, которые мы уже видели.
Так что это будет на самом деле работать так же, как можно было бы ожидать.
>> Я могу запустить 2.swift.
И мы видим, что меня зовут на самом деле сращивания в "Hello Dan."
Хорошо, здорово.
Переходя к номер три.
Теперь это было немного белого ложь, что я
сказал, что путь, который мы заявляем, переменные, чтобы использовать выпущенных ключевое слово.
Как много раз, как вы, возможно, вы можете сделать Чтобы использовать давайте, потому что, что это делает
это определяет константу.
И это говорит стремителен, что он может оптимизировать скорость вашего приложения
потому что он знает, что переменная не изменится.
>> Так тщательно оценивать когда вы собираетесь использовать
переменная для Цели его изменения.
И когда вы собираетесь создать переменную просто
провести некоторые данные, и это на самом деле не собирается менять.
Так что это понятие неизменности, это на самом деле не собирается менять,
является важным даже далеко вниз, как определения переменных.
Так вот, когда мы задали имя, Пусть имя, и в этом случае
это постоянная, то есть типа строка, и она равна Дан.
>> Так в то время как в до версия, она infers-- и "это"
Я имею в виду swift-- Свифт выводит тип данных
что мы вступили в переменную.
В этом случае, мы можем быть явным.
Так пусть тогда имя этого переменная имя, затем двоеточие.
И после двоеточия не мы указать тип данных.
Так больше не это INT имя или Название строка или что-то подобное.
Но вместо того, чтобы позволить этикетку, мы определение или нет
это постоянная или переменная, за которым следует имя,
затем тип дополнительно.
>> Таким образом, в этом случае мы определяем это имя строка.
Мы говорим, что Дэн.
И теперь у меня другая переменная, в этом случае он называется меткой.
Но заметьте, что это с префиксом Вар ключевому слову.
Средства вар ключевых слов что эта переменная может
изменить на более позднем этапе в Время, где-то в коде
мы можем на самом деле изменить его, и он не даст нам какой-либо конкретной ошибки.
>> Мы можем сделать стандартный объединения оператор здесь с помощью символа плюс
на самом деле добавить наш имя в этой строке.
И тогда мы сможем распечатать как мы только что видели минуту назад.
Теперь давайте говорить, что вы Чтобы создать переменную
но вы не хотите, чтобы инициализировать его еще.
Вы еще не хочу положить любые данные в нем.
Ну что вы должны сказать быстрым, что тип данных,
будет, прежде чем вы можете фактически определяют его правильно.
>> Таким образом, в этом случае, когда мы определили переменная с именем класса, мы должны быть
Явное о его типе, поскольку он не может сделать вывод, просто глядя
на инициализированные данные что вы предоставляете к нему.
Это даст нам об ошибке, если просто введите вар класс, например,
потому что она не имеет типа поэтому.
Так класс = 100.
Так что 100 представляет собой целое число, его подходит очень хорошо в этом.
Он будет продолжать функционировать.
Мы видим, как то может объединить это в.
Теперь вы можете быть соблазн, если вы на самом деле
хотел объединить переходят в другой текстовой строки,
в другую строку, что вы просто использовать тот же оператор конкатенации.
И это, как правило, верно.
Но Свифт не позволит вам неявно изменить тип данных.
Таким образом, в данном случае это линия, 25, не удастся
потому что сорт целое число, а не строка.
И таким образом, есть несоответствие набор типов.
Таким образом, вы должны быть явными, когда Вы хотите изменить эти данные,
если вы хотите, чтобы заставить это данных в другой тип
и сказать, хорошо, я хочу взять Этот сорт, который является целым числом,
и преобразовать его в строку.
>> Итак, я беру капитала S типа String все типы, вы заметите,, капитализируются,
Int, Double, String, так далее, и так далее.
Все они капитализируются просто чтобы сделать вещи проще.
И мы будем говорить выгоду Строка переходят в его классе.
И это создаст Строка из этого числа.
И тогда мы сможем объединить два очень красиво.
Любые вопросы по этой вещи до сих пор?
Ладно, давайте пахать до номер четыре.
>> Теперь давайте поговорим о некоторых более продвинутых структуры, как массивы и циклы.
И в отличие от C, массивы в Swift не представлены указателями.
Указатели в SWIFT, Хотя они существуют, называется
как небезопасных указателей или некоторые подобный тип, как это,
они не подвергаются вас нормально.
Таким образом, становится очень трудно для Вас, чтобы манипулировать
памяти прямо из вашего компьютера.
>> Так массивы только тип данных.
И они ссылаются, используя этот вид сейчас стандартным квадратным обозначения кронштейн
что вы видели раньше.
Но когда вы на самом деле хотите, чтобы определить тип переменной
в виде массива некоторых Особый тип, то вы
положить, что тип в квадратных скобках.
Так что я говорю здесь является то, что Я создаю переменную с именем
сорта типа INT массива.
И я устанавливаю, что равно некоторые инициализированные данные, которые в этом случае
100, 0, 90, 85, который находится всего в Коллекция произвольных классов здесь.
В настоящее время в этом случае я мог бы, помните, удалить тип,
и было бы в состоянии вывести его на основе инициализированных данных.
Но если я удалил это и Мне нужно, чтобы установить его позже,
то я бы, чтобы убедиться, что у меня есть тип там.
Ладно, давайте двигаться дальше.
Таким образом, мы can-- массивы предоставляете нам выбор
методов через такой точечной нотации у вас, вероятно, уже знакомы с.
Так grades.count, например, говорит нам именно столько
элементов, которые содержащаяся в данном массиве.
>> Если я хочу, чтобы добавить additional-- Теперь обратите внимание, что это Var
и не-- это переменная и не является постоянной, которая
означает, что я могу изменить содержимое этого массива, я могу добавить объекты к нему.
Но я не могу просто сказать сорта а затем в квадратных скобках
четыре, потому что это будет из ошибки границ в этом случае.
Если я хочу на самом деле изменение размер массива,
Я должен использовать метод точка добавить к добавить кое-что к в самом его конце.
Я могу, однако, изменение индивидуальные показатели.
>> Так что я мог бы использовать оценки а затем в квадратных скобках
нулевой манипулировать этот первый индекс и так далее, как вы обычно ожидаете.
И что я могу сделать то же самое на самом деле получить данные из этого также.
Теперь есть также своего рода фантазии метод сделать это, оценки плюс равных
а затем еще один индекс, который будет append--
или не другой index-- но другой список, который
будет добавлять этот список к задней части сортов.
И оценка будет затем содержать все это.
Но это своего рода дополнительной вещь что я просто покажу вам, для удовольствия.
>> Теперь есть цикл.
И это начало, где вещи начинают немного измениться.
Обратите внимание, как это для петли отличается от для петель в С
Теперь отмечу, что для петель в Swift может
быть сделаны, чтобы выглядеть, как на петель в С, но есть много более полезных конструкций
что существенно устранить необходимость иметь для вар я равна 0 с запятой я
меньше, чем какой-то длины, так далее, и так далее, не так ли?
И эта конструкция является лишь одним из них.
>> Для индекса, индекс нового Переменная, в этом случае, в диапазоне.
И то, что я хочу сказать, что есть Диапазон от 0 все вплоть до
но не включая grades.count.
Так что это точка точка меньше чем знак представляет
Диапазон значений, начиная с нуля все, вплоть до grades.count минус 1.
Существует отдельный оператор, который существует,
что точка точка точка, которая бы означает, что я хочу диапазоне от нуля
сортам рассчитывать включительно.
>> Но в этом случае, так как они массивы нулевой отметки, мы, конечно,
не хотят идти на Максимальное количество классов.
Я могу суммировать оценки, как вы, возможно, ожидать, и выход все эти вещи.
ОК, как двигаться дальше.
Теперь давайте поговорим о функциях.
Для того, чтобы определить функцию Вы используете ключевое слово фанк.
И опять же, у Свифта вы должны быть очень осторожны с типами.
Вы предоставляете ему параметры определяя, например,
имя параметра и Затем в Colin, тип данных
что вы ожидаете, что Параметр принять.
>> Таким образом, в данном случае мы имеем Функция называется граф класса печати.
Он принимает переменную зачетную книжку, или, скорее, параметр, называемый зачетную книжку.
И мы ожидаем, что зачетную книжку быть массив целых чисел.
Если зачетную книжку пуст, Мы напечатаем одну вещь.
В противном случае мы будем печатать номер марок, что это на самом деле.
>> Теперь, если мы хотим, чтобы вернуться некоторое значение, то путь
что мы модифицируем это определение на самом деле использовать это ключевое слово стрелкой,
или использовать эту стрелку означающее.
Так вот, мы собираемся определить Функция называется средней.
Мы собираемся принять список номеров.
И мы собираемся вернуться двойной, который, мы надеемся,
как среднее этого массива.
А для того, чтобы сделать это, для того, на самом деле вычислить это среднее,
мы будем принимать сумму и мы, Конечно суммировать все объекты
в этом массиве.
>> Обратите внимание, что есть новый стиль для цикла здесь.
Мы не должны быть явными о перебора каждого элемента,
но мы можем вместо сказать класса и зачетную книжку, смысл
что для каждого элемент, который мы имеем в этом,
предусмотреть, что пункт в этом переменная с именем класса.
И я хочу сделать что-то с ним.
Так что я собираюсь подвести все эти данные а на самом деле вернуться двойную деление.
>> Теперь обратите внимание снова здесь есть Концепция целочисленного деления в Свифт.
Если вы хотите удвоить разделение потому что вы хотите знаков после запятой,
то вы должны быть ясными, не только об одной стороне,
потому что он не собирается, чтобы позволить вам заставить данные по обе стороны от этого,
у вас есть на самом деле, конечно обе стороны в парном разряде
так что вы очень Явное о убедившись,
что вы делаете двойной деление.
>> Давайте двигаться дальше.
Так что, если я действительно хочу, чтобы accept-- Таким образом, в этом конкретном примере,
это по-прежнему команда линия приложение.
И мы начинаем видеть некоторые из ограничения молодой языка
в том, что хотя мы можем доступ к аргументы с помощью
это process.arguments, это до сих пор не обязательно чистым
вещь, которую мы когда-либо видели.
Но в основном я призываю вас к виду Взгляните на этот код
и попытаться выяснить, что именно происходит.
>> По сути то, что происходит в том, что мы берем список аргументов
и были принудить их в целые числа, а затем мы
собирается использовать это в качестве пути для печати из в среднем все наши классы.
Двигаться дальше.
Теперь есть еще один тип data-- еще тип данных, а не массивы
называемые словари, которые очень похоже на хеши или хэш-карты
и подобны также Ассоциативные массивы в PHP.
Таким образом, они имеют представление ключей и значений.
>> И они определяются также с Эта площадь обозначения кронштейн,
но разница в том, что словари имеют
внутри квадратных скобок, двоеточия.
И Двоеточие разделяет данные тип, который является ключевым и значение.
Таким образом, в данном случае, я собираюсь создать Словари принять некоторые оценки.
И это будет тип строки: INT,
Это означает, что все ключи собираются быть строками,
и все значения тех ключи собираются быть целыми числами.
>> Что это означает, что я могу затем ссылаться на конкретные данные
что я хочу использовать эти ключи, а чем при использовании цифровых показателей, как I
бы для стандартного массива.
Теперь давайте разберемся, есть одна важная вещь,
что я также хочу упомянуть о Этот конкретный последовательность кода.
И это то, что есть Еще один тип данных,
или, скорее, там это Идея данных, что является
содержится в Swift называется УСТРОЙСТВА.
>> И то, что опциями означает, что он признает тот факт,
что иногда вы не собираетесь получить данные, которые вы на самом деле ожидать.
И так, что я имею в виду, что is-- давайте взгляните на этой последовательности кода
который последовательно перебирает на себя все Аргументы, которые были переданы этому коду
и пытается преобразовать их, пытается разделить на множество строк,
потому что он принимает очень Особый тип аргумента.
И тогда он будет пытаться заставить строки, которые представляют номера
в целых числах, которые являются сорта, что я могу затем вычислить.
>> Поэтому в основном я собираюсь использовать этот раскол функцию, которая
существует в Swift стандартная библиотека.
Я собираюсь пройти в него строка, что я хочу, чтобы разделить.
А потом, в использовании этого Сортировать фанки синтаксиса, который
Я не знаю, будем ли мы добраться, но может быть, мы
будет на самом деле определить точное символ, который мы хотим разделить на.
Итак, что же это на самом деле выглядит?
Давайте взглянем на на самом деле работает этот код.
>> Так, например, скажем, у меня есть Тест и я получил 50 на этом.
И у меня есть PSETs и Я получил сто по этому вопросу.
И я got-- есть еще один Тест и я получил 40 на этом.
Я ударил Enter, и в конечном итоге то, что произойдет это то, что он делает
принимает эти параметры, расщепление строки в этих двоеточия,
признавая, что есть два элемента в каждом из,
и это по существу отслеживать каждого из них.
>> Так что я в моем словаре викторину, чья Значение, представленное числом 50,
У меня есть PSET, что имеет значение 100, и викторины, который имеет значение 40.
Позже в коде I на самом деле в среднем все те значения
и перечислить все ключи что особое словарь.
Но это важно так что вы можете заметить,
что происходит, это то, что мы хочу сделать, это принять эту строку
и разделить его на этого персонажа, которые мы можем сделать снова и этот раскол,
Функция использовании такого типа Интересно, синтаксис, который существует здесь.
>> Просто сейчас предположить, что это нормально.
Мы будем смотреть больше на это всего на некоторое время.
Но теперь есть интересное аспект, который мы на самом деле
хочу попробовать преобразовать это строки в число.
Но в других языках что может случиться,
что мы, вероятно, попытается это сделать, и либо получить назад
какая-то стража значение как отрицательный
или, может быть нулевым или что-то подобное.
Или, может быть, было бы просто вызвал ошибку.
И мы должны были бы затем поймать эту ошибку
а затем попытаться сделать то, основано на том,
что этого преобразования в целое число не удалось.
Вот где эта идея из дополнительных опций входит.
Вы на самом деле можно создать тип данных, это знак вопроса INT, например.
Это означает, что этого же числа это, по сути, дополнительно.
А что будет в том, что он может содержать целое число, или это не может.
Это может, в действительности, будет этот другой Идея, полностью называется Нилл.
В котором это означает, что существует нет значения вообще в этом.
Это даже не ноль, там просто никакого значения.
Там абсолютно никакого значения представлены.
>> И это то, что эта линия 71 делает.
Является то, что говорю, что я хочу попробовать установить значение,
переменная с именем класса, равно преобразование этой строки в междунар.
Так что я взял эту строку, это первые компоненты,
или, скорее, второй Компоненты, так как это
равна нулю индексируются, это Строка, я разделить.
И я хочу, чтобы преобразовать что на целое число.
Но это не всегда может перейти нормально, потому что представить себе
Что бы произошло, если бы, вместо того, типа Количество, я печатаю конечно, как ASDF.
>> Это будет провал.
Это на самом деле не будет возможность конвертировать, что в целое число
как я хотел бы ожидать.
Таким образом, вместо стартует какой-то ошибки,
у нас есть эта идея необязательно.
А это значит, что с помощью это знак вопроса я могу сказать
ОК, это возможно, что я могу взять это, превратили его в INT,
и положил его в переменной, который также будет Int.
Если это так, то это означает, что это было успешным
и это первая часть Блок может продолжаться.
>> В противном случае, она не смогла.
Там нет значения в grade-- или а нет значение в существующих,
и я на самом деле есть, чтобы попытаться справиться с этой ошибки.
Вы будете видеть это вопросительный знак все время
у Свифта и в примере кода для Swift.
И в самом деле Нилл оператор, такого рода вопросительный знак, часть опциями,
будет, вероятно, один из более трудных вещей,
к виду обернуть вокруг головы как вы на самом деле с ним работать.
>> Это может иметь смысл сейчас.
И в самом деле, когда я был писать пример кода для этого,
Конечно, я понимал, что происходит,
но все-таки поймал меня сюрприз каждый так часто
когда я найду, что некоторые данные на самом деле
ноль версия, опционально версия данные, которые я ожидал.
Так что просто понимать, что если вы есть дополнительный вариант
Вы должны распаковать, что Данные из этого окна.
>> Так что это вроде как я-- Представьте, что вы есть коробка, и он содержит что-то.
И то, что вам нужно сделать, это, чтобы задать вопрос,
это возможно, что эта коробка на самом деле содержит данные, которые я ищу?
Если это так, то тянуть, что из данных и положить его в эту переменную существующего.
Если нет, то я просто должны игнорировать содержимое этой рамки
вообще потому, что он буквально не содержит ничего.
>> Есть вопросы по этому поводу?
Хорошо, давайте отойдем от этого вроде основе командной строки вещь
и начать смотреть на некоторые технологии
что Xcode предоставляет нам в виде детских площадок.
Так что много Возможность здесь с Swift.
И если вы откроете Xcode и его спрашивает вас, что вы хотите сделать,
Вы можете открыть площадка и просто поиграть
с большим количеством различных структур и аспекты языка
прежде чем даже начать касаясь IOS SDK или Mac SDK.
>> Так что это так, давайте скажем, что я have-- У меня есть относительно надуманный пример
здесь, но медведь со мной, как мы вроде от того, работают через этот пример.
Давайте предположим, что мы должны сделать много экспонент с фиксированной стоимостью,
как мы знаем, что мы собираемся нужно сделать много квадратных полномочий, например.
Итак, мы собираемся, чтобы занять некоторое значение х, мы собираемся возведем в квадрат
мы собираемся занять некоторое значение у, и мы собираемся возвести в квадрат его.
Так далее, и так далее.
>> Теперь мы можем на самом деле просто создать Мощность 2 функции для этого, не так ли?
Таким образом, мы бы создать власть 2 функции.
Мы принимаем в два раза.
Мы output-- или мы будем вернуть двойную тип.
Мы возьмем этот результат а затем в два раза
то, что мы на самом деле взять результаты, которые был инициализирован к значению одного из них,
и умножить его на х.
Таким образом, в сущности, мы имеем х раз х здесь.
>> И так, то я могу то, как мы могли бы ожидать, возьми это, запустите мощностью 2,
обеспечить ему некоторые данные, я люблю 2.0.
И мы получаем, чтобы увидеть результаты здесь 4,0.
Запустите силу 2 на 3,2 и мы получить, чтобы увидеть наш результат 10,24.
До сих пор так хорошо, не так ли?
Теперь мы думаем, ну и ладно.
Теперь я на самом деле нужно сделать много полномочий 3.
Так что я буду копировать вставить весь этот код, изменить имя функции из
Мощность 2 к власти 3, и все будет таким же, за исключением этого значения
здесь, это диапазон от 1 ... 2.
>> Таким образом, вместо того, чтобы повторять Этот цикл в два раза,
Я хочу повторить этот цикл три раза.
Так что я просто изменить это значение от 1 3-- или, скорее, от 2 до 3.
Итак, еще раз, и тот же код, это единственное изменение.
Теперь это тоже работает.
Мощность 3 приводится в некотором значении 2.
Мы получаем 8.
Так 2 кубе.
И 3,2 кубе составляет 32,768.
И до сих пор так хорошо, не так ли?
Но надеюсь, это немного немного красного флага для вас
в том, что теперь у нас есть некоторое дублирование кода
для некоторых очень незначительные, за исключением переход от одного к другому.
Так есть ли какой-то способ, что мы могли бы упростить
Эта проблема, где мы можем на самом деле, во время выполнения, выяснить некоторые,
предоставить нам какую-то функцию, которая имеет Именно сила, что мы хотим.
>> И есть эта идея затворы, которые, действительно, очень
важно в контексте Свифта, и во многих других языках.
Но, наверное, вы увидите он использовал более, что в Swift
потому что она встроена в языке
чем вы будете в другой также современные языки.
Таким образом, идея закрытия это, то, что мы
может иметь функцию, которая предназначается для быть общая функция, общий питания
функции.
>> И эта функция будет принимать этот показатель, что мы на самом деле
хотите создать.
Так, например, самый первый Например, мы хотели мощность 2.
Таким образом, мы бы обеспечить власть а затем в скобках 2.
А теперь обратите внимание, что Это на самом деле возвращает.
Это принимает ввод праймера называется у, что представляет собой целое число,
и возвращает этот сумасшедший смотрит вещь в parentheses-- скобках
Двухместный а затем двойную стрелку.
>> Что это означает, что я собирается вернуться функцию.
Я не возвращался Другой тип данных, я
фактически возвращает функцию который имеет этот параметр, который
принимает двойной качестве входных данных и выводит дважды в качестве возвращаемого значения.
И в результате, потому что теперь я назвал мощность, переходя в некоторое значение для у,
и я создаю этот другой function-- обратите внимание, что есть
Еще одна функция, который создается внутри this--, что я делаю
, я может изменить это значение, что одна
Значение, которое я изменил от 2 до 3, теперь я сделать это у.
>> И это сохраняется.
Таким образом, каждый раз, когда я называю власть из, по существу, что происходит
является то, что я получаю вернулся функцию.
Обратите внимание, что здесь я определил Новая переменная называется квадратом.
Я установил его равным силе, условии, что это значение 2 к власти.
И то, что это возвращается функцией.
Так площади, переменная квадрат, теперь функции типа
что имеет this-- ой прокрутку вверх немного bit--, что имеет эту подпись,
принять двухспальная кровать и выход в два раза.
>> Так что теперь, что я сделал том, что я по существу
создали функцию, называемую квадрат, который принимает любое значение и будут умиротворять ее.
Мы можем видеть, что происходит здесь.
Площадь 3, например, означает, что я собираюсь взять значение 3 и квадрат его.
Так как именно это работает?
Когда я прохожу власть из 2--, когда я пройти 2 в этой власти функции,
эта переменная у является заполняется этим значением 2.
И это своего рода сохраняется в памяти.
Это вроде как состоялась в состояние где-то в компьютере,
мы действительно не волнует, как или, где в данный момент.
>> Но я вернусь эту функцию называется exponentiate.
И опять же, это действительно не имеет значения что эта функция вызывается,
мы действительно можем назвать это что-нибудь, что принимает двойной и возвращает двойной,
но использует это значение у внутри него.
Таким образом, даже если это функция, Эта функция exponentiater это
были возвращены обратно в мой Переменная, которая я позвонил площади,
он содержится в нем это понятие о том, что у был.
И он помнит это.
>> Таким образом, каждый раз, когда я вызова этой функции, что теперь называется квадрат, он использует это.
Но это также означает, что я могу создать еще одну переменную с помощью
отличается мощность.
Так что я могу создать переменную куба для Например, обеспечить к нему силу 3.
Теперь куб на самом деле взять некоторые Значение и куб, и вернуть его.
Итак, мы видим, что я получаю Значение 8 из этого.
>> Но это значение у не имеет изменилось, потому что они
состоится в своего рода независимых переменных.
Они являются своего рода проводится в независимые пространства в памяти.
Так куб всегда будет иметь х к власти 3.
И квадрат всегда будет иметь х к власти 2, который
означает, что площадь будет всегда кв-номера, как я думаю.
И куба всегда будет в кубе номера, как я ожидаю.
Это также означает, что иногда вы можете получить какую-то фанки глядя синтаксиса
где у вас есть власть, по крайней очень Внизу экрана здесь, мощность 5.
И вы проходите в результате.
Вы называете эту функцию, это были возвращены с номером 4.
И так, что по существу это от 4 до пятой степени,
мы можем видеть результаты там.
Со мной до сих пор?
>> Так эта идея называется замыкание, потому что мы в основном делаем
это мы инкапсуляции некоторые данные into-- рода
ограждающих эти данные в функции, и мы
возможность повторного использования этой функции.
Теперь этот синтаксис, хотя может на самом деле упростить большое количество.
И есть много возможности у Свифта для этого упрощения.
И вот что-то последующие реально взглянуть на.
Таким образом, в 7b, например, мы принять это точно такой же код.
>> Но теперь вместо того, на самом деле определить функцию
Внутри этой власти работать и дать ему имя,
а затем вернуть имя этой функции, которая
Затем используется как часть это замыкание, а мы
просто хочу, чтобы упростить его.
Нам не нужно эту функцию, чтобы быть названным.
Так что это понятие анонимная функция, где мы можем затем
принимает в качестве входных данных, в скобках здесь, переменная х, который типа Double.
>> Мы собираемся вернуться типа двойник.
А потом по ключевым словам, п, Начало этой функции.
Так заметить, что все это находится в фигурных скобках
и мы определяем работать здесь анонимно.
Просто простой способ определение ту же самую вещь.
ОК?
Но держись, Swift на самом деле позволяет пойти дальше и упростить еще больше,
потому что действительно мы не все равно, что этот параметр
назвал ни конкретную вещь.
Это действительно может быть названо иначе, и мы все еще можем использовать этот первый параметр.
>> Таким образом, в самом деле есть этот особый Тип данных в анонимных функций,
есть это особое название переменные в анонимных функций
которые начинаются с знак доллара и представляют собой
число параметров, ноль индексированный этой функции.
Так что несколько вещей происходит.
Здесь я собираюсь вернуться, и тогда фигурная скобка представления функции,
не так ли?
>> Заметьте, что я не определили Типы параметров или возвращаемый тип.
Это на самом деле можно сделать вывод, из-за подписи
этой исходной функции.
Таким образом, мы можем устранить что в качестве возможности.
Но также я могу использовать знак доллара нуля до представлять этот первый параметр, это
перешла в этой анонимной функции.
Так что упрощает его еще больше.
ОК?
Все идет нормально?
>> Теперь именно это type-- сделать вас помню этот доллара нулю знак
что мы видели в этом фигурной скобкой что мы только что видели некоторое время
назад в этом Swift шесть например?
Это было прямо здесь.
Обратите внимание, что именно то, что мы смотрим,
является то, что мы прошли в этом расщепленной функции
анонимная функция, что проверяет первый параметр
чтобы увидеть, если он равен символ двоеточие.
И это именно то, что происходит, является то, что все
мы doing-- возвращение Ключевое слово подразумевается
в этом case-- мы возвращаемся Это значение, при котором мы сравниваем
Первый параметр против Этот символ двоеточие.
И так, что-то проясняет это.
И вы увидите эту конструкцию Много в Swift синтаксиса, так что имейте это
в виду, когда вы взглянуть на это.
Теперь мы можем выйти рельсы немного
и действительно работает фантазия, которая показывает даже некоторые более власти Свифта.
Вы даже можете увидеть некоторые из них в типовых кодов.
Так вот почему я собираюсь показать это вам.
>> В основном то, что мы можем сделать, это, во-первых всего, это был своего рода ненужным для меня
осуществить все, что власти Код потому что если вы импортировать Дарвин
библиотека, это на самом деле включает в себя функцию называется военнопленных, что делает это для вас.
Таким образом, мы можем упростить его еще больше и есть нашу функцию питания сейчас просто
быть прекрасный один лайнер, где мы только что вернуть эту анонимную функцию, которая
принимает знак доллара 0 КАК ЕЕ Основание и у как показатель его.
>> Но мы можем получить действительно, действительно фантазии, когда мы
понять, что Свифт много энергии под капотом.
Многие из операторов, мы занимаемся,
Знаки плюс и деление символы и все эти вещи, которые вы обычно
работать с с типами данных на языке программирования,
на самом деле расширяемый у Свифта.
Так что это означает, что в том, что мы можно определить наши собственные операторы.
>> Так что теперь я устал печатать во всем этом POW, а затем скобки, а затем
база.
Я не хочу, чтобы сделать это.
Я действительно хочу, чтобы иметь Оператор, который позволяет мне сделать это.
Так что я могу сказать, Свифт, что я хочу создать оператора, звезду
star-- я, кстати, не может использовать карат потому карат оператор,
делает что-то совсем другое.
Так что я не хочу, чтобы отсортировать из столкновения с этим.
И так, что вы видите в различных языков, в том числе Python,
это как звезда звезда оператора представлять показатели.
>> Так вот единственная причина, почему я сделал это.
И это будет оператор типа инфикс.
И я должен предоставить к нему некоторую информацию
о приоритете в этом Оператор так что левоассоциативны.
Это как относительно высокий приоритет по сравнению
к суммированию или умножение.
Это более высокий приоритет, чем все из них.
Так далее, и так далее.
И тогда я определяю функция, которая на самом деле
диктует, что этот оператор делает.
Так если предположить, что у меня есть левый сторона и правая сторона,
который был бы, возможно, лучше имя переменной для этого.
Левая сторона и правая сторона.
Затем я могу принять это власть Левая часть с правой стороны
и вернуть это значение.
Так что теперь это супер сладкие.
Все, что мы должны сделать, это 2 звезда звезда 3 и это 2 в третьей степени,
и мы получаем значение 8.
2 звезда звезда 10 составляет от 2 до 10-й степени, мы получаем 1024.
>> Так что теперь наша власть функции, что опять-таки разные,
потому что вся идея этого было то, что у нас есть одна функция, которая
всегда имеет какую-то ценность и умножает it-- или, скорее,
занимает показатель, такой же мощности.
Так что теперь это даже проще.
Так что теперь это просто доллар войдите 0 звездообразования у.
Мы даже не придется использовать военнопленных больше.
>> Хорошо, кто потерял?
Делаем ли мы в порядке?
Любые вопросы по этой вещи?
Да?
>> АУДИТОРИЯ: Когда you-- [неразборчиво] фанк сила у двойника.
Итак, когда вы возвращение функции.
DANIEL Armendáriz: Funk сила у двойника.
Ах да, я не знаю, то, что у номера.
К сожалению об этом.
>> Зал: А почему вы возвращения Функция [неразборчиво] корпус.
Разве это не доллар нулю звезда звезда у [неразборчиво]
найти, что оператор с этим возвращение дважды [неразборчиво] в два раза?
>> DANIEL Armendáriz: Итак, давайте мне ответить на ваш вопрос
как я понимаю это, и вы можете сказать мне, если я не понимаю ваш вопрос.
Так что это конструкт, фигурная скобка Знак доллара нулю звезда звезда у,
является функцией.
И он принимает параметр, который представленное этим знаком доллара нулевой.
Ключевое слово возвращения подразумевается в этом очень короткий, анонимный синтаксис функции.
>> Это означает, что по существу О чем это говорит
является то, что я определяю function-- и тогда я буду
просто назвать его something-- где у меня есть некоторое значение у.
У меня есть г, что в два раза.
И я возвращаюсь в два раза.
И у меня есть в этой возвращении y-- извините, Я не должен был назвать это y-- х.
Ах, боже мой, боже мой, боже мой.
X-- nope-- звезда звезда у.
>> Так что это просто Упрощенная версия этого.
И так причина того, что у меня есть доллар знак нуля является то, что с помощью этого корпус
означает, что я больше не придется не вводить военнопленных, или больше не делать
Я должен сделать что-то как 3 звезда звезда 2.
Я могу просто одного Функция называется площадь
что всегда будет иметь некоторое значение в качестве входных данных
а на самом деле вернуться на площадь, что.
>> Так весь смысл закрытия является просто вроде инкапсуляции тот факт,
что я всегда хочу, чтобы использовать у всякий раз, когда Я называю эту функцию, как власть
при принятии этого показателя.
Так возвращаясь затем, функция, которая принимает
двойной, который является базой, и возвращение результата этого показателя
является здесь ключевой.
И это главное отличие.
Был просто немного процветать.
>> Это ничем не отличается по сравнению с предыдущими примерами,
но это было только немного процветать, мы можем на самом деле
создать оператор в Swift и на самом деле делать вещи с ним,
которая является своеобразной круто.
Я ответил на ваш вопрос?
Сладкий.
Что-нибудь еще, прежде чем мы перейдем?
ОК.
>> Теперь этот вид просит Вопрос в том, that-- Ну ладно,
Теперь у нас есть возможность для Функции должны быть возвращены.
Можем ли мы также передаем функции как данные или в качестве параметров других функций?
И в самом деле мы можем.
Так что давайте говорить, что у нас есть все тот же код.
У нас есть квадратный переменную что будут умиротворять этот код.
И у нас есть переменная куб что будет куб некоторые данные.
И мы действительно хотим, чтобы применить в широком диапазоне чисел.
>> Итак, что мы могли бы попытаться сделать, Конечно, что, безусловно, справедливо,
это пройти по этому списку номеров и применять мои функции квадратных и кубических
и получить два новых списков в качестве результатов которые это первоначальный список квадрат
и в кубе, соответственно.
Вполне приемлемо.
Но то, что вещь, которая здесь мы видим, что у нас есть,
снова, дублирование кода.
И есть, возможно, возможность для нас, чтобы упростить это немного.
Что, если бы был способ для нас на самом деле всегда перебрать некоторое список
и просто переходят на этот волшебный функционировать переменную, которая
представляет собой функцию что мы хотим применить
для каждого элемента в этом списке.
Это поднимает концепцию о том, что называются функции высшего порядка.
И это, по существу, то, что это является, то, что мы можем создать функцию.
>> И в этом случае она называется Mapper, просто чтобы дать ему имя, просто
отображение над каждой один элемент в списке.
Где я возьму список и я взять функцию.
И, что функции, конечно, имеет определенную подпись.
Он принимает в качестве параметра вдвое и это будет выход в два раза.
И весь результат Эта функция будет
быть новый список, который имеет тип Double.
ОК?
>> И то, что я собираюсь сделать является применение этой функции F
для каждого элемента в моем списке.
И reply-- и довольно вернуться этот новый Список, как результат, который на самом деле круто.
Теперь я могу передать функции вокруг.
И эта идея более высокого порядка функции, что действительно важно.
И это преобразователь на самом деле просто Реализация бедняка
функции, которые встроены в Swift называется карту.
И это делает именно это, может быть, даже немного лучше.
>> Это просто своего рода общим, упрощенная версия, что
позволяет нам увидеть концепция, которая применяется здесь.
Теперь посмотрим на то, как я может на самом деле применить свои площади
и мои куб функции в этом списке чисел.
Я веду свой Mapper.
Я представить ему мой список чисел.
Я представить ему на функция, которая собирается
применять к каждому из этих показателей.
И это будет Выход в результате.
И я буду получать, чтобы увидеть, что я в квадрате и в кубе мои номера в результате.
>> И, конечно, картографа состоится любой вид анонимной функции.
Мы даже можем видеть, что я создал Новый анонимную функцию, которая
просто принимает какой-либо параметр и делит его на 2.
И мы видим, что я, в самом деле, разделить мой список 2 вместо этого.
Прохладный?
Все идет нормально?
Ладно, теперь давайте вернуться к этой идее.
Давайте реализуем это еще в Контекст зачетную книжку.
>> И если я это сделаю, мы можем видеть, что я могу применяют широкий спектр этих options--
или большое разнообразие них Функции высшего порядка
на самом деле упростить свою способность делать Разнообразие вещей на списки номеров.
Так, например, если взять список номеров,
один из высших функций порядка что существует, называется уменьшить.
Что снизить делает, а чем карты, сводится будет
принять два элемента в списке, займет некоторое функцию, которая
сравнивает два элемента Список, и он будет затем
вроде output-- Выход из этой функции
будет один элемент, который Вы тогда по сравнению с другими.
>> Таким образом, вы могли бы использовать это на самом деле сумма чисел в вашем списке.
Например, если у вас Список 1, 2, 3, 4, 5,
вы берете первые элементы, 1 и 2.
Вы можете обратиться к ней дополнение функция, которая принимает эти два элемента
и выплевывает один из тех элементов, которая была бы значение 3.
Затем мы берем это значение 3 с рядом элемент списка, подвести тех, два,
а затем продолжать идти вниз по списку.
>> Мы сокращение список до одного значения.
И так уж случилось, что символ плюс
является оператор, как мы только что видели.
Этот оператор на самом деле это функция, которая
имеет именно этот список, который мы хотел, а эти свойства
что мы хотели бы.
Поэтому я призываю вас, чтобы взгляните на это.
Я хочу, чтобы отсортировать хода на некоторых из этого кода
так что мы можем реально взглянуть на некоторые реально существующее, истинная Swift в Xcode,
в развитии IOS.
Но взгляните на это и посмотреть, если вы можете
разобрать через то, что происходит на с некоторыми из этих более высокого порядка
функции, включая фильтр, снижение, а вы даже
см где-то здесь карту, а также.
Это прямо здесь.
Где он будет принимать последовательность сортов и он будет на самом деле
сопоставить их с помощью конструкции переключателя, которые Вы могли бы признать от C,
но на самом деле это гораздо больше, мощный, чем конструкции переключателя
что мы имеем в С
>> И мы будем применять, что каждый элемент в списке
и на самом деле обеспечивают Письмо оценка каждого
из тех марок, используя все эти понятия что мы только что говорили раньше.
Теперь давайте обойти всего за минуту и ​​разговоры о структур.
И так Структуры являются ожидания в C, что мы смогли определить новый тип данных.
Структуры существуют в Свифт.
И так же много других конструкций называемые перечисления и классы, которые на самом деле
принять эту идею совершенно другой уровень.
>> И в основном это просто способ определения нового типа данных.
Так что если вы get-- если вы приехали по классу или структур или перечислений,
не пугайтесь этого.
Это просто способ определения некоторые новые особенности тип данных.
И это очень важно, когда мы говорим о развитии IOS приложения
потому что все, что существует в приложение IOS
по существу объектом некоторого вида.
И объект в основном класс или перечисление или структурой.
>> Таким образом, в данном случае я определении нового типа данных
что я звоню оценку это некоторые свойства, в том числе
Имя и последовательность классов.
Так один тип оценки что я мог бы иметь в виду
бы викторины, например.
Я хотел бы иметь взносов, которая была викторина
и что было множество классов связано с тем, для викторины одной,
Тест два, так далее, и так далее.
>> Или я мог бы иметь различный тип оценки для задачи множеств.
И я могу делать.
Я могу на самом деле есть Функции в рамках этого типа
данных, которые теперь называются методами.
Так что если вы когда-либо видели Метод слово, это действительно
это просто функция, которая применяется в очень определенного класса,
или очень конкретного типа данных.
Это позволяет нам изменять данные в.
>> Итак, другими словами, если я хочу, чтобы добавить класс к моей оценкой,
то все, что нужно сделать, это добавить счет, который был введен
с помощью этой функции к мой внутреннее свойство.
Там еще один аккуратный конструкция здесь у Свифта, который это точка точка точка
оператор, который означает, что результаты могут сейчас принимаю любое количество целых чисел.
И результаты будут массив целых чисел,
были переданы на моей функции, которые означает, что я могу делать вещи, как это.
>> Что я могу сделать добавить оценки и просто обеспечить произвольные числа целых чисел в нем
и действительно будет предоставлено массив из этих ценностей в моей функции
или мой метод, как это имеет место.
Теперь это важно, потому что все в Xcode, все в ИО,
на самом деле объект.
Так что имейте это в виду когда мы бюст открытый Xcode
и пропустить вперед за прошивкой версии два и три
и на самом деле идти на версии четыре.
>> И опять же, все это будет будут размещены на странице семинара.
IOS четыре является своего рода полномасштабной реализация очень простой приложение.
И то, что это приложение делает это загружает пользовательский интерфейс, который выглядит следующим образом.
Опять же, если мы нажмем на раскадровке мы можем видеть, что это, как он выглядит.
Это интерфейс.
Он имеет название на самом верху.
Я назвал его веб-галереи.
>> В середине есть элемент называется вид изображения пользовательского интерфейса.
А внизу есть Панель инструментов с помощью одной кнопки, что
имеет эластичные пространства, которые позволяют его центр в середине этой панели инструментов.
И то, что происходит, что, когда это загружает его скачивает файл JSON, что это
содержащиеся на сервере в другом месте, грамматический разбор JSON файл,
и файл JSON выглядит немного как это.
Файл JSON выглядит так.
Там оно и есть.
>> Он имеет название альбома и она имеет множество фотографий.
Каждый из этих фотографий есть имя, а также
URL сами, которые представляют JPEG версия этой отдельной фотографии.
Так, что случилось, что, когда эта программа Грузы, он загружает файл в формате JSON,
анализирует его, кладет все это в эквивалент массива в ИО
приложение развития, который является NSArray.
И тогда я могу затем загрузить Эти данные в приложение
и загрузить его на моем экране.
>> Существует образ, который был загружен с помощью кнопки в самом низу.
Если я нажимаю Получить Следующая, тогда тянет этот образ из интернета
и заменяет это изображение по мнению изображений UI.
Таким образом, вы можете скачать это и на самом деле взглянуть на него на вашем компьютере.
И строить его и на самом деле скомпилировать его на ваше устройство.
Но по существу процесс был это, создайте storyboard--
или, скорее, не create-- но выбрать раскадровки.
А на самом деле we'll-- если вы не mind-- мы будем принимать только несколько секунд
на самом деле показать вам, как это было сделано.
>> Точно так же, что, как мы можем на самом деле достижения этой цели производится немного больше
очевидной.
Одноместный Просмотр приложения, я буду называть этот семинар
четыре представляющий это частности число.
Сохраните его на рабочем столе.
Хорошо, собирается нажать на раскадровке.
И то, что я собираюсь сделать чтобы найти мой взгляд изображения,
перетащите его на моем пользователь интерфейс и в центр.
Теперь просто центрирования его, к сожалению, не собирается делать кучу,
для экрана, кроме что это точный размер.
>> Таким образом, мы убеждаемся, что, нажав на этой двойной вещи окружности,
снижения этого поп меню здесь и изменения
чтобы просмотреть, где мы на самом деле получить шанс увидеть, как
это будет на самом деле смотреть на других устройствах.
Как мы видим, мы даже не увидеть его на этом конкретном случае.
Так что я собираюсь закрыть это сейчас.
>> И я собираюсь выбрать этот значок вниз на очень
Нижняя часть экрана.
Это говорит Разрешение Автокомпоновка вопросы.
К сожалению, это отрезать внизу.
Но если я нажимаю на что, что я получить эта поп-up-- уйти.
Что я получаю это всплывающее меню, которое позволяет мне добавить недостающие ограничений.
И тому, чтобы он Затем рода заблокировать его
в центральной части Экран, как я мог бы ожидать.
>> Теперь для того, чтобы получить эту кнопку на верх ее, мне нужно идти в редакцию.
Перейти к Вставить в систему и нажмите Навигационный контроллер.
То, что это будет делать то, что будет добавить Весь этот другой компонент к нему,
но на самом деле ссылаются это обратно к моей первоначальной UI.
И детали, опять же, мы не действительно нужно заботиться о прямо сейчас.
Но я хочу, чтобы иметь Панель инструментов в самом низу.
Так что я буду проверка показывает, панель инструментов.
>> И это дает в моей точки зрения, которые сейчас где-то еще,
мы видим, это связано сюда.
Это в настоящее время обеспечивает панель инструментов В нижней части моей UI.
Так что теперь, вместо выбора просмотр изображений, я могу найти ярлык,
или, скорее, toolbar-- давайте посмотрим, где это?
Как он называется?
Пункт button-- bar-- item-- sorry-- панель кнопок пункт.
Plop что там и применить пару гибких пространства по обе стороны
на самом деле центр, который.
Так что теперь я создал свой пользовательский интерфейс, в основном.
И я могу дать ему имя, Двойной щелчок на самом верху
здесь и говорить веб-галереи и так далее.
Теперь снова, это элементы которые существуют сами по себе.
И у меня есть для подключения им мой код, который
Что я могу сделать, снова принося до этого двойного значком в виде круга,
изменения от просмотра.
Что, кстати, сейчас мы видим, является красиво по центру и будет хорошо смотреться
на различных устройствах.
>> Переключитесь на автоматический, который будет воспитывать код ViewController.
А теперь эта часть очень важна.
Для того, чтобы подключить их два элемента, чтобы ваш код пользовательского интерфейса,
При выборе пункта, что Вы хотите подключить.
Таким образом, в этом случае мы на самом деле хотите, чтобы закодировать
изменить имидж, которая содержится в пределах этого представления изображения пользовательского интерфейса.
Так что, если вы контролируете нажмите от Посмотреть изображение и перетащите,
Вы заметите, что вы получаете небольшой бар, когда вы отпускаете все это поп-
до произойдет.
>> И он говорит, что мы будем создать подключение.
А отсюда я хочу дать его имя, что-то вроде галереи.
Нажмите Enter.
И это на самом деле обеспечивает переменная с именем галерея
что я могу затем ссылаться в своем коде сменить имидж, например.
Так как же, что код на самом деле выглядит?
Ну опять же, я не хочу, чтобы тратить слишком много времени на это.
И я призываю вас скачать и посмотреть.
Но один из самых Важным аспектом является код
что на самом деле получает изображение.
>> Таким образом, в данном случае я хочу чтобы получить в течение моих фотографий
массив, который содержится в моем классе.
Я хочу задать имя и URL который был разобран из этого JSON.
На самом деле спросите устройство, чтобы получить URL, чтобы принести URL из этого,
а затем выборки данных из содержимое этого URL.
Тогда преобразования данных в изображение путем пропускания его в изображение пользовательского интерфейса.
Итак, еще раз, это все разные типы объектов, различных типов классов.
>> И тогда я могу затем установить мой gallery.image равно этих данных.
И это своего рода мяса его, что на самом деле то
в состоянии изменить изменить данные из-- фотография от одного к другому.
Итак, еще раз, надеюсь, теперь много конструкций
сделает немного больше смысла.
Обратите внимание, что есть какая-то восклицательных знаков здесь.
Восклицательные знаки являются по существу связаны с дополнительными опциями.
>> То, что я в основном говорю, что даже не проверяя
чтобы увидеть, если есть данные в этот необязательный,
Я собираюсь идти вперед и предположить, что существует и развернуть его.
Помните, что мы использовали аналогию Сортировать пакета для опциями
и мы должны развернуть упаковка и вытащить данные.
Восклицательный знак силы, которые на самом деле произошло.
>> Но я знаю, что это безопасно, потому что я проверил
чтобы увидеть, если данные изображения равна к нулю, я на самом деле проверить
чтобы увидеть, если это опция был, по сути, не удалось.
Если бы это было на самом деле, не удалось уже.
И поэтому я уверен, что как только я получаю на это Тут я могу с уверенностью разворачивать эти данные.
Вы также можете увидеть его в форма вопросительного знака.
Так что, если мы прокручиваем вниз туда, где я нужно на самом деле синтаксический анализ данных.
>> Так что не пугайтесь это своего рода длительных имен.
Вы можете найти в Apple, Разработчик сайта много
ссылок на все объекты и все процессы
что на самом деле сделать это возможным.
Но обратите внимание, что это по существу Функция, где я передать ему некоторые данные.
И я вернусь какой-то данных.
И мне нужно использовать это в качестве ключевого слова преобразовать его в этом NSDictionary?
Что опять-таки, по желанию NSDictionary.
Какой я тогда нужно проверить, если он существует.
>> Так что я могу использовать, что если позволить успешные равно разбирается,
то я знаю, что необязательно на самом деле содержит некоторые данные.
Или то, что я сделал здесь было просто предположить, что, если есть
не было никаких ошибок, которые он на самом деле безопасно.
Ладно, я хочу поблагодарить Вы все очень большое, что пришли.
Я знаю, что это было много, но это было только час
говорить о некоторых довольно продвинутый материал.
И так, мы надеемся, вы получите шанс загрузить весь код
и принять лучше, тщательно взглянуть на него.
Сортировать убедить себя все материала, который происходит.
И я хочу поблагодарить вас все, опять же, что пришли.
И удачи в финальных проектов.
Хорошего дня.