[MUSIC JOC] DAN AMRMENDARIZ: Toată lumea, bun venit la seminarul CS50, iOS App Dezvoltare cu Swift. Sunt Dan Armendariz, si eu sunt un preceptor de informatică aici la Harvard. Și următoarea oră va fi un tur vârtej de vânt de la fel de mult lucruri despre acest subiect așa cum putem potrivi. Voi posta toate codul sursă că veți vedea astăzi on-line. S-ar putea să nu fim în stare să de fapt, du-te peste tot că sunt că sunt arătându-vă în această oră. Dar cel puțin sperăm prin comentariile codul sursă, vei putea să încercați să dau seama ce exact se întâmplă pentru acele lucruri că nu destul de a ajunge la. În general, structura de Discuție de astăzi va fi după cum urmează. Vom începe în a face unele de bază sintaxă cu limba Swift, a intra în unele dintre cele mai avansate sintaxă a limbii Swift. Deoarece limba este într-adevăr modernă și are o multime de nivel înalt caracteristici, lucruri pe care nu le-am văzut în C de-a lungul CS50, sau Chiar și unele celelalte limbi pe care le-am început utilizarea în CS50 ca PHP, așa că am de gând să aibă de a încerca să introduce, de asemenea unele subiecte care sunt legate de limbaje de nivel superior ca să nu vadă în profunzime în CS50, dar veți vedea mai târziu clase de informatică. Asa ca va fi un bine ambalate oră. Și vă rugăm să nu ezitați să mă lase știu dacă aveți întrebări. Deci, dacă sunteți interesat în a face dezvoltare cu Swift, sau într-adevăr orice dezvoltare app iOS, există o serie de cerințe. Mai întâi de toate, trebuie să fie folosind un Mac, care rulează în exemplele că vom folosi astăzi, o relativ nouă versiune a sistemului de operare X. În acest caz, eu sunt difuzate X 10.5. Puteți fi difuzate 10.11, dacă doriți. Dar tot ceea ce ai de gând să vezi este de a implica Xcode 7 și mai târziu, care are cea mai recentă versiune de Swift, care este Swift 2.0. Aceasta este de fapt o destul de distincție importantă. O mulțime de sintaxa are schimbat destul de semnificativ în unele cazuri, de la Swift 1.0, care a fost lansat anul trecut, Swift 2.0, care tocmai a ieșit în această toamnă. Așa că am de gând să arate Swift 2.0. O mulțime de lucruri pe care te pentru Online atunci când sunteți încercarea de a obține suplimentare informații despre o varietate de lucruri, poate doriți în mod explicit căuta Swift 2 mai degrabă decât pur și simplu vechi Swift pentru a face sigur că veți obține sintaxa corectă. De fapt, acesta este în general adevărat. Există o cantitate rapid de dezvoltare întâmplă în limba Swift încă de la Apple a lansat, cred că ce, a fost un pic mai mult de un an acum. Și lucrurile s-au schimbat dramatic în acest timp. Și așa că nu fi frustrat dacă, atunci când sunteți în căutarea în jurul valorii de pentru subiecte pe Swift sau modul de a realiza ceva folosind un cod de exemplu sau ceva care nu face lucrează efectiv pe Swift 2.0. Asigurați-vă că sunteți în căutarea în mod special pentru această versiune pentru a încerca să reducă la minimum efectele diferite versiuni și cele felul de lucruri. Voi încerca să subliniez doar câteva lucruri care sunt diferite de versiuni mai vechi. Dar e ceva să fiți atenți pentru. Asta, probabil, va fi una dintre cele mai mari dureri de cap cele mai pe care le va avea cu Swift este găsirea exemplu cod care este mai veche, chiar și numai de câteva luni, încearcă să folosească l în proiectul dvs. mai modern. Și-l pur și simplu nu funcționează. Vei primi erori de compilare, sintaxă erori, tot felul de chestii nebun. Deci, doar să fie pacient cu că, și, sperăm, veți au o experiență destul de frumos cu ansamblu Swift. Acum puteți de fapt join-- și sper am de fapt, încă acest acest year-- CS 50 de Apple App echipa de dezvoltare, care vă va permite să instalați aplicații care vă creați pe dispozitivele iOS. Deci, să ia o privire la acest URL dacă sunteți interesat în a face asta. Deci, doar o pereche de lucruri despre Swift însuși. Este un limbaj compilat. Dar veți vedea că unele din caracteristicile pe care le folosim Permiteti-i sa fie utilizate, de asemenea, într-un pic ca un mod interpretat, de asemenea. O mulțime de sintaxa este împrumutat de la C. Se bazează și scris în C. Și așa vom vedea că există o mulțime de takeaways de la cunoștințele existente de la C care putem port pentru Swift. Dar există lucruri pe care face foarte diferit de C. Este foarte puternic tastat. Nu e de management automat al memoriei. Nu te va trebui să utilizați malloc sau oriunde liber. Este proiectat pentru generalitate. Deci, cu alte cuvinte, îl puteți folosi în tot felul de contexte, de la Apple Watch la iPhone tot drumul până la OS X, și chiar unele servere, chiar și unele scripting. Dar vom vedea că suport pentru scripting nu este destul de acolo încă ca este în alte limbi. Deci, cel mai probabil vei utilizați acest exclusiv pentru dezvoltare pe Mac-ul sau iPhone-ul. Si are o multime de caracteristici moderne. Și o mulțime de aceste lucruri sunt lucruri pe care vom încerca să abordeze astăzi, dar, de asemenea subiecte noastre, care sincer, putem dedica cursuri întregi. De fapt, CS 51, care este oferit semestrul viitor, se concentrează foarte mult pe aceste teme care sunt descrise mai jos. Astfel încât să puteți petrece un semestru întreg înțelegerea acestor lucruri. Dar vom încerca să pentru a obține prin intermediul lor cel puțin suficient ca tu poate înțelege ce este întâmplă atunci când te uiți la un program de Swift și să fie capabil de a hack-ți de drum prin ea pentru proiectul final. Acum, unul dintre cele mai bune moduri în care puteți obține informații suplimentare cu privire la acest este sincer doar prin Apple prevăzut documentație pentru Swift. Există o mulțime de API-uri care sunt disponibile. Și aceasta este o bază bună acasă pentru tine să caute, anumite lucruri pe care le vrei sa faci cu un API care implica iOS. Dacă doriți să utilizați camera pentru exemplu, puteți începe căutarea aici, și, de asemenea, folosi Google și stiva Preaplin în timp ce în mod normal. Orice întrebări cu privire la acest înainte de a ne sari chiar în? In regula. Să mergem mai departe. Deci în primul rând, am o Numărul de exemplu fișiere. Și am de gând să încerc să-și intensifice prin ele relativ repede. Acesta este fișierul Hello World pentru Swift. Este foarte simplu. Nu e cale mai multe comentarii decât există codul actual. Observați codul actual este la foarte jos pe linia 14. Se spune de imprimare. Și atunci este un apel de funcție. Suntem într-un mod string numit Hello CS50. Observați că nu există nici punct și virgulă. Observați că nu există nici principal Int. Nu e nici unul dintre cruft că am avut-o cu C. Când folosim Swift în acest fel, care este doar scris într-un fișier text și stocate pe computerul meu, apoi Pot să-l compilați și a alerga it. Observați că aici eu sunt nu folosesc IDE CS50. Acest lucru presupune că eu sunt de funcționare și că eu sunt pe OS X, și că am Xcode deja instalate pe această mașină, pentru acest a de fapt funcția. Dar aceasta este doar un fisier text normal că putem compila și edita apoi. Deci, să vedem cum funcționează de fapt. Ce se întâmplă dacă vreau să-l compilați? 1.swift swiftc. După o clipă sau două, l va vedea că acum avem alcătuit această într-un fișier numit 1. Și acum ne-am imprimat CS50 nostru, aplicatia noastra Hello World destul de. Observați un lucru ca bine este faptul că în mod implicit, nu am avut pentru a introduce o / n pentru a imprima o nouă linie. În mod implicit, funcția de imprimare în Swift va imprima o nouă linie pentru tine. Puteți trece o suplimentare opționale parametru pentru a spune nu să facă acest lucru. Dar Google pentru mai multe informații cu privire la acest lucru. În mod implicit, se va face pe linia de imprimare. Bine, așa că să trecem mai departe apoi la alte lucruri. Deci, cum putem defini de fapt variabile? Putem face asta cu ajutorul unul dintre cele două metode. Iar cel pe care vreau să-ți spun despre prima este această definiție lit.. Și acest lucru este important deoarece în mod eficient ceea ce facem este definirea unui constantă. Vom crea o variabilă pentru a, sau mai degrabă un nume numit constant, oferă să-l unele data-- în acest caz, șirul Dan. Dar, prin utilizarea acestui lit. cuvinte cheie, spunem că această variable-- sau din nou constant-- numit Numele nu va fi schimbat. O să fie de-a lungul imuabile durata acestui program sau întreaga Durata de contextul că variabila este disponibil. Acest lucru este foarte important ca atunci când aveți unele date care nu sunt va schimba în programul tău, și veți vedea o varietate de exemple când vrem să utilizați lasa față de celălalt sintaxa, este important să utilizați lasa ori de câte ori este posibil, deoarece acest sesizează limba pe care este nu va fi schimbat, și se poate efectua de fapt o mulțime de optimizări pentru a îmbunătăți viteza și siguranța programul. Și de siguranță, nu înseamnă să accident cu erori nebun că am putea fi obișnuiți să vadă în C. Atunci putem folosi șir interpolare a încapsula acest într-un șir. Astfel încât să putem vedea în acest linie de imprimare, imprimați Salut, și apoi folosind backslash parens deschise, și apoi numele variabilei mea, în acest caz continuă, închide paranteze. Sunt, în esență, atunci punerea conținutul acestei variabile numite nume în interiorul șirului și apoi imprimarea rezultatul acolo. Există o altă modificare a acestui fișier care este faptul că am, la foarte de sus, pus într-o linie shebang, care practic doar specifică că doriți să utilizați Interpret Swift, care înseamnă că nu mai trebuie să compila acest program special. Pot rula la fel ca și propria script. Dar acest lucru este, în acest caz, în spatele scenele fiind compilate și apoi fiind a alerga. E doar invizibil pentru noi. Bine, așa că să trecem mai departe. Deci, există un pic de șmecherie că sa întâmplat înainte. Ți-am arătat că ar putea defini o constantă. Și am putea oferi unele date pentru a face acest lucru. Dar în acest caz, observați că nu am făcut specificați fapt tipul de date asta e. Și asta pentru că compilator, Swift poate deduce tipul de date pe bază de doar pe datele pe care am pus în ea. Pentru că știe că prin evaluarea această variabilă chiar aici, acest drept date aici, se știe că este un șir. Și așa mai departe acest nume este, prin urmare constantă O să fie un șir, de asemenea. Dar putem fi, de asemenea, în mod explicit despre tipul asta e vom folosi pentru a constante sau variabile prin utilizarea acestui sintaxa instead-- să String nume de colon este egal Dan, care în acest caz înseamnă că suntem merge pentru a defini un nume numit constant. O să fie de tip String. Iar valoarea va fi Dan. Acum, un alt mod care putem crea variables-- și acestea sunt variabile mutabile, care înseamnă că suntem, de fapt, merge pentru a schimba conținutul lor candva în durata contextului că variabilă este defined-- noi utilizați cuvântul cheie var în loc de să. Dar, din nou, în mod implicit, dacă nu știi care aveți nevoie pentru a manipula aceste date, încercați să utilizați lasa pentru îmbunătățiri de performanță. În acest caz, pot apoi specifica tipul de date care ne așteptăm să fie în interiorul acest nou variabilă numită etichetă. O să fie un șir. Și vom apoi la înlănțui două șiruri împreună, șirul salut, și șirul reprezentat de variabilă, sau mai degrabă numele constantă. Deci acest lucru este frumos, pentru că acest lucru este oarecum ca în PHP pe care le au foarte usor șir concatenare. Noi nu trebuie să în mod automat folosi orice fel de management al memoriei pentru a crește mărimea și de a face orice fel de lucruri amuzante acolo. Aceasta funcționează ca ne-am astepta, de fapt. Bine, orice întrebări cu privire la acest lucru? Acum, motivul pentru care alte avem nevoie de tine au capacitatea de pentru a putea defini ceea ce tip de variabile de date sunt este pentru că, uneori, noi nu doresc să inițializa variabilele cu unele date de la punct de definiție. Deci, în acest caz, să zicem pe care vreau să încep introducerea unele clase într-o carte grad. Ei bine, știu că una dintre variabile pe care vreau să fie va fi un grad mutabil. Și noi, de asemenea, știu că am vrei sa fie un întreg. Dar poate că nu încă au acest grad disponibil. În Swift, trebuie să defini tipul de date care este asociat cu un variabilă sau o lasa constant înainte de a putea de fapt utiliza variabila. Pentru ca este puternic tastat, trebuie să asocieze un tip cu aceste variabile. Deci, în acest caz, dacă nu Am în mod corespunzător inițializat primul cu o valoare, apoi m-am nevoie să-i spun ce Swift Mă aștept ca tipul de date sa fie. Și o să rămână același tip de date de-a lungul istoriei acest program. Acum s-ar putea fi tentat de îndată ce Am creat această variabilă grad și o furnizat număr întreg de 100, acum dacă am doriți să încercați să înlănțui un șir cu care întreg, ar putea fi tentat să folosească în continuare care operatorul de concatenare string cum am făcut doar câteva linii înainte. Dar din păcate, de fapt, acest lucru nu se va locul de muncă, pentru că sunteți efectuarea, în esență, o operație pe două tipuri diferite. Acum, acest lucru este foarte diferit de alte limbi, cum ar fi PHP, care sunt într-adevăr goosey Loosey cu fel de tipuri lor. Sunt la fel ca, da, orice, nu-mi pasă. Dă-mi un singur tip, și poate voi face ceea ce trebuie. În acest caz, este Swift extrem de stricte cu privire la tipurile pe care le-a face cu. Acest operator de însumare sau operatorul de concatenare are în esență o pereche de diferite opțiuni posibile. Puteți face însumării cu numere întregi, sau poate face șir concatenare, și probabil alte lucruri la fel de bine. Dar dacă operatorul nu recunoaște ceea ce este pe fiecare parte a acestuia, sau mai degrabă o combinație a celor două tipuri, nu este ceea ce se așteaptă, atunci va provoca o defecțiune. Deci, în acest caz, ceea ce înseamnă pentru a avea un șir plus un număr întreg? Ei bine, în contextul acest lucru, probabil că ne-o dorim pentru a face o operație șir concatenare. Dar, desigur calculatorului nu are acest tip de context. Și așa trebuie să oferim că informații suplimentare pentru a lasa sa stiu ce este că vrem să facem. Deci, cu alte cuvinte, faptul care este puternic tastat Swift înseamnă că trebuie să faci o pic de lucru suplimentare să-l pentru a opera mod care le-ar dori. Dar, ca rezultat, este mai sigur. Și odată ce ai lua seama de aceste tipuri, lucrurile începe sincer la locul de muncă destul de bine. Deci, în acest caz, ne-am apoi ar efectua string concatenare prin turnare în mod explicit întreg la un șir de ambalaj-l în acest capitalul funcția S String, și apoi folosind concatenarea string Operatorul de a modifica variabila noastră etichetă, și apoi imprimați-l. Până acum, bine? Bine, să trecem mai departe. Acum există o varietate de date tipuri care le putem folosi în Swift. După cum v-ați obișnuit să, putem crea o gamă mutabil. Și că matrice poate doar conțin un singur tip. Deci, în acest caz, vom crea o matrice de numere întregi, mutabil care vom numi note, și vom putea pentru a stoca că în această categorie de piață format ca ai crescut obișnuit la o varietate de alte limbi. Dar observați că aici suntem definirea câteva lucruri. clasele este o variable-- mutabil Nu vom folosi cuvântul cheie lit.. Asta înseamnă că putem modifica apoi conținutul acestei matrice. Este de tip Array Int, și putem spune că pe baza acestor paranteze pătrate aici. Acum, unul dintre lucrurile frumoase despre acest lucru este că noi au acces la o mulțime de Informatii aditionale despre matrice folosind doar unele simplu notație punct. Deci, de exemplu, grades.count oferă pentru a ne numărul de elemente care exista in acea matrice, care apoi putem accesa destul de ușor, pur și simplu, folosind ca punct notație. Dacă doriți să adăugați suplimentare articole la această matrice, nu se poate face stilul PHP în cazul în care tocmai ați defini explicit, la un anumit index, o anumită valoare pe care doriți să introduceți. În schimb, utilizați append metodă în tipul matrice pentru a adăuga acel element, 95, la această listă. Deci, acum această matrice are urmatoarele contents-- 100, 0, 90, 85. Și acum am anexat 95 și la aceasta. Există și alte modalități putem adăuga lucruri. Puteți folosi de fapt, un operator de însumare, care va fi interpretat ca o operație matrice adăugare. Și puteți adăuga apoi un alt matrice, al căror conținut sunt 70 și 80, pentru că matrice. Deci, acum avem Cuprins în această variabilă grades-- 100, 0, 90, 85, 95, 70, și 80. Acesta este doar un mic sintactică zahar, care Swift ofera noi. Deci, dacă vrem să socotească clasele, suntem probabil O să vrea să repeta peste fiecare element în această buclă. Și noi avem, în Swift, noțiunea de o buclă pentru ca v-ați aștepta. Dar modul în care ne indica o gamă este ușor diferit. Deci, în acest caz, pentru a concluzie totul, vom de gând să creeze un temporar variabilă numită sumă pentru a ne pentru a menține acest număr. Și observați pentru nostru construcție buclă aici. Pentru index în 0 ..