DANIEL Armendariz: Buna ziua, toată lumea, Bine ati venit la dezvoltarea app iOS cu rapidă. Sunt Dan Armendariz. Sunt precepter de calculator știință aici la Școala de Inginerie si Stiinte Aplicate. Și rapid este, de fapt un fel o limbă foarte elegant. Și am niște planuri pentru ziua de azi. Deci, pe următoarea oră sau așa vom să se uite la el însuși dezvoltare app iOS folosind Xcode și crearea de fapt, unele foarte de bază, aplicatii foarte simple. Și se uită la modul în care ați ia de fapt aceste cereri, și să construiască, și de fapt le-a pus pe un dispozitiv iOS. Unele din lucrurile pe care noi nu vom uita la va include lucruri cum ar fi luând de fapt o cerere și-l pune pe App Store. Există o mulțime de tutoriale online, care te va ajuta cu acest aspect de ea. Dar și pentru că în calitate de parte din CS50, veți obține să se alăture dezvoltării Apple a echipă, echipa de dezvoltare app CS50 lui. Dacă nu ați făcut asta încă și vă sunt afiliate cu CS50, Eu nu recomandăm să face acest lucru pentru că este modul în care ești capabil de a crea unele programe în Xcode, construi ei, și de fapt a pus le pe unele dintre dispozitivele dvs. iOS dacă aveți de fapt un dispozitiv iOS fizic. Dacă nu aveți un iOS fizic dispozitiv care este mai mult decât bine. Puteți dezvolta efectiv pentru iOS. Și Xcode are o simulator care vă permite pentru a vedea cererea dumneavoastră în acțiune pe computer. Dar un fel de este un lucru curat pentru a juca de fapt și de a interacționa cu cererea dumneavoastră pe un dispozitiv actuale. Deci, există o serie de cerințe pentru de fapt, nu toate de această evoluție. Una dintre ele este că trebuie să aveți un Mac. Trebuie să fie difuzate 10.9.4 sau mai târziu în scopul de a face dezvoltare rapidă cu. Puteți folosi un anterioară Versiunea de a dezvolta cu Objective C pentru iOS și Mac. Dar eu recomand, și o mulțime de exemple pe care le vom vedea astăzi, utilizați 10,10 Yosemite. Deci, dacă nu ai încă modernizate, este o scuză bună pentru a face acest lucru. Acum, Xcode 6.1 este cea mai recentă versiune a mediul de dezvoltare integrat care Apple a prevede gratuit care puteți descărca de pe App Store. Și eu recomandăm să rula, de asemenea cea mai recentă versiune. Dacă se întâmplă să fie difuzate o mai devreme versiune, Xcode 5 și de mai jos doar pur și simplu nu acceptă nici un fel rapid. Și versiunile beta ale șase, care au fost eliberate peste vara, do sprijini rapid, dar nu e a fost un număr enorm modificărilor în limba, destul de astfel încât codul pe care ești O să se uite la și pe care le s-ar putea găsi pe internet nu va compila de fapt în mod corespunzător în aceste versiuni anterioare ale Xcode. Deci, din nou, dacă nu faci încă au un cont de dezvoltator, Vă recomandăm să mergi la developer.apple.com. Înregistrează-te, creați un cont de dezvoltator, și să se alăture echipei de dezvoltare app CS50. Acest lucru va oferi la tine o oportunitate pentru a compila aplicații și le-a pus pe dispozitiv. OK, deci să începem. Primul lucru vom face este pentru a crea de fapt o foarte proiect simplu în Xcode care vă va permite să face o cerere. Deci, dacă nu aveți încă Xcode deschis, mergeți mai departe și deschideți-l și de a crea un nou proiect. Un ecran special splash se va deschide și vă va oferi unele opțiuni cu privire la ceea ce este că vrei să faci. Doar spun că doriți să creați un nou proiect, o nouă cerere. Această fereastră se va deschide, tu presupunând utilizați Xcode 6.1. Chiar acum, și pentru Durata acestui seminar, vom folosi vezi aplicații unice, doar un fel de cerere de bază pentru a obține picioarele ude. Și puteți ramifica pe cont propriu de acolo. Faceți clic pe Următorul în acest moment. Acum, aici există o serie de lucruri care v-ar dori să intre. Denumirea produsului este Numele proiectului dumneavoastra. În acest caz, eu sunt doar O să-l sun Seminar1 pentru că este primul nostru exemplu. Numele Organizarea, în acest caz este doar numele meu. Puteți schimba desigur pentru propriul nume, sau a CS50. Identificator Organizare, dacă se întâmplă să aibă un site web doar să ia numele de domeniu în inversa, com.yourname. și apoi numele produsului ar trebui să apară în mod automat apoi ca identificatorul pachet. Evident, limba pe care suntem gând să fie utilizând pentru ziua de azi este rapidă. Puteți, desigur, utilizați Objective C pentru asta, dar azi va fi rapid. Și vom spune acum Dispozitive universal, așa că funcționează pe ambele iPad și iPhone. Și vom pleca de bază date neverificate pentru a păstra proiectul relativ simplu pentru moment. Deci, haideți să mergem mai departe și faceți clic pe Următorul. Și o să mă întrebi în cazul în care vreau să-l salveze. Voi salva doar pentru desktop-ul meu de acum. Bine, asa ca acum aceasta este ceea ce se va se întâmplă atunci când Xcode de fapt deschis. Și observați că foarte primul lucru ce vezi este acest semn de exclamare că spune ca nu identitate semnare găsit. Am făcut intenționat acest pe calculatorul meu si eu sunt în speranța că am de gând să putea să-l repara de fapt, pentru că vreau să văd cum acest va lucra de fapt, pe cont propriu mașină. Du-te și faceți clic pe problema fix. Acesta vă va întreba dacă aveți o Contul de mere dezvoltator existent. Aceasta este în cazul în care îmbinarea CS50 echipa de dezvoltare app este important, astfel încât să nu au un cont aplicație numai, dar aveți, de asemenea capacitatea de a semna aplicații și le-a pus pe dispozitiv iOS. Acest lucru este click not-- problema fix nu este necesară dacă sunteți doar de gând să construi și de a dezvolta la nivel local, în întregime în simulator iOS. Dar pentru acum am de gând să dezvolte și să le pună pe iPad meu, care va fi capabil de a difuza, de asemenea. Așa că vreau să adăugați efectiv acest lucru. Și o să întreb mă pentru ID-ul meu de mere. Deci va fi aceasta. Și am să-i aducă meu parolă, care este de peste aici. Deci, da-mi doar o secundă pentru a găsi că, și copie că, și lipiți-l aici. Faceți clic pe Adăugați. O să-mi care echipa Vreau să se alăture. Am de gând să fac școală de inginerie. Faceți clic pe Alăturați-vă. Ne pare rău, asta e cea greșită. Hai să facem asta. Sperăm că se va lucra. Asta încă nu funcționează. Suntem pe punctul de a cele bune aici. OK, aceasta ar trebui să funcționeze. Acum, închide. Acum, hai să facem școală de inginerie, faceți clic pe alegeți. Și acum sperăm după o câteva secunde can-- OK, Voi revoca și cerere. Oh, omule, asta va să nu funcționeze. OK, voi încerca un altul. Hai să facem asta aici. Demo-uri live mă lipsa. S-ar putea să revină la doar construirea în întregime la nivel local, dar care ar fi în regulă în acest caz. Deci, aici, în timp ce aceasta este de fapt de lucru, ceea ce vom face este doar a crea un foarte simplu Suntem pe punctul de aplicare Lume. Deci, aceasta este Xcode. Și dacă nu l-au văzut încă, ea poate fi un pic intimidant la început. Există o mulțime de geamuri, există o mulțime de doodads în diverse domenii. Dar dau seama că nu există într-adevăr mai multe componente principale la acest mediu de dezvoltare. În partea stângă departe sunt toate fișierele care sunt aplicabile Program sau pentru proiectul dumneavoastra. Vom clic în jurul pe unele dintre ele și vom subliniază cel mai mult cele importante în timp. La extrema dreaptă, am au un set de atribute. Și toate aceste atribute, acolo sunt diferite foi de geam pentru atributele. Panourile se va schimba in functie de contextul conținutul principal, care se întâmplă să fie în centru. Acum mijloc poate arăta de fapt ai o varietate de lucruri, de exemplu codul în sine. Sau s-ar putea have-- de fapt, atunci când faceți clic pe rezumat care este, de altfel, doar o grafică Reprezentarea de utilizator ta interfață pentru application-- ta apoi atributele panoul pe foarte departe dreaptă se va schimba de fapt. Acum există o pereche de altă lucruri pe care vreau să subliniez. Puteți explora un fel de în jurul valorii de în mediul pe cont propriu. Dar unul dintre lucrurile care a fost foarte util este acest buton aici, dreapta sus al ferestrei. E un buton care Se pare ca pe FAR a lăsat are un paragraf urmată de două cercuri și sortare de două săgeți îndreptat departe unul de altul. Dacă schimbați între editor standard de, care este cea stângă, cea care este selectată în mod implicit, și cele două cercuri suprapuse fiecare parte, ceea ce veți obține de fapt sunt o vedere dublă panou. Și acest lucru este de fapt Va fi util pentru noi atunci când avem nevoie pentru a lega articole în UI la codul. Și vom vorbi mai multe despre că într-o clipă. Dar dau seama că dacă te mai multe geamuri de acest gen, vă puteți simplifica vizualizarea doar un pic făcând clic pe spate pe un singur editorul. Până acum, bine. Deci, practic avem codul de pe stânga, atributele pe dreapta, și orice este lucrăm aici chiar în centrul orașului. Deci, aici am dat click pe rezumat principal. Și rezumat, din nou, este un mod în Xcode pe care le puteți crea de fapt utilizator ta interfață folosind doar drag and drop Tehnici. Și astfel pentru foarte noastră prima aplicare acest este exact ceea ce vom face. Vom merge în jos la porțiune dreapta foarte mult mai mici a ecranului, care conține o varietate de elemente de utilizator pe care le puteți apoi faceți clic și glisați pentru a crea interfața de utilizator. Acum, toate acestea elemente sunt numite vizualizări pentru că acestea furnizează un fel de vedere. Există o vizualizare imagine, pentru exemplu, pentru a arăta de fapt o imagine pe interfața cu utilizatorul. Există o vedere tabel pentru de fapt arată un tabel. Deci, pe și așa mai departe. Exista o mare varietate de opinii care le puteți selecta aici. Deci, doar pentru acum mergem pentru a căuta o etichetă. Puteți derula doar prin toate listele care e acolo. Dar nu e de căutare bar în partea de jos care face mai ușor de identificat vizualizari specifice pe care le de fapt vrea să trageți în interfața de utilizator. S-au găsit eticheta mea. Am de gând să-l trage aici, direct pe cererea mea de probă. Chiar acolo, în mijlocul arată bine. Și am de gând să tastați "Hello World!" Hit Enter. Acum am o etichetă. Ea nu arata ca e centrat destul de corect. Deci, eu pot încerca să re-centru-l. Din fericire oferă acestea ghiduri pentru a face lucrurile mult mai ușor. Am de gând să încerc să-l compilați. Sperăm că aceasta va funcționa de fapt aici. Și dacă nu, într-o clipă acesta va apărea, de fapt, pe iPad mea. E chiar aici. Nu este. OK, deci asta este. Am terminat. Ne-am creat foarte noastră primul aplicare. Acum, evident, acest lucru nu face nimic. E doar o etichetă. Nu e nici o legătură între interfața utilizator și codul. Deci, dacă am vrut de fapt pentru a crea această conexiune, dacă de fapt am vrut sa avem un fel comunicării între elementele că există, pe de Cinema și codul care ne permite să controleze aceste elemente, atunci avem nevoie de fapt de uita-te la codul în sine. Deci, asta este ceea ce se numește ViewController.swift. Și pentru, în special pentru dvs. primele câteva programe, acest lucru va fi un fel de cea mai mare parte a codului pe care le enter-- va fi în acest document aici. Există o mulțime de lucruri care este aici pana acum, nu? E UI import clasă kit, trece peste, [? funk,?] toate aceste diferite lucruri. Și nu e destul de clar ce este că toate acestea înseamnă. Așa că haideți să facem un pas înapoi departe de Xcode pentru un pic si uita-te la limba în sine, rapid. Deci, cu rapid, a fost în proiectare și dezvoltare de la Apple pentru aproximativ patru ani la înțelegerea mea. Și există o serie de caracteristici cu privire la aceasta, care sunt foarte elegant. În primul rând, este compilat limbă, la fel ca C. Deci, va trebui mai întâi să compila o și apoi rulați-l înainte de a putea efectiv executa codul care rezultă. Dar există, spre deosebire de C, un interactiv solicita pe care le puteți rula de fapt și tastați comenzi arbitrare în. Și foarte mult ca o consolă JavaScript, care s-ar putea să fie familiarizat cu acum, de fapt va evalua cele comenzi și să ofere pentru a vă ieșire. Și le-am luat chiar că la nivelul următor și le-am creat ceva numitele locuri de joacă în Xcode care vă permit să de lucru vizual cu cod. Și vom vedea de fapt câteva exemple de faptul că, în doar un pic. Este bazat pe C. C sta la baza aceasta, deoarece toate compilatoare a crea cod din C și a crea codul obiect din ea. Dar chiar acțiuni relativ mic sintaxă. Se va arăta destul de diferit. Vor fi unele asemănări. Dar nu vor fi destul de câteva diferențe în comparație cu, să zicem, JavaScript sau PHP. Și vom litera acestea într-o clipă. Acum, unul dintre cele mai mari lucruri despre rapid asta e frumos este că, mai ales în comparație la C, este menit să fie în siguranță. Totul în el este menit să fi foarte puternic tastat. De fapt, e aproape enervant la început, atunci când primul începe să lucreze cu rapid, doar cât de mult impune tipuri de pretutindeni. Orice lucru care este un șir trebuie să rămână un șir. Este foarte dificil pentru a sorta de convertit ea sau constrânge în altă formă. Și din nou, vom afișa exemple în acest sens. Dar în cele din urmă seama că acest lucru este menit pentru a vă proteja, și de tine vreau să spun codul, de la crashing într-un fel oribil când Ai un fel de tip nepotrivite. Și din nou, lucra cu el. Pentru că va fi frustrant la început în timp ce încerca să dau seama de ce anume vei primi acest neobișnuit error ocupă cu tipuri. Dar va fi în valoare de ea în cele din urmă. Ea se referă la automat de management al memoriei, deci nu mai face tu trebuie să se ocupe cu lucruri ca malloc și gratuit și toate aceste felul de lucruri. Și este, de asemenea, proiectat pentru generalități. Astfel, în timp ce putem folosi un Xcode la crea iOS aplicații și aplicații Mac, putem, de asemenea, pur și simplu utiliza ca un limbaj de scripting. Și astfel încât să putem folosi un fel de loc de PHP sau în locul de Python de efectiv analiza și proces rapid unele date pe care le avem pe calculatorul nostru. Ea are o mare varietate de moderne caracteristici, optionalele, mutabilitate, generice, de închidere, și o mulțime de acest lucruri pe care poate sau nu poate recunoaște. Și e doar un fel de nefericit parte din limbajul pe care unele dintre acestea un fel de elemente futuriste, moderne, care sunt conținute în elementele sunt astfel adânc înrădăcinată că, de fapt voi Trebuie să te învețe CS50.5 un pic. Trebuie să învățăm un pic mai mult despre unele dintre caracteristicile în ordine pentru a înțelege cu adevărat ce se întâmplă pe și pentru ca poti sa te uiti la cod și nu se simt total pierdut. Și veți vedea ce vreau sa spun prin faptul că, în doar un minut. OK, deci let's-- destul de aceasta fel de chestii teoretice. Să ne uităm la noastre de fapt, Primul program de rapid. Este o linie de cod. Linia 14 chiar aici, ea spune imprimare l n salut CS50. Deci, există o serie de lucruri pe care e foarte diferit despre acest raport la lucruri care v-ar putea obișnuit de la C, de exemplu. Una dintre ele este că nu există nici o intmain, nu e nici o includ secțiune, există nimic de chestiile astea suplimentar. Include, ca etalon I / O, cum ar fi bibliotecile care oferă de fapt caracteristici standard ale limbajului, sunt incluse în mod automat ca parte din biblioteca standard SWIFT și care sunt importate automat. Nu trebuie să faci care import manual. Intmain nu există pentru că principalul punct de intrare pentru codul de este, de fapt la început a codului. Deci, orice cod care aveți pornind de la început vor fi de fapt executate la început. Deci, acest simplifică într-adevăr foarte mult. Observați de asemenea, că nu există nici o virgulă. Nu sunt semne punct și virgulă în această limbă. Ai pus o declarație pe o linie individuală și apoi următoarea linie reprezintă altă declarație. Dacă doriți să puneți Declarații mulitiple on-line, atunci va trebui separați prin punct și virgulă. Dar pentru cea mai mare parte, pentru stil bun, suntem nu vom vedea semne punct și virgulă pentru În sensul declarațiilor de separare în rapidă. Deci, cum face acest lucru de fapt? Ei bine, foarte mult ca C noi de fapt, trebuie să compilați asta. Și astfel încât să putem face asta prin utilizarea c rapidă și apoi 1.swift. Și apoi, după un cuplu minute aceasta va compila și apoi pot rula element una. Și mai mult decât va spune doar "Bună ziua CS50." Awesome, deci nu vom merge. E primul nostru program de lume salut. Să trecem la numărul doi. Acum, în astea-- acest lucru sa schimbat ușor, pentru că în timp ce în mod normal do-- în fapt mereu ai de compila o aplicație rapidă înainte executați de fapt o it-- de caracteristicile mare pe care am făcut aluzie la mai înainte a fost că rapidă poate fi utilizat efectiv în fel unui mod pseudo-interpretativă, acolo este de fapt ca un interpret. Dar ce va face este acolo este, de fapt, o aplicație rapidă pe care le poate rula. Deci, de exemplu, dacă tastați doar rapid aici, ce se va întâmpla este că veți primi un prompt. Și aveți posibilitatea să tastați rapid ta cod, imprimați salut, și rulați-l. Și va print-- de fapt bine, aceasta nu sa imprimat în acest caz pentru că imprimat centrat afară, care nu este vizibil aici. Dar este, de fapt capabil să funcționeze. Și astfel, în acest caz, eu sunt doar va folosi acest lucru ca un script. Și eu pot rula de fapt, acest cod acolo. Deci, modul în care am rulat de fapt aceasta va fi puțin diferit, dar veți vedea că, în doar o clipă. Acum, în acest caz, ceea ce vom să faci este să definească mai întâi o variabilă. Deci, acesta este modul în care definim o variabilă în rapid, este vom folosi cuvântul cheie sa, a urmat prin numele variabilei, iar apoi oferim ceva inițializare de date opțional. Deci, acest caz vom definirea o constantă numită nume, și vom folosi faptul că, în producția de linia noastra de imprimare la foarte de jos, salut numele. Acum, observați că mai degrabă decât folosind% s, putem îngloba numele acestei variabil în / () și să poată înlănțui în conținutul acestui șir în acest șir. Acum, spre deosebire de C, string este o Real real în rapid. Și așa stă alături int și alături de dublu foarte ușor și, bineînțeles, comparat la unele dintre celelalte limbi care le-am văzut. Deci, acest lucru ar funcționa efectiv la fel ca și v-ați aștepta. Eu pot rula 2.swift. Și vedem că numele meu este de fapt îmbinate în "Hello Dan." OK, minunat. Mutarea la numărul trei. Acum că a fost un pic de o minciună albă pe care am a spus că modul în care ne declarăm variabile a fost să utilizeze cuvântul cheie lit.. În multe ori ca tine, eventual se poate face doriți să utilizați lase, pentru că ceea ce face ca este definește o constantă. Și asta spune rapid că se poate optimiza viteza de aplicare dumneavoastră pentru că știe că variabilă nu se va schimba. Deci, să evalueze cu atenție când ai de gând să utilizeze o variabilă pentru scopul modificarea acesteia. Și când ai de gând să a crea o variabila doar să dețină unele date și care este nu de fapt de gând să se schimbe. Deci, acest concept de imutabilitatea, nu este de fapt de gând să se schimbe, este unul important, chiar ca de jos ca definirea variabilelor. Deci, aici ne-am definit un nume, lasa numele, iar în acest caz este o constantă, care este de tip șir, și este egală cu Dan. Astfel, în timp ce în starețului versiune, ea infers-- și cu "o" Adică rapid swift-- deduce tipul de date că am intrat în variabila. În acest caz, putem fi explicit. Așa că haideți să atunci numele acestei variabilă este numele, apoi un colon. Și după colon face noi specifica tipul de date. Deci, nu mai este numele int sau Numele șir sau ceva de genul asta. Dar, în loc lăsa etichetă, suntem definirea sau nu e constant sau variabil, urmat de numele, urmată de tipul de opțional. Deci, în acest caz, suntem definirea acest nume este un șir. Ne spun este Dan. Și acum am o altă variabilă, în acest caz se numește etichetă. Dar observați că este prefix cu cuvântul cheie var. Mijloacele var cuvinte cheie că această variabilă poate fi schimbat la un moment ulterior în timp, undeva în codul putem de fapt și schimba nu ne va da orice eroare special. Putem face concatenarea standard de Operatorul aici folosind simbolul plus pentru a adăuga de fapt nostru nume în acest șir. Și atunci putem imprima așa cum am văzut în urmă doar o clipă. Acum, să spunem că doriți să creați o variabilă dar nu vrei să-l inițializa încă. Nu vrei încă să pune orice date în cadrul acestuia. Ei bine, trebuie să-i spuneți rapidă ce tipul de date va fi înainte de a putea de fapt definesc în mod corespunzător. Deci, în acest caz, când ne-am definit o variabilă numită grad trebuie să fie explicit despre tipul său, pentru că nu se poate deduce doar cauți la datele inițializată pe care le furnizați la acesta. Ea ne va da o eroare dacă Tip doar calitate var, de exemplu, deoarece nu are nici un tip de aceea. Deci, calitate = 100. Așa că 100 este un număr întreg, ea se potrivește foarte bine în acel. Aceasta va continua să funcționeze. Putem vedea cum atunci am poate înlănțui acest lucru în. Acum, s-ar putea fi ispitit, dacă tu de fapt a vrut să înlănțui Grad într-un alt șir de text, într-un alt șir, care v-ar tocmai folosesc același operator de concatenarea. Și care ar fi în mod normal adevărat. Dar rapidă nu vă va permite să schimba implicit tipul de date. Deci, în acest caz, aceasta linie, 25, va eșua deoarece clasa este o întreg și nu un șir. Și există o nepotrivire set de tipuri. Deci, va trebui să fie explicit, atunci când doriți să schimbați aceste date, atunci când doriți să constrânge această date într-un tip diferit și spune, OK, eu doresc să ia acest grad, care este un număr întreg, și-l transforma într-un șir. Așa că am să ia o capitală s String toate tipurile, veți observa, sunt capitalizate, Int, cu două paturi, String, așa mai departe și așa mai departe. Toate acestea sunt capitalizate doar pentru a face lucrurile mai ușoare. Și vom spune valorifica String trece în clasa a-l. Și va crea o șir din care întreg. Și atunci putem înlănțui cele două foarte frumos. Orice întrebări cu privire la aceste lucruri până acum? Bine, hai să ara prin pe locul patru. Acum, hai sa vorbim despre unele mai avansate structuri, cum ar fi tablouri si bucle. Și, spre deosebire de C, tablouri în rapidă nu sunt reprezentate de indicii. Trimiteri in rapid, deși ele există, numite cum ar fi indicii nesigure sau unele tip similar ca aceasta, ei nu sunt expuși la tine în mod normal. Deci, acesta devine foarte dificil pentru tine de a manipula memoria direct de pe computer. Deci, matrice sunt doar un tip de date. Și ei referire folosirea acestui gen notație de standard suport pătrat care le-ați văzut înainte. Dar atunci când doriți de fapt să defini un tip de o variabilă ca o matrice de unele tip special, atunci pune acest tip între paranteze drepte. Deci, ce vreau să spun aici este că Creez o variabilă numită gradele de tip int matrice. Și eu setarea care egală cu unele date inițializată, care, în acest caz este de 100, 0, 90, 85, care este doar o colecție de note arbitrare aici. Acum, în acest caz aș putea, amintiți-vă, scoateți tip, și ar putea să-l deduce pe baza datelor inițializate. Dar dacă am scos acest lucru și Am nevoie să-l setați mai târziu, atunci mi-ar fi să vă asigurați că că am tipul de acolo. Bine, să mergem de-a lungul. Așa că am can-- tablouri furnizați la noi de o gamă largă metodelor prin care notație punct la tine sunt, probabil, acum familiarizat cu. Deci grades.count, de exemplu, ne spune exact numărul de elemente care sunt conținute în această matrice. Dacă doriți să adăugați additional-- acum observa că aceasta este o var și not-- aceasta este o variabilă și nu o constantă, care înseamnă că pot schimba conținutul din această matrice, pot adăuga obiecte la acesta. Dar eu nu pot spune doar clasele și apoi în paranteze drepte patru, pentru că va fi o din eroare limitelor în acest caz. Dacă vreau să efectiv schimbare dimensiunea acestei matrice, Trebuie să folosesc metoda punct append la adăuga ceva pe la sfârșitul lui ea. Eu pot, cu toate acestea, schimbarea Indicii individuali. Așa că am putea folosi clasele și paranteze pătrate apoi la zero pentru a manipula acest prim indice și așa mai departe, ca și cum v-ați aștepta în mod normal. Și eu pot face la fel de efectiv primi datele de la care, de asemenea. Acum există, de asemenea un fel de metodă fantezie de a face acest lucru, clasele plus egali și apoi un alt indice, care va append-- sau nu un alt index-- dar o altă listă care va adăuga această listă la partea din spate a note. Și notele vor apoi conține toate astea. Dar asta e un fel de lucru suplimentar că Eu doar vă arată pentru distracție. Acum există o buclă pentru. Și aceasta este începutul de unde lucrurile încep să se schimbe un pic. Observați cum acest lucru pentru bucla este diferit de la bucle în C. Acum, voi nota că pentru bucle în Swift poate face să arate ca pentru bucle în C, dar există o mulțime de construcții mai utile că elimine în mod esențial necesitatea să aibă, pentru var i este egal cu 0 și virgulă i este mai mic de o anumită lungime, așa mai departe și așa mai departe, nu? Și acest construct este doar una dintre ele. Pentru index, indice este nou variabilă, în acest caz, în interval. Și ce vreau să spun este că există o gamă de la 0 tot drumul până la dar nu include grades.count. Deci, acest punct dot mai puțin decât semn reprezintă o serie de valori de la zero tot drumul până la grades.count minus 1. Există o separat Operatorul care există, care este punct punct punct, care ar înseamnă că vreau gama de la zero pentru clasele conta inclusiv. Dar, în acest caz, deoarece acestea matrice sunt indicele de la zero, am desigur Nu vreau să merg la Numărul maxim de grade. Pot rezuma notele, așa cum s-ar putea se așteaptă, și ieșire toate chestiile astea. OK, se deplasează pe. Acum, hai sa vorbim despre funcții. În scopul de a defini o funcție utilizați cuvântul cheie funk. Și, din nou, în Swift trebuie să fi foarte atent cu tipurile. Ai oferi să-l parametrii prin definirea, de exemplu, numele parametrului și apoi în colin, tipul de date care vă așteptați ca parametru pentru a accepta. Deci, în acest caz, avem o funcție numită numărului de calitate a imprimării. Acesta acceptă o variabilă numită cartea de note, sau mai degrabă un parametru numit cartea de note. Și noi așteptăm că cartea de note a fi o serie de numere întregi. În cazul în care cartea de note este gol, vom imprima un singur lucru. În caz contrar, vom imprima numărul din clasele că acest fapt are. Acum, dacă vrem să se întoarcă anumită valoare, atunci calea că vom modifica această definiție este pentru a folosi de fapt, acest sageata cuvânt cheie, sau de a folosi acest sageata semnificant. Deci, aici vom defini o funcție numită medie. Vom accepta o listă de numere. Și vom returna un dublu, care va sperăm fie media a acestui tablou. Și pentru a face acest lucru, în ordine pentru a calcula de fapt această medie, vom lua o sumă și vom de rezuma curs la toate obiectele în această matrice. Observați că există un nou Stilul de buclă de aici. Nu trebuie să fie explicit despre iterarea peste fiecare element dar putem spune în schimb pentru grad și Gradebook, Semnificatie că pentru fiecare element pe care o avem în acest sens, prevăd că în această element variabilă numită grad. Și vreau să fac ceva cu ea. Așa că am de gând să rezuma toate aceste date și de fapt a reveni dublu divizia. Acum, observați din nou aici se găsește Conceptul de diviziune întreg în Swift. Dacă doriți să dubleze diviziune pentru că vrei zecimale, atunci trebuie să fie explicite, nu doar despre o parte, deoarece nu te va permite pentru a constrânge date pe fiecare parte a acestei, trebuie să de fapt curs ambele părți în dublu astfel că ești foarte explicit despre a face sigur că faci diviziune dublu. Să mergem mai departe. Deci, dacă am de fapt vreau să accept-- astfel încât în ​​acest exemplu particular, acest lucru este încă o comandă aplicație bazată pe linie. Și suntem incepand de a vedea unele din limitările limbajului tineri în faptul că, deși putem acces la argumentele prin utilizarea acest process.arguments, e curată încă nu neapărat lucru pe care l-am văzut vreodată. Dar, practic eu vă încurajez la fel de uite la acest cod și să încerce să dau seama exact ceea ce se întâmplă. În esență, ceea ce se întâmplă este că luăm o listă de argumente și au fost constrângere-le în întregi, iar apoi suntem va folosi ca pe un mod de a imprima din media tuturor notelor noastre. Mutarea pe. Acum există un alt tip de data-- un alt tip de date, mai degrabă decât tablouri numite dicționare, care sunt foarte similar cu hash tabele sau hărți de dispersie și sunt similare, de asemenea, să Matrice asociative PHP. Deci, ei au noțiunea de chei și valori. Și acestea sunt definite, de asemenea, cu această notație suport pătrat, dar diferența este că dicționare au interiorul suportul pătrat, un colon. Și colon separă datele tip care este cheia și valoarea. Deci, în acest caz, am de gând să creeze un dicționar de a accepta anumite clase. Și va fi de tip string: int, ceea ce înseamnă că toate chei vor fi siruri de caractere, și toate valorile celor chei vor fi numere întregi. Ce înseamnă acest lucru este că eu pot apoi referire la datele specifice că vreau folosind aceste chei, mai degrabă decât cu ajutorul indicilor numerice cum am ar avea pentru o gama standard. Acum, să vedem, nu e un lucru important că eu, de asemenea, doresc să menționez despre această secvență special de cod. Și asta este că nu există un alt tip de date, sau mai degrabă există această Ideea de date, care este conținute în Swift numit optionale. Și ce înseamnă opționalelor este că recunoaște faptul care uneori nu o să obține datele pe care le aștepta de fapt. Și ce vreau să spun prin asta este-- hai aruncăm o privire la această secvență de cod care reiterează peste tot a argumente care au fost trecute la acest cod și încearcă să le converti, încearcă să împartă într-o varietate de siruri de caractere, pentru că acceptă o foarte anumit tip de argument. Și apoi se va încerca să constrângă siruri de caractere care reprezintă numere în numere întregi care sunt gradele, care pot apoi calcula. Deci, practic am de gând să folosi această funcție divizat că există în Biblioteca standard de Swift. Am de gând să treacă în ea șir pe care vreau să împartă. Și apoi în folosirea acestui fel de sintaxă înfricoșat, care Nu știu dacă vom ajunge la, dar poate, ne-am va specifica de fapt precis caracter care ne-o dorim să împartă la. Deci, ce are acest fapt arata ca? Să aruncăm o privire la execută de fapt acest cod. Deci, de exemplu, sa spunem am un test și am 50 de ani pe care. Și am o PSETs și Am o sută pe care. Și eu got-- există o altă test și am primit un 40 pe care. Am lovit Enter, și în cele din urmă ceea ce se va întâmpla este că ceea ce face este de a lua acești parametri, despicare siruri de caractere de la aceste două puncte, recunoscând că nu există două elemente în fiecare, și este, în esență, urmarirea fiecare. Deci, am în dicționarul mea un test, a cărui Valoarea este reprezentată de numărul 50, Am un PSET care are o valoare de 100, și un singur test care are o valoare de 40. Apoi, mai târziu în codul I de fapt medie toate aceste valori și lista toate cheile care în dicționarul special. Dar acest lucru este important astfel încât să puteți observa ceea ce se întâmplă, este că ceea ce noi vrei sa faci este de a lua acest șir și aceasta împărțit la acest personaj, pe care o putem face din nou cu acest divizat Funcția folosirea acestui tip de sintaxă interesant care există aici. Doar pentru acum presupun că e în regulă. Ne vom uita mai mult la acest în doar puțin timp. Dar acum există o interesantă aspect pe care noi de fapt doriți să încercați pentru a converti acest string într-un număr întreg. Dar în alte limbi ceea ce s-ar putea întâmpla este care ne-ar încerca, probabil, să o facă și nici primi înapoi un fel de santinelă Valoarea ca unul negativ sau poate un nul sau ceva de genul asta. Sau poate ar provocat doar o eroare. Și ne-ar trebui să apoi să prinzi această eroare și apoi încercați să faceți ceva bazat pe faptul că această conversie la un număr întreg nu a reușit. Asta în cazul în care această idee de optionale vine în. Puteți crea de fapt un tip de date care este un semn de întrebare int, de exemplu. Asta înseamnă că acest număr întreg este, de fapt, opțional. Și ce se va întâmpla este că acesta poate conține un număr întreg, sau nu pot. Se poate, de fapt, să fie acest alt idee, numit în întregime nill. În ceea ce înseamnă că nu există nici un fel de în această valoare. Nu e chiar de zero, nu e doar nici o valoare. Nu e absolut nici o valoare reprezentate. Și asta este ceea ce face această linie 71. Este că se spune că eu doriți să încercați să setați o valoare, o variabilă numită grad, egală cu conversie a acestui șir într-un int. Așa că am luat acest șir, acest primele componente, sau mai degrabă a doua componente, deoarece aceasta este zero, indexat, din acest șir care le-am împărțit. Și vreau să convertească care la un număr întreg. Dar aceasta nu poate proceda întotdeauna în mod normal, pentru că imagina ce s-ar întâmpla dacă, mai degrabă decât de tip un număr, tip I, desigur, ca asdf. O să eșueze. Nu este de fapt va fi capabil de a converti care la un număr întreg cum mi-ar aștepta. Deci, mai degrabă decât a lovi cu piciorul off un fel de eroare, avem această idee a unui opțional. Și asta înseamnă că utilizarea acest semn de întrebare pot să spun, OK, este posibil ca eu pot lua acest lucru, transformată într-un int, și a pus într-o variabilă, care va fi, de asemenea, un int. Dacă este așa, atunci înseamnă că acest lucru a fost de succes și această primă porțiune de blocul poate continua. În caz contrar, ea nu a reușit. Nu există nici o valoare în grade-- sau mai degrabă nu există nici o valoare în vigoare, și eu de fapt, să încerce să descurca stare de eroare. Veti vedea acest semn de întrebare tot timpul în Swift și în exemplul codul pentru Swift. Și, de fapt operatorul nill, acest tip de semn de întrebare, partea optionalele, va fi probabil una dintre cele mai dificile lucruri la fel de încheia cap în jurul valorii de în timp ce lucrează efectiv cu el. S-ar putea face sens acum. Și, de fapt, când am fost scrierea de cod proba pentru acest lucru, cu siguranță am înțeles ce se întâmplă, dar încă mă prins de surpriză fiecare atât de des când voi găsi că unele date a fost de fapt o versiune zero, o versiune opțională din datele pe care mă așteptam. Deci, doar dau seama că, dacă au o versiune opțional trebuie să despacheta că datele din această casetă. Deci e un fel de Eu-- imagina, dacă au o cutie și conține ceva. Și ce trebuie să faci este de a pune întrebarea, este posibil ca această casetă de fapt conține datele pe care caut? Dacă este așa, apoi trageți asta de date și pune-l în această variabilă existent. Dacă nu, atunci am doar să nu ia în considerare conținutul acestei casete totul deoarece literalmente conține nimic. Orice întrebări cu privire la acest? OK, hai să se îndepărteze de această fel de lucru linie de comandă pe baza și începe căutarea de la o parte din tehnologia care Xcode prevede la noi în formă de terenuri de joacă. Deci, există o mulțime de Capacitatea aici cu Swift. Și dacă deschide Xcode și vă întreabă ce vrei să faci, puteți deschide terenul de joacă și chiar joacă în jurul cu o mulțime de diferite structuri și aspecte ale limbajului înainte de a începe chiar atinge iOS SDK sau Mac SDK. Deci acest caz, să zicem că am have-- Am un exemplu relativ contrived aici, dar să poarte cu mine ca am un fel a lucra prin acest exemplu. Să spunem că avem de a face un lot de exponenți cu o valoare fixă, așa cum știm că vom avea nevoie de la face o mulțime de competențe patrati, de exemplu. Deci, vom lua o anumită valoare x, vom să-l pătrat, vom lua o anumită valoare y și vom să-l pătrat. Deci, pe și așa mai departe. Acum am putea de fapt crea doar o putere de 2 funcție pentru asta, nu? Deci, am crea o putere de 2 funcții. Vom accepta o dublă. Vom output-- sau vom reveni un tip dublu. Vom lua acest rezultat și apoi de două ori pentru ceea ce de fapt ia rezultatele, care a fost inițializată la valoarea de unu, și se înmulțește cu x. Deci, în esență, avem x ori x aici. Și așa, atunci eu pot, atunci, cum am putea așteaptă, să ia acest, putere alerga de 2, furnizează o serie de date, îmi place 2.0. Și vom ajunge pentru a vedea rezultatele de aici 4.0. Run putere de 2 la 3.2 și noi ajunge pentru a vedea rezultatul nostru, 10,24. Până în prezent atât de bine, nu? Acum ne gândim, ei bine, OK. Acum, de fapt am nevoie de face o mulțime de putere de 3. Așa că voi copy paste toate acestea cod, schimba numele funcției de la putere de 2 la putere din 3, și totul va fi la fel, cu excepția această valoare aici, acest interval, 1 ... 2. Deci, mai degrabă decât să repete această buclă de două ori, Vreau să repet această buclă trei ori. Așa că am schimba doar că valoarea de la 1 la 3-- sau mai degrabă la 2 la 3. Deci, din nou, același cod, asta e singura schimbare. Acum, acest asemenea, funcționează. Puterea de 3 prevăzut în unele valoare de 2. Ne 8. Deci, 2 cubed. Și 3.2 cubed este 32.768. Și până în prezent atât de bine, nu? Dar sperăm că acest este un pic bit de un steag rosu pentru tine în care avem acum unele dublarea cod cu excepția unor foarte minore schimba de la una la alta. Deci, există un fel că am putea fi în măsură să simplifice această problemă, în cazul în care putem efectiv, la momentul execuției, dau seama unii, furnizați la noi o funcție care are tocmai puterea de care ne-o dorim. Și există această idee de închidere, care este foarte, foarte important în contextul Swift, și în multe alte limbi, de asemenea. Dar, probabil, veți vedea a folosit cu atât mai mult în Swift pentru că este încorporat în limba decât va fi, în alte de asemenea, limbile moderne. Deci ideea unei închidere este aceasta, este că noi poate avea o funcție care are menirea de a fie o funcție generică, o putere generic funcției. Și această funcție este de gând să accepte acest exponent că suntem de fapt doriți să creați. Deci, de exemplu, foarte primul exemplu, ne-am dorit o putere de 2. Deci, ne-ar oferi putere de și apoi în paranteze 2. Și acum observați ce acest fapt se întoarce. Aceasta are o intrare a unui grund numita y care este un număr întreg, și returnează acest nebun cautati lucru în paranteze parentheses-- dublu și apoi săgeată dublă. Ce înseamnă acest lucru este că eu sunt O să se întoarcă o funcție. Nu mă întorc un alt tip de date, sunt de fapt, revenind o funcție care are acest parametru, care acceptă o dublă ca intrare și generează un dublu ca valoare întoarcere. Și, ca urmare, pentru că acum am sunat putere de, asociate în unele valoare pentru y, și am creat acest alt Notă function-- că nu există o altă funcție care este creat în interiorul a astea-- ceea ce fac este Pot schimba atunci această valoare, să rețină Valoarea că am schimbat 2-3, acum fac asta y. Și aceasta persistă. Deci, de fiecare dată când eu numesc putere de, în esență, ceea ce se întâmplă este că voi fi întors o funcție. Observați că aici am definit o nouă variabilă numită pătrat. Am stabilit o egal la putere de, cu condiția ca această valoare de 2 la puterea de. Și ce acesta sa întors este funcția. Deci pătrat, variabila pătrat, este acum de funcții tip care are astea-- Oops, derulați în sus un mic bit-- că are această semnătură, accepta un dublu și ieșire o dublă. Deci, acum ce am făcut este Am în esență, a creat un pătrat funcție numită că acceptă orice valoare si va pătrat. Putem vedea ce se întâmplă aici. Piața 3 de exemplu, înseamnă am de gând să ia valoarea 3 și pătrat l. Deci, cum face exact acest lucru? Când trec putere de 2-- atunci când am trece 2 în această putere de funcții, această variabilă y este populata cu acea valoare de 2. Și care este un fel de loc în memorie. Asta e ca și cum a avut loc la de stat undeva în calculator, nu ne pasă cu adevărat cât de sau în cazul în care în acest moment. Dar mă voi întoarce această funcție numit exponentiate. Și din nou, nu contează cu adevărat ceea ce această funcție este numit, putem într-adevăr numi ceva, că acceptă o dublă și returnează un dublu, dar utilizează această valoare y interiorul acestuia. Deci, chiar dacă este această funcție, această funcție exponentiater asta e a fost întors pentru a-mi variabilă care am sunat pătrat, le-a conținut în ea această noțiune a ceea ce a fost y. Și își amintește că. Deci, de fiecare dată eu numesc această funcție care este numit acum pătrat, foloseste asta. Dar aceasta înseamnă, de asemenea, că pot a crea o altă variabilă folosind o putere diferită de. Deci, eu pot crea o variabilă cub, pentru exemplu, furnizează o putere de 3. Acum, cub va avea de fapt, unele valoare și cub că și returnați-l. Deci, putem vedea că mă o valoare 8 din asta. Dar ca valoarea y nu are schimbat pentru că sunt a avut loc la fel de variabile independente. Acestea sunt un fel de loc în Spatii independenți din memorie. Deci, cub va avea mereu x la puterea a 3. Și pătrat va avea mereu x la puterea a 2, care înseamnă că pătrat va mereu Numerele pătrați, așa cum am aștepta. Și cub va tocata mereu numere, cum ma astept. Acest lucru înseamnă, de asemenea că, uneori, puteți obține un fel de sintaxă funky caută în cazul în care aveți puterea de a de la foarte partea de jos a ecranului aici, putere de 5. Și trece în rezultatul. Ai apela această funcție e a fost returnat cu numarul 4. Și ce, în esență, acest este 4 la a cincea putere, putem vedea rezultatele aici. Cu mine până acum? Deci, această idee este numit un închidere, pentru că ceea ce suntem de fapt facem este ne încapsulare unele date into-- fel a anexând acestor date într-o funcție și suntem posibilitatea de a reutiliza această funcție. Acum, această sintaxă, deși poate de fapt să fie simplificate o sumă mare. Și există o mulțime de posibilitate în Swift pentru acest simplificare. Și asta e ce fel de cele ulterioare de fapt se uite la. Deci, în 7b de exemplu, ia aceeași cod exact. Dar acum, mai degrabă decât defini de fapt o funcție în interiorul acestei competențe de funcționează și dau un nume, și apoi să se întoarcă numele de această funcție, ceea ce apoi este utilizat ca parte a acest închidere, în schimb suntem doar de gând să-l simplifica. Nu avem nevoie de această funcție să fie numit. Deci, acesta este conceptul de Funcția anonim unde putem atunci acceptă ca intrare, în paranteze aici, x variabila care este de tip dublu. Vom reveni tip dublu. Și apoi cuvântul cheie, n, este la începutul acestei funcții. Deci observa că toate acestea este în acolade și suntem definirea unui anonim funcționează aici. Doar un mod mai simplu de definirea exact același lucru. OK? Dar stai, de fapt ne permite Swift pentru a merge mai departe și de a simplifica și mai mult, pentru că într-adevăr nu avem grijă că acest parametru este numit vreun anumit lucru. Acesta poate fi într-adevăr numit nimic și putem folosi, totuși, că în primul rând parametru. Deci, în fapt, nu există acest special tip de date în funcții anonime, există acest nume special de variabile în funcții anonime care încep cu semn dolar și reprezintă numerele parametrilor, la zero indexate, pentru această funcție. Deci, există o serie de lucruri se întâmplă. Aici am de gând să se întoarcă, și apoi o acoladă reprezentând o funcție, dreapta? Observați că eu nu am definit Tipuri de parametru sau tipul de întoarcere. Acesta poate fi de fapt dedusă din cauza semnăturii din această funcție originale. Deci, putem elimina care ca o posibilitate. Dar, de asemenea pot folosi semnul dolar la zero la reprezintă acest prim parametru care este a trecut în această funcție anonim. Deci, simplificarea și mai mult. OK? Până acum, bine? Acum e acest type-- faci amintiți-vă acest dolar semn de zero că am văzut în această acoladă că am văzut doar un pic în timp ce în urmă în această Swift șase exemplu? A fost chiar aici. Observați că este exact ceea ce căutăm la, este că am trecut în această funcție pe părți o funcție anonim care verifică primul parametru pentru a vedea dacă acesta este egal cu simbolul colon. Și asta e exact ceea ce este se întâmplă, este că toate suntem doing-- revenirea cuvânt cheie este implicat în acest case-- suntem revenind această valoare în cazul în care vom comparat Primul parametru împotriva acest personaj colon. Și astfel acest tip de demystifies acest lucru. Și o să vedeți acest construct o mulțime în sintaxă Swift, astfel încât face să păstreze în minte atunci când sunteți a lua o privire la asta. Acum putem obține de pe șine un pic și du-te într-adevăr de lux care arată chiar unele mai multe dintre putere Swift. S-ar putea vedea chiar unele dintre acestea în codurile de probă. Deci, de aceea am de gând pentru a arăta asta. Practic ceea ce putem face este ca, în primul rând de toate, a fost un fel de inutile pentru mine să pună în aplicare toate aceste putere de Codul pentru că dacă importați Darwin bibliotecă, acesta include de fapt o funcție numit pow care face acest lucru pentru tine. Deci, putem simplifica și mai mult și au funcția noastră de putere până acum doar fi un minunat unul linie în cazul în care ne-am reveni această funcție anonim care acceptă dolar semn 0 ca sa de bază și y ca exponent sale. Dar putem obține într-adevăr, într-adevăr fantezie când ne-am dau seama că Swift are o mulțime de putere sub capota. O mulțime de operatori care am fost a face cu, plus semne și simboluri divizare și toate aceste lucruri pe care le în mod normal operează cu cu tipuri de date într-un limbaj de programare, sunt de fapt extensibile în Swift. Deci, despre ce înseamnă, în care ne poate defini propriile noastre operatori. Deci, acum m-am săturat de dactilografiere în tot acest pow și apoi o paranteze și apoi bază. Nu vreau să fac asta. Eu de fapt, doresc să aibă un Operatorul care îmi permite să fac asta. Deci, eu pot spune Swift că vreau pentru a crea un operator, stele star-- de modul în care am nu pot folosi carate pentru că carate este un operator care face cu totul altceva. Așa că nu vreau să sortați de se ciocnesc cu asta. Și așa ceea ce vedeți într-o varietate de limbi, inclusiv Python, este ca operator de star pentru a reprezenta exponenții. Deci, asta e singurul motiv de ce am făcut asta. Și va fi un operator infix tip. Și am să furnizeze să-l câteva informații despre prioritatea acestui Operatorul asa ca e asociativ stângă. E ca și cum relativ mare prioritate în raport la însumare sau multiplicare. E prioritate mai mare decât toate acestea. Deci, pe și așa mai departe. Și atunci am defini funcție care de fapt dictează ceea ce face acest operator. Așa presupunând că am un stângă partea mână și partea dreaptă, care ar fi, probabil, o mai bine nume de variabilă pentru acest lucru. Stanga si partea dreapta. Pot lua apoi această putere a stanga la dreapta și să se întoarcă această valoare. Deci, acum e foarte dulce. Tot ce trebuie să faceți este de 2 stele stele 3 și că este de 2 la puterea a treia, și vom obține o valoare de 8. 2 stele stele 10 este de 2 la Putere al 10-lea, avem 1.024. Deci, acum puterea noastră de funcții, care din nou este diferit, pentru că ideea din spatele acestui a fost că avem o funcție care are întotdeauna o anumită valoare și it-- multiplica sau mai degrabă ia exponentul la aceeași putere. Deci, acum e si mai simplu. Deci, acum e doar dolar Înregistrează 0 stele y stele. Nici măcar nu trebuie să mai folosească pow. OK, cine a pierdut? Facem bine? Orice întrebări cu privire la aceste lucruri? Da? Audiența: Când Tu-- [inaudibil] puterea funk lui y dublu. Deci, atunci când se întoarce o funcție. DANIEL Armendariz: Funk putere de y dublu. Da, nu știu ce numerele y sunt. Îmi pare rău pentru asta. Audiența: De ce revin o funcție [neauzit] incintă. Nu este dolar de zero stele y stele [inaudibil] constată că operatorul cu care revenind dublu [inaudibil] dublu? DANIEL Armendariz: Deci să mi răspunde la întrebarea dumneavoastră cum am înțeles și poți să-mi spui dacă nu am înțeles întrebarea dumneavoastră. Deci acest construct, bretele buclat semn dolar la zero stele y stele, este o funcție. Și acceptă un parametru care este reprezentată prin acest semn dolar zero. Cuvântul cheie retur este implicat în acest foarte scurt, funcția de sintaxă anonim. Ceea ce înseamnă că, în esență, ce acest spune este că eu sunt definirea unui function-- și apoi voi doar o numesc something-- unde am o anumită valoare y. I y au, care este dublu. Și eu întorc o dublă. Și am în acest retur y-- pare rău, N-ar fi numit acest x y--. Medicul echipei încearcă, aoleu, aoleu. X- nope-- y star star. Deci, aceasta este doar o versiune simplificată a acestei. Și astfel motivul pentru care am dolar semn zero, este faptul că folosirea acestui incintă înseamnă că nu mai am de tip pow, sau nu mai face Trebuie să fac ceva ca de 3 stele stele 2. Pot avea doar un singur funcție numită pătrat care va avea mereu o anumită valoare ca intrare și de fapt a reveni pătrat de care. Astfel, întregul scop al închiderii este la doar un fel de chintesența faptului că mereu vreau să utilizeze ori de câte ori y Eu numesc această funcție în calitate de putere atunci când se iau acest exponent. Deci revenind apoi, o funcție care acceptă o dublă, care este baza, și afișează rezultatul acestei exponent este cheia aici. Și asta e diferența majoră. Nu a fost doar un pic de o înflorire. Acest lucru nu este diferit în comparație cu exemplele anterioare, dar a fost doar un pic de o putem înflori putem de fapt a crea un operator în Swift și de fapt face lucruri cu el, care este un fel de un lucru rece. V-am răspuns la întrebare? Dulce. Orice altceva înainte de a trece mai departe? OK. Acum, acest tip de imploră Întrebarea este that-- bine OK, acum avem capacitatea de funcții să fie returnate. Putem trece, de asemenea, funcționează și ca datele sau ca parametri alte funcții? Și, de fapt putem. Deci, haideți să spunem că avem toate din același cod. Avem variabila pătrat care va pătrat acest cod. Și avem variabila cub care va cub unele date. Și noi de fapt, doresc să aplice la o gamă largă de numere. Deci, ceea ce am putea fi tentați să facă, desigur, care este cu siguranță valabil, este de a repeta peste această listă de numere și se aplică funcțiile mele pătrat și cub și să obțină două noi liste fi rezultatele că sunt această listă originale pătrat și tocata, respectiv. Perfect acceptabil. Dar ceea ce este lucrul pe care vedem aici este că avem, din nou, dublarea codul nostru. Și există, probabil, o oportunitate pentru noi a simplifica această un pic. Ce dacă a existat o modalitate pentru noi de a de fapt repeta mereu peste unele listă și doar trece la acest magic funcționează o variabilă care reprezintă o funcție pe care dorim să se aplice pentru fiecare element unic în această listă. Aceasta aduce conceptul de ceea ce se numesc funcții superioare de ordine. Și asta este, în esență ceea ce această este, este că putem crea o funcție. Și în acest caz se numește Mapper, doar pentru a da un nume, doar cartografiere peste fiecare element unic într-o listă. În cazul în care iau o listă și eu iau o funcție. Și această funcție, desigur, are o anumită semnătură. Acesta acceptă ca un dublu parametru și se va ieșire este o dublă. Și toată rezultatul această funcție se întâmplă a fi o listă nouă, care este de tip dublu. OK? Și ce am de gând să fac este de a aplica această funcție f la fiecare element în lista mea. Și reply-- și destul de returnați nou Lista, ca urmare, care este foarte misto. Acum pot trece funcții în jurul. Și această idee de ordin superior funcții este foarte important. Și acest lucru Mapper este de fapt doar punere în aplicare săracului de o funcție care este construit în Swift numit hartă. Și o face tocmai acest lucru, poate chiar un pic mai bine. Acesta este doar un fel de generic, versiune simplificată că ne permite să vedem Conceptul care se aplică aici. Acum, uita-te la modul în care am poate aplica de fapt gradină meu și funcții mele cub la această listă de numere. Am rulat Mapper mea. Ofer la o lista mea de numere. Ofer să-l The The funcție care se întâmplă să se aplice fiecare dintre aceste indici. Și va fi ieșire ca un rezultat. Și voi ajunge să văd că am pătrat și tocata numerele mele ca un rezultat. Și, desigur, mapperul va avea orice fel de funcții anonim. Putem vedea chiar că am creat o nouă funcție anonim care doar nevoie de unele parametru și-l împarte cu 2. Și putem vedea că am, de fapt, împărțit lista mea de 2 loc. Cool? Până acum, bine? Bine, acum hai reveni la această idee. Să pună în aplicare acest nou în contextul unei gradebook. Și dacă fac asta, putem vedea că pot aplica o mare varietate de aceste options-- sau o mare varietate de acestea Funcții de ordin superior pentru a simplifica fapt, capacitatea mea de a face un varietate de lucruri pe listele de numere. Deci, de exemplu, dacă îmi ia o listă de numere, una dintre funcțiile de ordin superior că există este numit reduce. Ce face, mai degrabă reduce decât hartă, este redusă va ia două elemente în listă, va avea o funcție care compară cele două elemente ale lista, iar apoi se va un fel de output-- ieșire din această funcție va fi un alt element care tu apoi compara cu alții. Deci, ai putea folosi acest fapt pentru a suma numerelor din lista ta. De exemplu, dacă ați avut o listă de 1, 2, 3, 4, 5, luați primele elemente, 1 și 2. Puteți aplica pentru aceasta un plus funcție care ia aceste două elemente și scuipă unul din aceste elemente, care ar fi valoarea de 3. Apoi ne-am lua ca valoarea 3 cu următorul element al listei, suma celor doi, și apoi să păstreze merge în jos în listă. Suntem reducerea lista de o singură valoare. Și doar așa se întâmplă că simbolul plus este un operator, la fel ca tocmai am văzut. Acest operator de fapt o funcție care are tocmai această listă pe care le ar dori, mai degrabă aceste proprietăți care ne-ar dori. Așa că vă încurajez să aruncăm o privire la asta. Vreau să sortați de mutare pe de o parte din acest cod astfel încât să putem uita de fapt la ceva real, adevărat Swift real, în Xcode, în dezvoltarea iOS. Dar gasiti acest lucru și a vedea dacă puteți analiza prin ceea ce se întâmplă cu unele dintre aceste ordin superior funcții, inclusiv filtru, reduce și veți chiar a se vedea undeva pe aici harta, de asemenea. E chiar aici. În cazul în care se va lua o secvență de grade și se va efectiv le hartă cu ajutorul comutatorului construcția, care s-ar putea recunoaște de la C, dar de fapt este mult mai puternic decât comutatorul constructul pe care o avem în C. Și vom aplica asta fiecare element din listă și să ofere de fapt nota scrisoare de fiecare dintre aceste clase, folosind toate aceste concepte că tocmai am vorbit despre înainte. Acum să evite pentru doar o minut și vorbesc despre struct. Și așa structs sunt o așteptare în C pe care le au fost în măsură să definească un nou tip de date. Structs exista în cadrul Swift. Și așa face o mulțime de alte constructe numite ENUM și clase, care într-adevăr ia această idee a unui nivel diferit întreg. Și de fapt e doar o cale de definirea unui nou tip de date. Deci, dacă get-- dacă vii peste clasă sau struct sau ENUM, nu te confuz de ea. E doar modul de definire unele nou tip special de date. Și acest lucru este foarte important atunci când vorbim despre dezvoltare app iOS pentru că tot ceea ce există în cadrul aplicației iOS este, în esență, un obiect de un fel. Și un obiect este de fapt o clasă sau o enumerare sau o struct. Deci, în acest caz am definirea unui nou tip de date că eu sunt de evaluare de asteptare asta e unele proprietăți, inclusiv un nume și o secvență de grade. Deci, un tip de evaluare că am putea avea în vedere ar fi teste, de exemplu. Mi-ar dori să aibă un evaluare care a fost un test și că a avut o varietate de clase asociate cu faptul că, pentru test este de test doi, așa mai departe și așa mai departe. Sau ar putea să am un alt tip de evaluare pentru seturi de probleme. Și eu pot face lucruri. Pot avea de fapt funcții în cadrul acestui tip de de date, care sunt acum numite metode. Deci, dacă vedeți vreodată Metoda cuvânt, într-adevăr este doar o funcție care se aplică la o clasă foarte specifice, sau a unui tip de date. Ea ne permite să modifice datele din cadrul. Deci, cu alte cuvinte, dacă vreau să adăuga o notă de evaluare mea, atunci tot ce trebuie să faci este să adăuga punctajului care a fost de intrare la această funcție a proprietatea mea internă. Există un alt construct pur aici în Swift, care este acest punct punct punct operator de, ceea ce înseamnă că scorurile pot accepta acum orice număr de numere întregi. Și înscris va fi o matrice de numere întregi care au fost transmise la funcția mea, care înseamnă că eu pot face lucruri de genul acesta. Pot face adăuga note și oferă doar Numerele arbitrare de întregi în ea și să fie de fapt prevăzut un tablou de aceste valori în funcția mea sau în metoda mea, așa cum este cazul. Acum, acest lucru este important, deoarece totul în Xcode, totul în iOS, este de fapt un obiect. Deci, ține minte când am bustul Xcode deschis și treceți dincolo de iOS Versiunile doi și trei și de fapt, merge pe la versiunea patru. Și din nou, toate acestea vor fi postate pe pagina de seminar. iOS patru este un fel de complet cu sufletul la gură punerea în aplicare a unei aplicații foarte de bază. Și ce această aplicație nu este încarcă un UI, care arata ca acest lucru. Din nou, dacă facem click pe storyboard putem vedea că acest lucru este ceea ce pare. Aceasta este interfața. Ea are un titlu la foarte sus. Am numit-o galerie web. În mijloc există un element numit de părere imagine UI. Și în partea de jos există o Bara de instrumente cu un singur buton care are spatii elastice care se permit centru în mijlocul această bară de instrumente. Și ce se întâmplă este că atunci când această loturile se descarcă un fișier JSON care este conținut pe un server în altă parte, analizează acel fișier JSON, și fișierul JSON arata un pic ca aceasta. Fișierul JSON arata ca aceasta. Nu este. Acesta are un nume album și ea are o serie de fotografii. Fiecare dintre aceste fotografii au un nume și, de asemenea, o adresă URL se care reprezintă Versiunea jpeg de care fotografie individ. Deci, ce se întâmplă este că, atunci când acest program loturile, se descarcă fișierul JSON, analizează o, pune toate acestea în echivalentul unui tablou în iOS dezvoltare app, care este un nsarray. Și atunci eu pot încărca apoi aceste date într-o aplicație și încărcați-l pe ecranul meu. Este o imagine care a fost încărcată cu butonul chiar partea de jos. Dacă faceți clic pe Obțineți Urmatoarea Imagine, ea atunci trage ca imagine de pe internet și înlocuiește acea imagine în ecranul de imagine UI. Deci, puteți descărca acest lucru și de fapt gasiti pe computer. Și construi și de fapt compila-l pe dispozitiv. Dar, în esență, procesul a fost aceasta, creați storyboard-- sau mai degrabă nu create-- dar selectați storyboard. Și, de fapt we'll-- dacă nu mind-- vom lua doar câteva secunde pentru a vă arăta cum de fapt acest lucru a fost făcut. Doar astfel încât cum putem de fapt realiza acest lucru se face un pic mai mult aparent. Vedere cerere unică, eu sunt O să numesc acest seminar patru reprezentând acest număr special. Salvați-l pe desktop. OK, o să faceți clic pe rezumat. Și ce am de gând să fac este de a găsi punctul meu de vedere imaginii, glisați-o pe utilizator mea interfață și centru-l. Acum doar de centrare, din păcate, nu este de gând să facă un întreg lot, cu excepția pentru un ecran că este această dimensiune exact. Astfel, ne putem convinge de faptul că prin Dați clic pe acest lucru dublu cerc, aducând acest poziție favorabilă meniul aici se schimba pentru a previzualiza, unde vom efectiv obține o șansă pentru a previzualiza modul acest lucru va de fapt uita-te pe alte dispozitive. După cum se poate observa, nu face chiar vezi-l pe acest caz particular. Așa că am de gând să închidă asta pentru acum. Și am de gând pentru a selecta această pictogramă în jos, la foarte porțiune de jos a ecranului. Se spune rezolva problemele de aranjare Auto. Ne pare rău, se taie în partea de jos. Dar dacă faceți clic pe asta, ceea ce eu obține este această poziție favorabilă up-- merge departe. Ceea ce am obține este acest pop-up care permite-mi să adaug constrângeri lipsă. Și de a face ca va atunci un fel de al bloca în porțiunea centrală a Ecranul cum am putea aștepta. Acum, în scopul de a obține acest buton pe deasupra, am nevoie pentru a merge la Editor. Du-te la In Embed și faceți clic pe Controler de navigare. Ceea ce va face este că se va adăuga acest altă componentă tot la ea, dar se va lega de fapt înapoi la UI meu original. Și detaliile, din nou, noi nu facem într-adevăr nevoie să aibă grijă de acum. Dar eu vreau să aibă o bara de instrumente în partea de jos. Deci, voi verifica Bara de instrumente Spectacole. Și aceasta oferă în opinia noastră, care este acum în altă parte, putem vedea e legat aici. Acesta oferă acum o bară de instrumente în partea de jos a UI mea. Deci, acum, mai degrabă decât selectarea unui vizualizare imagine, pot găsi o etichetă, sau mai degrabă un toolbar-- Să vedem, unde e asta? Ce se numește? Un element button-- bar-- item-- sorry-- bar element buton. Plop că există și se aplică un cuplu spatii de flexibile pe fiecare parte pana in centru, de fapt asta. Deci, acum am creat UI mea, practic. Și eu pot da un nume de dublu click la foarte de sus aici și spune galerie web și așa mai departe. Acum, din nou, acestea sunt elemente că există prin ele însele. Și am să vă conectați le codul meu care Pot face prin aducerea din nou această pictogramă dublu cerc, schimba din previzualizare. Care, apropo, acum putem vedea este frumos centrat si va arata bine pe o varietate de dispozitive. Treceți la automat, care va aduce codul ViewController. Și acum această parte este important. În scopul pentru tine de a conecta aceste două elemente, codul de UI, selectați elementul pe care doriți să vă conectați. Deci, în acest caz, ne vom de fapt, doresc să codifica schimba imaginea care este conținut în acest punct de vedere imagine UI. Deci, dacă vă controlați faceți clic pe vizualizarea imaginii și trageți, veți observa că veți obține un bar mic, cand eliberati de tot acest pop va avea loc în sus. Și se spune că vom a crea o conexiune. Și de aici vreau să-l dea un nume, ceva de genul galerie. Hit Enter. Și aceasta prevede de fapt o galerie variabilă numită că pot referință apoi în codul meu pentru a schimba imaginea, de exemplu. Deci, cum de fapt sa te uiti acest cod? Ei bine, din nou, eu nu vreau să petrec prea mult timp pe ea. Și eu vă încurajez să descarcati-l și să ia o privire. Dar unul dintre cele mai aspect important este codul care preia de fapt o imagine. Deci, în acest caz, eu vreau pentru a obține în fotografiile mele matrice, care este conținut în clasa mea. Vreau definiți numele și adresa URL care a fost analizat din acest JSON. De fapt, cere dispozitivul pentru a obține URL-ul, să-i aducă URL-ul de la acest lucru, iar apoi adu datele din conținutul care URL. Apoi transforma că datele într-o imagine prin care trece aceasta în imaginea UI. Deci, din nou, acestea sunt toate diferite tipuri de obiecte, diferite tipuri de clase. Și atunci eu pot seta apoi mea gallery.image egală cu datele. Și asta e un fel de carne din aceasta că de fapt este atunci capabil de a schimba schimba datele from-- Imaginea de la una la alta. Deci, din nou, sperăm acum o mulțime de construcții va face un pic mai mult sens. Observați că există unele puncte de exclamare aici. Punctele de exclamare sunt în esență legate de optionalele. Ceea ce vreau să spun este practic că chiar și fără a verifica pentru a vedea dacă există date în cadrul acestui opțional, Am de gând să mergeți mai departe și să își asume că există și despachetez ea. Amintiți-vă că am folosit analogia un fel de pachet pentru optionalele și trebuie să despachetez pachet și trageți de date afară. Semnul de exclamare forțe care se întâmplă de fapt. Dar știu că acest lucru este sigur că am verificat pentru a vedea dacă datele imagine este egal la zero, am verifica de fapt pentru a vedea dacă acel opțional a fost, de fapt, nu a reușit. Dacă avea, de fapt, nu a reușit deja. Și așa sunt sigur că, odată ce ajung la acest punctul I pot desface în condiții de siguranță a datelor. S-ar putea, de asemenea, vedea în forma de un semn de întrebare. Deci, dacă ne-am defilați în jos pentru a în cazul în care am Trebuie să analiza efectiv datele. Deci, nu vă lăsați descurajați de aceste fel de nume lungi. Puteți găsi în Apple site-ul dezvoltator mult de referințe la toate obiecte și toate procesele care de fapt face acest lucru posibil. Dar observați că acest lucru este, în esență, o funcție în cazul în care l-am trece unele date. Și să mă întorc un fel de date. Și am nevoie pentru a utiliza acest drept cuvânt cheie pentru ao transforma în acest nsdictionary? Care este, din nou, un nsdictionary opțional. Care apoi am nevoie pentru a verificați pentru a vedea dacă există. Deci, eu pot folosi că dacă lăsa egal de succes analizat, atunci știu că opționale conține de fapt, unele date. Sau ce am făcut aici a fost să doar presupune că, dacă există au existat erori că este, de fapt, în condiții de siguranță. Bine, vreau să mulțumesc voi toți foarte mult pentru venirea. Știu că a fost o mulțime, dar a fost doar o oră pentru a vorbi despre unele chestii destul de avansat. Și așa sperăm veți obține o șansă pentru a descărca toate din Codul și să ia o mai bună, mai uite amănunțită la ea. Intr-un fel convinge-te de toate din lucrurile care se întâmplă. Și vreau să vă mulțumesc toate, din nou, venit. Și noroc cu proiectele finale. O zi bună.