[Muusika mängib] DAN AMRMENDARIZ: Igaüks, tere tulemast CS50 seminar, iOS App arengule kiire. Ma olen Dan Armendariz, ja ma olen kirikuõpetaja infotehnoloogia siin Harvardi. Ja järgmine tund läheb keeristorm Tour nii palju kraami Selle teema nagu me mahub. Ma pärast kõik lähtekoodi et sa näed täna online. Me ei pruugi olla võimelised tegelikult minna üle kõik et ma olen, et ma olen näitab sulle sel tunnil. Aga vähemalt loodetavasti läbi kommentaarid lähtekoodi, Teil on võimalik proovida aru saada, mis täpselt juhtub neid asju et meil ei ole päris saada. Üldine struktuur Tänapäeva rääkida on järgmine. Hakkame läbi teinud mõned põhilised süntaks koos Swift keeles laskumist mõned rohkem arenenud süntaks Swift keeles. Kuna keel on tõesti kaasaegne ja on palju kõrgel tasemel funktsioone, asju, mida me ei ole näinud C kogu CS50 või isegi mõned teised keeled et oleme alustanud kasutades CS50 nagu PHP, nii ma pean püüdma tutvustada ka mõned teemad, mis on seotud kõrgema taseme keelte et te ei näe põhjalikult CS50, aga näete hiljem infotehnoloogia klassid. Nii see saab olema tihedalt pakitud tunnis. Ja palun andke mulle kui teil on mingeid küsimusi. Nii et kui olete huvitatud tehes areng koos Swift, või tõesti igal iOS app arengut, seal on paar nõudeid. Esiteks, sa pead kasutama Mac, töötab näited et me ei kavatse olla kasutades täna suhteliselt uus versioon OS X. Sel juhul ma töötab X 10.5. Võite töötavat 10.11, kui soovite. Aga kõik, mis sa lähed vaata on kaasatud Xcode 7 ja hiljem, mis on viimane versioon Swift, mis on Swift 2.0. See on tegelikult päris oluline erinevus. Palju süntaks on muutunud päris märgatavalt Mõnel juhul on Swift 1.0, mis ilmus eelmisel aastal, Swift 2.0, mis just tuli välja sel sügisel. Nii et me kavatseme näidata Swift 2.0. Paljud asjad, mis otsida online kui sa üritad saada täiendavat informatsiooni erinevaid asju, võiksite selgesõnaliselt otsida Swift 2 mitte lihtsalt vana Swift teha Veenduge, et teil süntaks õige. Tegelikult on see enamasti tõsi. Seal on kiire summa areng toimub Swift keel ajast Apple välja, siis ma arvan, Mis, see on olnud veidi üle aasta nüüd. Ja asjad on muutunud oluliselt selle aja jooksul. Ja nii ei saa pettunud kui siis, kui otsite ümber teemade kohta Swift või kuidas täita midagi kasutades mõned näiteks koodi või midagi, et see ei ole tegelikult töötavad Swift 2.0. Veenduge, et te otsite spetsiaalselt selle versiooni et püüda minimeerida mõju erinevatele versioone ja neid erinevaid asju. Ma püüan välja tuua vaid mõned asjad mis on erinev vanemad versioonid. Aga see on midagi, olge. See on ilmselt saab olema üks suuremaid peavalusid et teil on koos Swift on leida Näiteks kood, mis on vanemad, kasvõi mõne kuu võrra, üritas see oma moodsam projekti. Ja see lihtsalt lihtsalt ei tööta. Sa saad tõlkija vead, süntaks vigu, igasuguseid hull värk. Nii lihtsalt olla kannatlik seda ja sa loodetavasti on päris tore kogemus koos Swift üldine. Nüüd saad tegelikult join-- ja ma loodan me tegelikult ikka on see seda year-- CS 50 on Apple App arendusmeeskond, mis võimaldab teil installida apps mis teil luua oma iOS seadmeid. Nii, kui heita pilk see URL kui olete huvitatud teed seda. Nii lihtsalt paar asju Swift ise. See on koostatud keeles. Aga näed, et mõned omadused, mis me kasutame võimaldavad seda kasutada ka natuke nagu tõlgendada nii hästi. Palju süntaks on laenatud C. See põhineb ja kirjutatud C. Ja nii me näeme, et seal on palju takeaways oma olemasolevaid teadmisi C, et saame sadama Swift. Aga on asju, mida oleks väga erinev C. See on väga tugevalt tipitud. Seal on automaatne mäluhaldus. Sa ei kavatse on kasuta malloc või tasuta kõikjal. See on mõeldud üldisus. Nii teisisõnu, saate seda kasutada igasuguseid kontekstides, Apple Watch iPhone kõik viis kuni OS X ja isegi mõned serverid, isegi mõned skriptid. Aga me näeme, et toetust skriptimine ei ole päris seal veel nii see on teistes keeltes. Nii suure tõenäosusega on sul kasutada see ainult arengut Mac või oma iPhone. Ja see on palju kaasaegseid jooni. Ja palju need asjad on asjad, mis me ei kavatse proovida lahendada täna vaid ka meie teemad, mis ausalt öeldes saame pühendada kogu kursust. Tegelikult CS 51, mis on pakutakse järgmisel poolaastal, keskendub palju nendel teemadel mida kirjeldatakse allpool. Nii saate kulutada terve semestri mõista neid asju. Aga me ei kavatse proovida saada nende kaudu vähemalt nii palju, et sa ei saa aru, mis on toimub, kui sa vaatad kell Swift programmi ja suutma murda oma tee läbi lõpliku projekti. Nüüd on üks parimaid viise, et saate saada lisateavet selle ausalt öeldes lihtsalt läbi Apple'i ette dokumentatsiooni Swift. Seal on palju API mis on saadaval. Ja see on hea kodubaasi teile otsida konkreetseid asju, mida tahad teha API kaasates iOS. Kui soovite kaamerat kasutada Näiteks võite alustada vaadates siin, ja kasutada ka Google ja Stack Overflow nagu tavaliselt. Kõik küsimused selle enne kui me hüpata paremale? Hästi. Liigume edasi. Nii et kõigepealt on mul arvu Näiteks failid. Ja ma lähen, et proovida astuda nende kaudu suhteliselt kiiresti. See on Hello World faili Swift. See on väga lihtne. Seal on palju rohkem kommentaare kui on olemas tegelik koodi. Märka tegelik kood on Kõige all on line 14. Ta ütleb, print. Ja siis on funktsioon kõne. Me pääsemist seda string nimega Tere CS50. Pange tähele, et seal ei ole semikoolonit. Pange tähele, et seal ei ole int main. Ei ole ükski Cruft et meil oli koos C. Kui me kasutame Swift sel viisil, mis on lihtsalt kirjutatud tekstifaili ja salvestatud minu arvuti, siis Ma ei kompileerida ja käivitada. Pange tähele, et siin ma olen ei kasuta CS50 IDE. See eeldab, et ma olen töötab ja et ma olen OS X, ja et ma olen Xcode juba paigaldatud Selle masina, et seda tegelikult funktsioon. Aga see on lihtsalt tavaline tekstifail et siis saame koostada ja muuta. Vaatame, kuidas see tegelikult toimib. Mis siis, kui ma tahan kompileerida? swiftc 1.swift. Pärast hetkelist või kaks, siis näete, et meil on nüüd koostatud seda arvesse fail nimega 1. Ja nüüd on meil trükitud meie CS50, Meie Hello World rakenduse pigem. Pange üks teine ​​asi kui ka see, et vaikimisi me ei pea sisend a / n trükkida uus liin. Vaikimisi print funktsiooni Swift trükib uue liini jaoks. Võite liigu vabatahtlik täiendav parameeter öelda seda mitte teha. Aga Google lisateavet selle kohta. Vaikimisi on see teha print line. Olgu, nii liigume edasi siis mõned muud asjad. Niisiis, kuidas me saame tegelikult määratleda muutujad? Me ei saa seda teha on kasutades ühte kahest meetodist. Ja üks, mis ma tahan teile öelda, umbes Esimene on see let määratlus. Ja see on oluline sest tegelikult mida me teeme on määratleda pidev. Me ei kavatse luua muutuja, või pigem pidev nimetatakse nimi, anda talle mõned data-- sisse Sel juhul string Dan. Aga kasutades seda let märksõna, ütleme et see variable-- või jälle constant-- nimetatakse nimi on kunagi muuta. See saab olla muutumatu kogu kestus Programmi või kogu kestus kontekstis et muutuja on kättesaadav. See on tõesti oluline, et kui teil on andmeid, mis ei ole muutu oma programmi, ja sa näed erinevaid näiteid umbes kui tahame kasutada las võrreldes teiste süntaks, on oluline, et te kasutate lasta võimalusel, sest see annab teada keelt, et see on ei kavatse muuta, ja ta võib tegelikult teostada palju optimeerimine parandada kiirust ja ohutust oma programmi. Ja ohutuse, ma mõtlen ei lase see crash hull vigu et me võiksime olla harjunud nägema C. Siis saame kasutada string interpolatsiooni kapseldada selle sees string. Nii näeme selles print line, printida hello, ja siis kasutades kurakriips avatud Sulgudes, ja seejärel Nimiminu muutuja sel juhul konstantne, sulgeda sulgudes. Ma põhimõtteliselt siis paneb sisu selle muutuja nimega nimi sees string ja seejärel printida tulemus seal. On veel üks muudatus seda pilti mis seisneb selles, et mul on, tipus, kasutusele Jutt line, mis põhimõtteliselt lihtsalt täpsustab et ma tahan kasutada Swift tõlk, mille tähendab, et ma ei pea enam koostada selle konkreetse programmi. Ma lihtsalt kasutada seda nagu oma script. Kuid see on antud juhul taga stseenid on koguda ning seejärel olles perspektiivis. See on lihtsalt nähtamatu. Olgu, nii liigume edasi. Nii et natuke petmine mis juhtus enne. Ma näitasin teile, et ma võiks määratleda konstant. Ja ma võiks pakkuda mõningaid andmeid seda teha. Aga sel juhul, märkad, et ma ei ole tegelikult täpsustada, millist tüüpi andmeid see see on. Ja see on sellepärast, tõlkija, Swift saab järeldada andmete tüübi lihtsalt aluseks andmete kohta, mida ma panin ta. Sest ta teab, et hinnates seda muutuva siin, see andmete õigus Siit võivad ta teab, et see on string. Ja nii see pidev nimi on seega saab olema string samuti. Aga me ei saa ka olla selgesõnaline umbes tüüpi, mis on me kasutame konstandid või muutujate kasutades seda süntaksit instead-- lase nimi koolon String võrdub Dan, mis antud juhul tähendab, et me oleme läheb määratleda pidev nn nime. See saab olema tüüpi String. Ja väärtus saab olema Dan. Nüüd muul viisil, mis saame luua variables-- ja need on Muudetav muutujad, mis tähendab, et me oleme tegelikult läheb muuta nende sisu millalgi kestuses kontekstis et see muutuja on defined-- me kasuta var märksõna asemel lasta. Aga jälle, vaikimisi, kui sa ei tea et sa pead manipuleerida, et andmed, proovida kasutada üürile jõudlustäiustusi. Sel juhul saan siis täpsustada, millist tüüpi andmeid et ootame olema sees Selle uue muutuja nimega silt. See saab olema string. Ja me läheme siis concatenate kaks stringid koos, string hello, ja string esindab muutuja, või pigem pidev nime. Nii et see on tore, sest see Mõnevõrra PHP nagu me on väga lihtne string ahel. Me ei pea automaatselt kasutada mingit mälu haldamine suurendama ja teha mingit naljakaid asju seal. See toimib nagu me tegelikult oodata. Olgu, küsimusi selle? Nüüd muul põhjusel, et vajame teil võimalus saaks määratleda, milline tüüpi muutujaid on on seetõttu mõnikord me seda ei tee soovid vormindada muutujad mõned andmed on punkti määratlus. Nii et kui oletame, et ma tahan hakata sisestanud mõned klassid arvesse hinne raamat. Noh ma tean, et üks muutujaid, et ma tahan olla läheb olla Muutuv hinne. Ja me teame ka, et meil tahad seda täisarv. Aga äkki teeme veel on, et hinne saadaval. Swift, sa pead määratleda, millist liiki andmeid mis on seostatud muutuja või lasta pidev Enne, kui saate tegelikult kasutada, et muutuja. Sest see on tugevalt tipitud, teil on siduda tüüp Nende muutujaid. Nii et sel juhul, kui ma ei ole korralikult vormindatud esimest mõned väärtus, siis ma pean ütlema Swift, mida Ma ootan, et andmete tüübi olla. Ja see läheb veel sama andmetüüp läbi ajaloo on see programm. Nüüd siis võib tekkida kiusatus kohe Olen loonud selle klassi muutuja ja kui see täisarv 100, nüüd kui ma tahan proovida concatenate stringi et täisarv, võib tekkida kiusatus siiski kasutada et string konkatenatsioonioperaator nagu me tegime paar rida enne. Aga kahjuks, See tegelikult ei töötada, sest sa oled sisuliselt täita operatsiooni kaks erinevat tüüpi. Nüüd on see väga erinev teistest keeltes nagu PHP, mis on tõesti loosey goosey oma omamoodi tüübid. Nad lihtsalt meeldib, jah, mida iganes, ma ei hooli. Anna mulle üks tüüp ja äkki ma teen õiget asja. Sel juhul Swift on väga range, milliste et teil on tegemist. See liitmise operaator või konkatenatsioonioperaator on põhiolemuselt paar erinevaid valikuvõimalusi. Seda saab teha liitmise täisarve, või siis saab teha stringi liitmise tehe, ja võibolla mõned muud asjad samuti. Aga kui nimetatud käitleja ei tunne mis on mõlemal pool seda, või pigem nende kombinatsioon kahte tüüpi, ei ole see, mida ta on oodanud, siis läheb põhjusta riket. Nii et sel juhul, mida see tähendab olema string pluss täisarv? Hästi kontekstis Selleks peame ilmselt tahad teha string konkatenatsioonioperatsiooniga. Aga muidugi arvuti ei ole see mingi konteksti. Ja nii me peame andma et lisateave lase tal tean, mida see on see, et me tahame teha. Nii teisisõnu, asjaolu et Swift on tugevalt tipitud tähendab, et sa pead tegema natuke lisatööd saada see tegutseda nii, et sa tahaksid. Aga selle tulemusena on kindlam. Ja kui sul on võtta arvesse nende liikide, asjad lihtsalt öeldes alustada tööd päris hästi. Nii sel juhul me siis oleks sooritada stringi liitmise tehe selgesõnaliselt casting täisarv string pakkimine ta selles kapitali S String funktsiooni, ja seejärel kasutades stringi liitmise tehe operaator muuta meie label muutuja, ja siis välja trükkida. Siiamaani on kõik korras? Olgu, liigume edasi. Nüüd on olemas erinevaid andmeid tüübid, mida saame kasutada Swift. Nagu olete harjunud, saame luua Muutuv massiivi. Ja et massiivi saab ainult sisaldavad ühte tüüpi. Nii et sel juhul me ei kavatse luua Muutuv massiive täisarvud, mis Me nimetame klassid ja suudame salvestada et selles nurksulg formaadis kui olete harjunud to mitmesugustes teistes keeltes. Aga märgata, et siin me oleme määratlemisel paar asja. klassid on Muutuv variable-- Me ei kasuta let märksõna. Nii et see tähendab siis saame muuta sisu selle massiivi. See on tüüpi Array keskmine, ja me ei saa öelda, et nende baasil nurksulgudes siin. Nüüd üks toredaid asju on see, et me on juurdepääs palju Lisainfo umbes massiiv lihtsalt kasutades mõned lihtsad dot märke. Nii näiteks, grades.count annab meile arvu punkte, mis on olemas, et massiiv, mida me saame siis juurde päris lihtsalt lihtsalt kasutades, et dot märke. Kui soovite lisada täiendavaid kirjed kuni see massiiv, sa ei saa seda teha PHP stiili kus sa lihtsalt selgesõnaliselt määratleda, etteantud indeks, mingi väärtus mida soovite sisestada. Selle asemel kasutage append meetod massiivi tüüp lisama, et objekt, 95, et selles nimekirjas. Nüüd see massiiv on järgmine contents-- 100, 0, 90, 85. Ja nüüd me oleme lisatud 95, mis samuti. On ka teisi võimalusi saame lisada asju. Võite tegelikult kasutada liitmise operaator, mis tuleb tõlgendada nii massiivi append operatsioon. Ja sa võid lisada teise massiivi, mille sisu on 70 ja 80, Selle massiivi. Nüüd on meil sisu selles muutuja grades-- 100, 0, 90, 85, 95, 70 ja 80. See on lihtsalt ilus väike süntaktilise suhkur, mis Swift annab meile. Nii et kui me tahame, et lööme kokku klassid, me võib-olla tahame seda korrata üle iga elemendi selles loop. Ja me ei pea, Swift, mõiste on silmus, kui te ootaks. Aga kuidas me näidata vahemikus on veidi erinev. Nii selles asjas Kokkuvõttes kõik, siis me kavatse luua ajutine muutuja nimega summa, et meile säilitada seda loota. Ja märkate meie jaoks loop ehitus siin. Sest indeks 0 ..