[Грає музика] ДАН 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 ..