>> [Грає музика]
>> ДАН 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 рази,
і зробити те ж саме.
>> Так що це може відчувати себе трохи надуманим.
Але є важливий що тут, який
є те, що, дивлячись на них дві функції, є
тільки одна річ, яка відрізняється, який це значення в діапазоні.
Все інше про цих двох функції, сила і влада 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
у них є багато справді хороших підручники, щоб ви почали.
Але ми сподіваємося, просто цей годину говорити про синтаксис сам дав
Ви достатньо, щоб почати з цим.
>> Ми розмістимо все це джерело Код на сайт семінару
якнайскоріше, а також слайди так у вас є посилання для всіх них.
Але удача з вашими проектами.
І спасибі всім велике, що прийшли.
>> [Оплески]