>> [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 .. <grade.count.
Nii et see ehitus, 0 .. <grades.count on vahemikus operatsioon, kus me oleme
öeldes, et me ei kavatse luua vahemikus täisarvud vahemikus 0 kuni
kuid alla grades.count.
Nii et see on 0, 1, 2, 3, 4, 5, kuni aga palju üks
enne grades.count.
>> Nii et see on teistsugune kui kuidas me oleksid tavaliselt kasutatakse silmuseid
kus teil on mõned indeks varieeruv, seadke see võrdub 0 algul
ja siis integreerida, et alles mõne väärtus väiksem kui arv punkte
et massiivi.
>> Seega on modifikatsiooni sellele, tegelikult
mis võimaldab meil väga kergesti määrata erinevaid valikuid.
Kui muudad vahemik kolm punkti, 0 ... grade.count,
see tähendab vahemikus 0 to grades.count kaasav,
mis tähendab, et see number on ka Seejärel kaasatakse sellesse vahemikku.
>> Aga see on väga mugav nende täpse asju,
kui meil on täita korduste üle aasa
sest need indeksid nulli indekseeritud, Nagu me oleme näinud teistes keeltes
samuti.
Kõik küsimused selle kohta loop?
>> Nii et kaudne määratlus Selle indeks muutuja,
mille väärtus algab 0, ja jätkub iga loop iteratsiooni
suurendada 1 kuni punktini, mis on võrdne grades.count,
sel hetkel, silmus katkestab.
>> Pange tähele, et meie string interpolatsiooni siin
me saame tegelikult täita mõned lihtsad manipulatsioonid neid väärtusi.
Nii indeks pluss 1 tegelikult sooritada liitmise, et väärtus
sest indeks on Sel juhul täisarv.
Ja sel hetkel, siis seejärel muundada string
ja interpoleeritud sellesse string siin ja välja trükkida ootame. .
>> Ja hea asi umbes massiivid siin
et meil on ka võimalus, et on edev väärtusi ja Seadistusvärtuste
abil nurksulg tähistusi oleme näinud ka teistesse keeltesse.
>> Olgu, nii siit, nüüd arvutada meie arvele kogu meie klassid.
Nüüd omamoodi järgmine loogiline samm oleks
teha jaotus operatsioon leida välja keskmise taseme klassid.
Aga midagi olulist siin toimub, mida
on see summa olla täisarv.
Aga me peame sooritama teatud omamoodi topelt jagamine.
Ja see saab olema äärmiselt oluline, kui
tahame selle toimingu, sest mida me ütleme
on see, et me peame tegelikult täita jagunemine kahe kahekordistub.
Ja jälle, sest Swift väga tugevalt tipitud,
peame selgelt sätestatud kõik kirjed kahekordistab enne kui me tegelikult
Toimingu tegemiseks.
>> Nii et meil Tehke topelt jagamine,
see ei ole piisav vaid üks nende sõlmede topelt.
Mõlemad pea olema kahekordistuma, et kiireid
olla kindel, et see on see, mida me tahame teha.
Nii me siis selgesõnaliselt jklle harjunud roll summa, mille me oleme arvutatakse eespool
ja arv klasside paarismängus ja siis Toimingu tegemiseks ja poest
et uude muutuja, või pigem Selle uue pidev nn keskmist,
mis on mis tüüpi, te kujutate ette?
Kahe, yeah.
Nii Sel juhul me ei pea seda
sest see võib tuleneda operatsioon, millist tüüpi andmeid keskmine
saab.
Ja Swift on üldiselt päris hea kas nad suudavad järeldada liigid.
>> Kas sa tahad seda näha käivitada, või ma saan liikuda?
Ma tahan, et hoida läheb.
Kõik küsimused kõik see?
Hea.
>> Nüüd me ei kavatse hakata saada hea stuff-- funktsioonide defineerimise,
ja paar muud tüüpi, mis on unikaalne Swift, et sa ei ole
näinud teistes keeltes kuni selle hetkeni,
kuid need on olemas ka teistes keeled, mida võib leida hiljem.
Nii esimese kui soovite määratleda funktsiooni,
sa defineerid seda funky sõna funktsioon ja seejärel funktsiooni nime,
ja siis sulgudes argumendid mis sa tahad, et funktsiooni vastu.
Argumendid peavad ka specify-- generally--
tuleb täpsustada ka andmeid, mis nad on, kui nad ei suuda tuletatav.
Ja me näeme, et vähe mööndusega ka natuke.
>> Nii et kui meil on funktsiooni nimetatakse printGradeCount.
Me läheme vastu võtma variable-- või mitte sel juhul,
constant-- nimetatakse gradebook.
Ja see saab olla kirjuta array täisarvud.
Nüüd on midagi see on tõesti oluline siin
et ma tahan, et sa aru.
See on see, et vaikimisi on need argumendid mis on seosed selle funktsiooni on
määratletud kaudne let märksõna, mis tähendab, et ma ei saa muuta seda
gradebook muutuja siin.
Ja seda sorti mõtet, sest sa oled läbinud andmeid.
Ja sa võibolla ei taha seda muuta su alt.
On võimalik selgesõnaliselt mainida et see on muutuja pannes
var märksõna siin.
Aga see on gotcha et me oleme märganud inimesed on teinud minevikus
on see, et nad on oletanud, et see läheb olevat muutuva, kuigi tegelikult see
on konstant.
>> Hea küll, et siin siis sel juhul, me ei täpsustades mingit tulu tüübist.
Me näitame teile, kuidas seda teha et üks hetk.
Aga märgata, et meil on siin lihtsalt kui seisukorras.
Kui gradebook on tühi, mis antud juhul
on lihtsalt vara selle täisarv massiivi, siis välja printida midagi.
Muidu me teeme midagi muud.
>> Päris lihtne siiani ma arvan.
Aga mind peatada, kui teil on mingeid küsimusi.
>> Nüüd on see funktsioon, keskmine, võtab ka mõned argumendid, või pigem üks argument,
mis on gradebook ja seekord läheb tagasi topelt tüübist.
Sest see on arvutustehnika keskmine ja see on
läheb tegelikult tagasi, et arvutatud keskmiselt helistaja liini.
>> Sel juhul me täpsustada tagastustüüpi pärast nool.
Ja see võib tunduda selline imelik alguses.
Sa oled harjunud seadmise tagastamise
kirjutage enne funktsiooni nimi.
Aga kui sa arvad sellest nii matemaatika,
nagu siis, kui sul on matemaatika et määratleda funktsiooni,
teil on funktsioon mõned sisendite ja see toodab väljundit.
Ja see on täpselt see, mida see peaks jäljendama.
Ja seal on mõned teised keeled mis on sarnane süntaks samuti,
kuid ilmselt kedagi, kes olete näinud CS50.
Aga ikkagi ei saa sellest segaduses.
Nool tähendab, mis toimub tagastatakse sel juhul.
OK, nii et kui me läheme arvutada selle keskmist?
Noh, kui gradebook on tühjad, ka siis me oleme
läheb tagasi 0, mis võib olla mõistlik viis käsitleda seda.
Ma ei tea, tulgem tagasi, et natuke.
See ei pruugi tegelikult mõistlik viis
arvutada keskmine, kui meil tühja gradebook.
>> Siis me lihtsalt täita meie liitmise.
Pange tähele, et siin me tegelikult on asendusliige versioon
silmus, mis võimaldab meil kinnitada, üle iga elemendi massiivi
ja pange iga element omaenda muutuja.
Määratledes hinne gradebook, mida me ütleme
on see, et me ei kavatse varjatult luua uus pidevat nimetatakse
klass, mis läheb esindama Iga unikaalne objekt on gradebook
Iga kord, kui silmus itereerib.
Nii esimene kord, see kestab, Koondhinne
esimene element on gradebook.
Teist korda seda tulen Teine küsimus, nii edasi ja nii edasi
kuni gradebook on ammendus elemente.
Siis suudame Kokkuvõttes, et klass meie liitmise muutuja
ja tagasi meie keskmine nagu me oleme näinud.
OK, mingeid küsimusi?
Jah?
Sihtrühm: Mul on kaks küsimust.
Number üks hüpoteetiliselt võimalik sa jooksed täisarv see üks?
Ei pea olema double, on õige?
DAN AMRMENDARIZ: Kas sa korrata, et küsimus?
Sihtrühm: Kas ma saan täisarv keskmisena?
DAN AMRMENDARIZ: Kas sa teha täisarv keskmisena?
Nii tagasi täisarv Keskmiselt selle asemel topelt?
>> Sihtrühm: Return-- sa on, et just nüüd allpool.
DAN AMRMENDARIZ: Siinsamas tagasi 0,0?
Sihtrühm: Jah, just tagasi 0.
Nii et see on kas 80 või 85, kuid mitte 85,2.
>> DAN AMRMENDARIZ: Nii et juhul, nii et pole paar erinevalt
et vastata.
Las ma vastan neile selleks.
Nii et kui ma seda edasi-tagasi 0, 0 on täisarv.
Ja nii, et paneb tüüp viga sel juhul
sest see ootab kahekordne kuid seejärel tagasi täisarv.
Kui ma tahan tagasi täisarv, suudan.
Ma ei määrata tüübi tagastamise int, tagastab 0 siin,
ja ei täida topelt jagamine.
Aga siis me oleks teeme täisarv rajoon.
Ja nii me siis ei saada Keskmiselt et meil oleks võimalik oodata.
Aga jah saame muuta tüübid niimoodi.
>> Sihtrühm: Ja teiseks, sa on üks Double peal.
Aga allapoole, kui sa teha tagasi Double Double,
see on juba automaatselt tagasi Kahe formaadis.
Miks sa ikka vajad seda defineerida noolega peal koos Double?
>> DAN AMRMENDARIZ: Nii juhul, see on osa
of the-- nii korrata küsimust, sest see on kaudne tagasivoolukanalist
tüüpi siin, millist tüüpi see tegelikult on, peame olema selgesõnaline koos Swift
mida me tahame tagasi läbi selle funktsiooni
nii, et kui ta täidab tüüp kontrollida, siis võib olla kindel,
et me oleme tegelikult kirjutatud Allpool on tegelikult vastab, et.
Nii et see on omamoodi nagu check iseendaga omamoodi olukord.
Aga seal are--
>> Sihtrühm: [kuuldamatu] nool?
>> DAN AMRMENDARIZ: On juhtumeid, kui saame täpsustada, et saame kaudselt
tagasisõidu tüübist.
Aga sel juhul, ma ei arvan, et töötaks.
Seal on mõned muud süntaks et me näeme hiljem.
>> Olgu, nii selle allika kood on natuke erinev
sest see korrastab argumente funktsiooni, et me kutsudes.
Las ma näitan sulle, kuidas see toimib enne kui me tegelikult liikuda
mõned huvitavad asjad mis toimub Swift.
>> Nii et sel juhul, kui ma lihtsalt käivitada kood, märkate, et mida ta teeb
on-- samas, et selline annab mulle imelik viga.
Mul on vaja andke seda paar täisarvud käsurea argument.
Vaatame, 150 ja 80, ja vajuta Enter et teada saada, mida see tegelikult teevad.
See nõustudes iga Need väärtused, nagu täisarvud.
See on sisestanud need kokku gradebook.
Ja siis see täidab et keskmine arvutus
ja väljastamiseks, et kui me ootaks.
>> Aga ilmselt seal midagi toimub koos käesoleva tagasilükkamise midagi
midagi nii täisarv.
Nagu te võite mäletate, kui olime tegelevad käsurea argumente
C ja teistes keeltes, kõige esimene 0-nda ühiku et käsurea argument
nimekiri on käsu nime et me tegelikult täidetud.
Nii et sel juhul ma lihtsalt silmukoiminen üle kõik käsurea argumente.
Aga ma ei tee mingit fancy vaadake vahele üle, et esimene.
Ma olen lihtsalt selgesõnaliselt või ma olen kaudselt kontroll, mis seda tüüpi
on täisarvud, enne kui ma tegelikult täidab seda arvutusvõimsus.
>> Ja see on sisuliselt mis toimub siin.
Iga argument Protsessi argumendid,
Ma lähen täita mõned kontrolli.
Ja sel juhul, ma lähen proovida esimene pöördunu
et argumendi täisarv poolt sooritavate selgesõnaline jklle harjunud roll,
sest see on, sisendite, string ja tegelikult ei täisarv.
>> Aga see on selline imelik süntaks, kui lasta hinne võrdub Int (argument).
Mis tegelikult toimub siin on väga
oluline oma kasutades Swift.
See kasutab, mis on nimetatakse vabatahtlikud.
>> Nii et see funktsioon, keskmine (argument), tagasi mitte ainult täisarv, kuid naaseb
mida nimetatakse vabatahtlik täisarv.
Ja nii see on omamoodi tüüpi peal tüüp.
Võite omamoodi ette kujutada seda nagu see tagasi nagu pakett.
Ja kui avate, et pakett, siis kas
on täisarv, mis on tingitud või see on absoluutselt midagi üldse.
Ja see on kasulik veatuvastuse mehhanism, sest sel juhul
saame teada, oli see tüübi muutmise edukas?
Kui see oli, siis see on tegelikult läheb on täisarv sees.
Muidu läheb on mõned väärtus, mis me kutsume null, mis
representatiivsete no täisarv üldse.
See on tõesti midagi ei kujuta.
>> Ja nii see, kui ehitus võimaldab meil lahtipakkimiseks et pakett,
et vabatahtlik siduvad.
Ja kui me suudame lahtipakkimiseks et pakendada ja leida täisarv sees,
siis mida me ütleme Siin on, mida me siis
lubada Väärtuste sisse konstanti nimetatakse hinne.
Ja see osa, kui avaldus ülemine osa on kui avaldus
kestab, sest see Kerige oli edukas.
>> Kui see lihtsalt nii juhtub, et on viga ilmselt
Selles selgesõnaline tüübi muutmise alates stringi täisarv, võibolla
see on väärtus ABC näiteks.
Ja see on tegelikult ei kavatse teisendada täisarv.
Siis naaseb null, mis ei ole täisarv.
Ja see kui avaldus ka siis ei suuda.
hinne ei eksisteeri, sest tal pole täisarv sisu.
Ja see kestab see teine ​​plokk asemel.
Jah?
>> Sihtrühm: Nil on N-I-L?
DAN AMRMENDARIZ: nil on N-I-L, jah.
>> Nii et see on võibolla üks raskem asju Swift,
eriti kui sa oled umbrohi kohta iOS app
ja sa oled tegelikult püüdnud teha mõned arengut seal.
See saab olema karjuma kell teile vabatahtlik.
See saab olema teilt küsimärke ja hüüumärgi.
Aga kui sa aru out-- kui te pühendada aega figuring
mis toimub vabatahtlik tüüpi, saate säästa ennast palju peavalu
kui sa üritad kirjuta rakendust Swift.
>> See on tegelikult väga võimas.
Ja sa pead lihtsalt võtke minu sõna see nüüd.
Aga eks me näeme seda ehitus ja mõned teised, nagu see
mõnedes teistes lähtekoodi, et näitame teile natuke.
>> Kas on olemas esmase küsimus siin?
Nii et oluline Buffee on see, et vabatahtlikud on omamoodi metatype.
See kas on väärtus, ja kui see juhtub, siis
võib-olla, et väärtus on seotud sellega, või siis mitte mingit väärtust,
ja see on esindatud null.
Ülejäänud osa on ehk kui te ootaks.
>> Nii et ramp üles raskusi taas.
Ja seekord, võtame pilk mõned muude andmete tüübid, mida tegelikult olemas.
Üks neist on sõnastikke, mis on väga sarnane Python sõnastikke.
See on mõnevõrra sarnane hash tabelis C. See on sisuliselt kaardistamine võtmed
kus võtmed saab stringe.
Ja kui sa vaatad üles need võtmed, need võtmed on väärtus.
Nii see ei ole päris hulgaliselt, kuid asemel, tihedamalt seotud
hash kaart või hash tabelit.
>> Vaatame, kuidas see peaks töötada, enne kui me tegelikult
minema lähtekoodi ise.
Kui ma lihtsalt käivitada, midagi tõesti juhtub.
See ütleb mulle, et ma ootan mõned parameetrid järgmist tüüpi.
Nii et ma lähen andma see mingi probleem määrata nimed,
nii pset0, võibolla ma sain 100.
Ja pset1, sain 5.
Ja siis on eksam, ma tegi tõesti hästi ja sain 30.
Ja oops, ma tabanud ruumi siin.
>> Kui ma Enter, näed ta täidab mõned arvutamine.
Ta ütleb gradebook on kolm klassid, pset1, pset0, eksam.
Ja gradebook on Selle konkreetse keskmine.
Nii jälle, me töötame Selle gradebook idee,
kuid me kavatseme jätkata iterating keerukusega meie funktsiooni.
>> Nii algusega, me oleme lihtsalt kavatse luua funktsioon, mis
vastutab trükkimine kasutamine.
Ja seal on see exit funktsioon, mis lihtsalt
sunniviisiliselt rakendusest väljuda.
See ei ole midagi, mis siis kasutada iOS app.
See on ainult sel juhul, koos käsurea argument.
Järgmine hakkame liikudes Xcode.
Aga see on spetsiifiline käsk line stiilis programmi Swift.
>> Võtame pilk mõned huvitav asju siin.
Vaatame, ainult paar Huvitavat mainida ehk
on see, et minu ülesanne trükkimine arv klassid,
sa võiks meenutada, et mul oli selles nimekirjas of items-- pset1, pset0 ja eksam.
Võite tegelikult kiiresti ja kergesti seda
võttes gradebook, mis on sõnastik, mis on võtmed ja väärtused.
Leia kõik oluline on läbi dot võtmed meetod siin
ja siis kasuta seda joinWithSeparator, mis siis võta kõik võtmed
et meil oli sisestatud, pset1-- või sorry, pset0, pset1 ja exam--
ja sisud kokku kasutades koma ja tühik
luua üks pikk jada.
See liituda operatsioon on lihtsalt fenomenaalselt kasulikud erinevates kontekstides.
Ja nii see on see joinWithSeparator.
>> Ja see on üks asi, mis on muutunud Swift 1. Swift 2.
Seal kasutatakse olla Python style-- kui sa oled
tuttav Python-- Python stiilis liituda meetodi stringid.
Aga see ei ole enam Juhul Swift 2.
Sa soovid kasutada seda kui sa tahad to concatenate hulgaliselt kraami
koos string.
>> Nii et ehk siis meie arutelu keskmine enne,
see teeb natuke mõttekam meil seada keskmine funktsiooni
olema vabatahtlik topelt pigem kui lihtsalt selgesõnaline topelt.
Kuna meil oli, et ebatavaline seisund, kus,
Mis siis, kui gradebook tegelikult ei ole väärtuste see?
Mida peaks keskmine tootlus?
>> Noh võibolla C teil oleks teinud midagi
nagu on sätestatud valvur väärtus, nagu 0,0 või äkki negatiivse numbriga,
või midagi lihtsalt mis näitab, et seal oli tõrkeseisundi
ja sa võibolla tegelikult ei ole võime arvutada, et keskmine.
Noh ilu täpsustades vabatahtlikud oleks seda teha.
Ja ma nüüd öelda kõik need sõnad, kuid see tegelikult ei kasuta lisareeglite.
Aga me näeme, et just minuti kus saame keskmine
olema vabatahtlik andmete tüübi, nii et kui see tegelikult tagasi mõned andmed, siis
me tagasi, et andmeid.
Muidu me tagasi nil, öeldes, et see
ei ole mõttekas arvutusvõimsus.
>> Jätkame midagi muud.
Nii siit, oleme otsinud Kõik need näited on käsurida.
Aga tõesti, mida sa lähed tuleb tegemist on Xcode.
Ja üks tore asju Xcode on, ja eriti Swift,
on see, et meil on see asi nimega mänguväljak.
Ja mänguväljak on ole üldse iOS app.
Aga see võimaldab teil katsetada koos Swift väga lihtne.
Sa võid kirjutada kõik oma koodi.
See on kenasti süntaksit esile siin.
Kui loote uue faili, siis küsi kas soovid luua mänguväljak.
Aga kena asi mänguväljak on see, et õigus oma akna,
see tegelikult näitab teile väljund koodi.
Nii et kui ma keri, saame näha, mis väljund erinevate rida koodi
tegelikult juhtub olema.
>> Nii et kui me läheme muuta suunas natuke
ja rääkida midagi, mis on tõesti oluline see suur tee
et Swift tegutseb, ja see on see idee sulgemist.
Ja olete ilmselt näinud seda natuke JavaScript.
Neile, kes on CS50, sulgurid
on väga populaarsed, väga hea viis teha kõrge asjad kaasaegsete keelte.
Aga see on ka omamoodi raske wrap oma pea ümber esimest korda.
Nii et kui sa vaatad seda Esimest korda, see on OK.
Lihtsalt vaadata lähtekoodi ja vaata kui te saate aru saada kodus.
>> Nii et kui oletame, et me soovid luua palju eksponendid
mõned fikseeritud väärtus.
Nii et kui ma saan luua funktsioon.
Ma kutsun seda võimu 2, mille ainus eesmärk elus
on võtta mõned sisend ja topelt seda ja tagasi, et väärtus.
Pange tähele, et siin ma olen vastu ühte liiki andmeid.
See saab olla muutuja nimega x.
See on tüüpi Double.
Ja ma lähen tagasi Double siin.
Ja ma olen lihtsalt kavatse teha väga ausalt öeldes päris
naiivne viis kahekordistada selle väärtust.
Ja ma näitan sulle, miks see on kasulik vaid teine.
>> Pange tähele, et meil on siin selles vahemikus uuesti. midagi 1, dot
dot dot, 2, mis tähendab, et see loop kestab kaks korda.
Kuid see on fiktiivne muutuja.
See tähendab, et ma olen tõesti ei kavatse kasuta muutuja kõikjal
sees see loop.
Ma tahan seda joont koodi käivitada kaks korda,
ilma et oleks vaja teada, väärtus selles vahemikus.
>> Nii et kui mul hakkab tulemus korda x korda, mis sisuliselt
tähendab, et ma kvadratuur seda väärtust.
Ja see juhtub töötada ootame.
Power of 2, läbides väärtus 2.0 annab meile väljundvõimsusega 4.
3.2 kehtivus 10.24.
>> Nüüd saame teha sarnane asi võimsus 3.
Aga nüüd muuta ainult vahemikus.
Sest fiktiivne muutuja 1 kuni 3, korrutada 3 korda,
ja teha sama asja.
>> Nii et see võib tunduda veidi kunstlik.
Aga seal on oluline asi siin, mis
on see, et vaadates neid kaks funktsiooni, seal on
ainult üks asi, mis on erinev, mis on selle väärtus vahemikus.
Kõik muu nende kahe funktsioone, võim 3 ja võimsus 2,
on tegelikult identsed, sest nad töötavad samamoodi.
>> Nii sel hetkel, väike häirekella tuleb läheb maha.
Loodetavasti mida sa räägid, tead, see tundub natuke
nagu topelttööd.
Võibolla seal on nii, et ma oleks suutma kapseldada kõiki käesoleva
ja mingit funktsiooni või luua funktsioon, mis
ei täpselt, mida ma tahan, ilma oleks vaja kirjutada seda selgelt.
Ja see on võim sulguri võimaldab meil teha.
Võtame pilk see.
Ja ma veeta paar minutit selle, sest see
on päris oluline Swift.
Me näeme seda kogu aeg.
Me läheme määratleda funktsiooni.
See saab nimetada powerOf.
See läheb vastu võtma parameetrit nimetatakse y tüüpi Int.
Aga kui heita pilk tüübi tagastamise.
Tüübi tagastamise on sulgudes, Double nool Double.
Mis tähendab, et seda funktsiooni, Selle funktsiooni powerOf,
on tagasi funktsioon.
See on vastu Double ja tagasi Double.
Nii et võib tunduda selline hull, kuid olgem keri natuke
ja vaatame, mis juhtub.
Oleme sees seda funktsiooni powerOf.
Loome uue funktsiooni nimetatakse exponentiator,
kuid see ei ole oluline, mis see on.
>> Pange tähele, et see on sisendi väärtuse x.
Ja see võtab kahekohalises ja tagasi Double.
Ja see on sama kood, mis me eespool nägime, ainult et väärtus 2
või väärtus 3, et ülemist piiri, et valik,
on asendatud Selle väärtus y, mis
oli esialgne parameetri Meie powerOf funktsiooni.
Ja sel hetkel, me tagasi exponentiator.
Me tagastamise funktsiooni.
>> See on selline nagu väike meeles puhuriga.
Aga olgem kujutada, mis juhtub kui ma nimetan seda funktsiooni powerOf
ja liigu sinna mingi väärtus, nagu 2.
See tähendab, et Mul on nüüd väärtus
2 y, mis tähendab, et see väärtus y selles exponentiator funktsiooni
on see, et väärtus 2.
Aga ma tagasi selle exponentiator funktsiooni.
>> Nii märkate mida Swift ütleb, et ma loonud antud juhul.
lase ruudu mõiste, see on funktsioon, mis võtab Double
ja naaseb Double.
Olen loonud funktsiooni et väljakud midagi
Kasutades seda süsteemi siin.
Ja tõesti, mis toimub on et ta on tagasi see funktsioon
exponentiator, kuid see väärtus y mähitakse sees on.
Ja nii nüüd iga kord, kui ma seda kasutada muutuja või konstanti nimetatakse
ruudu, see siis läheb käituda funktsioonina.
Ja nii ma saan siis helistada, et muutuja nagu ma kutsuksin funktsiooni,
ja liigu sinna mitmeid, nagu antud juhul 3.
Ja ma siis ruudu seda väärtust.
Nii 3 ruudus siis saada 9, nagu näeme siin.
>> Tõesti hull, kuid see nüüd võimaldab mul võimalus
luua teiste powerOf funktsioone.
Nagu ma ei saa öelda, OK, ka nüüd ma tahan luua uus funktsioon, powerOf (3),
ja hoidke seda arvesse pidev nimega kuup.
Ja nüüd Kuubik saab olema eraldi funktsioon, siis
võtta mingi väärtus sisendina ja kuubi, et väärtust näeme lõpptulemuses
siin.
kuubik 2 läheb kaasa 8.
>> Loodetavasti päris kena kraami.
Sa pole kunagi näinud seda enne.
Ma kutsun teid üles uurima sulgurid ja uurida seda natuke rohkem.
See on tõesti võimas värk näeme palju JavaScript ja paljudes teistes keeltes.
See on tõesti oluline mõista API samuti
et me jõuame vaid teisele.
Jah?
>> Sihtrühm: Kui te seda teete powerOf (2), sulgudes ning seejärel
teise sulgudes teise input-- sa oled põhiliselt asendades ruut.
DAN AMRMENDARIZ: Nii otsima päris viimane siin.
See on tegelikult täiesti võimalik teha aheldamine kui soovitatud.
Nii powerOf (5) tähendab, et me ei kavatse omada exponentiator 5. siin.
Nii et see on sisuliselt saab olema sama asi nagu 4 viienda võimu,
sest me oleme loonud eksponentsimine toimida viienda võimu,
ja me pääsemist mis toimivad väärtus 4.
Ja me saame selle väärtus et ootame 1024.
Sihtrühm: Ja see ei ole nime, nii on lihtsam
lugeda, ruudu iganes.
>> DAN AMRMENDARIZ: Õigus, täpselt.
Nii enne kui ma lihtsalt panna see viiakse konstantse siin nii
et ta tegi seda lihtne kasutada seda nime.
Jah?
>> Sihtrühm: Selles kontekstis powerOf, see on osa
programmeerimiskeelt mitte nii, nagu te
mõtle powerOf on [kuuldamatu]?
DAN AMRMENDARIZ: Nii sel juhul powerOf
on lihtsalt nime funktsioon, et ma määratletud siin.
Nii see ei ole omane et keel ise,
vaid, see on lihtsalt funktsioon, mis on
et nime, sest ma annan selle, et nimi.
Muid küsimusi?
Hästi.
>> Nüüd on see suur.
Aga sa ei kavatse näha palju sulgemise funktsioonid
on selline, kus saab määrata, sees Ühe funktsiooni teise funktsiooni.
Ja sa ei saa seda teha.
Aga see on selline mitte tõesti vaja, eks?
Nagu miks ma määratleda selle funktsiooni nimetatakse exponentiator
ja siis kohe tagasi seda.
Miks ma ei saa lihtsalt kohe tagastab funktsioon?
>> Ja tegelikult, see on täpselt Idee mõiste nimega
anonüümne funktsioone, kus anonüümne funktsioonid tegelikult ei
veel nime, sest nad ei pea olema üks.
Ja nii sel juhul, in 7B, leiame just seda.
See kõik on sama kood, ei täpselt sama asi,
kuid nüüd oleme muutunud veidi nii et see powerOf funktsiooni kohe
tagastab funktsioon.
Pange tähele, et pärast tagasipöördumist, seal on avatud looksulg.
See on oodanud seda input Double.
See on oodanud, et väljund Double.
Ja siis märksõna eraldab koodi ise.
Nii et see on anonüümne funktsioon.
See tegelikult ei ole nime, samas Enne seda kutsuti exponentiator.
Aga nagu me nägime, lihtsalt tõesti ei viidanud exponentiator
väljaspool seda funktsiooni.
Nii et see ei ole oluline.
Nii et see anonüümne funktsioon on Niinimetatud sest see on anonüümne,
kuid seda endiselt kasutada kontekstis seda koodi.
>> Järgmise paari, mida ma olen jätkub loodetavasti
puhub meelt natuke.
Me saame seda veelgi lihtsustada.
Sest nagu oli astutely eespool märgitud,
Võib-olla me tegelikult teame, mida tuletas see kood, mida
väljundi see kood läheb.
Ja tegelikult selles anonüümseks funktsiooni, saame tegelikult järeldada andmete liigid.
>> Nii et üks, me ei ole enam vaja selgelt määratleda
mis tüüpi andmeid, mis kuramuse sisend ja väljund seda funktsiooni
paar põhjustel.
Üks on see, et me oleme määratud, kuni kell prototüübi ümbritseva funktsiooni,
millist tüüpi andmeid anonüümseid funktsioon peaks sisend ja väljund.
Ja teistest, me võib järeldada koodi
siia alla, et me oleme vastu sisend, mis on tüüpi Double
ja tagasi Double.
>> Pange tähele, et meil on siin selgesõnaliselt ei määratletud nimed argumendid
et see funktsioon on vastu.
Ja nii me näeme, saame viidata nende parameetrite abil $ 0, $ 1,
nii edasi ja nii edasi, sõltuvalt arvu, et kasutatud parameetri
Selles funktsioonis.
>> See on midagi, mida te ei kavatse näha palju on see avatud looksulg
määratluse järgneb $ 0, ja siis mõned operatsiooni
ja siis suletud looksulg.
See on anonüümne funktsiooni mis täidab see operatsioon.
See on see parameeter, kus see tüüp on järeldada.
See esimene parameeter on $ 0.
Ja mõned operatsioon juhtub, et $ 0.
>> Sihtrühm: Nii dollari märk tähendab parameetri põhiliselt
ja 0 esimene?
DAN ARMENDARIZ: See on õige.
Nii et dollari märk tähendab põhimõtteliselt parameeter ja 0 tähistab esimene.
Aga see töötab täpsemalt Sel juhul, kui ma ei ole nime
argumendid minu anonüümne funktsioon.
>> Sihtrühm: Kas Perl või midagi on Selle dollari märk, dollar 0 seal?
DAN ARMENDARIZ: Kas mille Vabandust?
Sihtrühm: Kas Perl on Selle dollar 0 dollar 1--
DAN ARMENDARIZ: ma ei ole liiga tuttav Perl,
kuid PHP, mida määratleb muutujad põhineb dollari märgid.
Ja võib esineda keeles mis on funktsioone, nagu see.
Tegelikult Swift laenab palju funktsioone, nagu seda
alates palju teisi keeli.
Me näeme lõhnas Python ta.
See määratlus tüüpi Tundub, et pärit OCaml.
Ja meil on lihtsalt terve hunnik kraami palju erinevaid keeli.
See on üks kena asju Swift
on see, et see võtab palju paremaid ideid kamp keeles
ja shoehorns neid kõiki koos ühte super keeles.
Tegelikult, kui lubate jätkata puhub meelt,
nii et me oleme teinud kõik.
Me võime olla lihtsustab see veidi vähehaaval aru, et muidugi
Swift on eksponentsimine funktsioon sisse ehitatud.
Kui ma importida Darwin, mille on lihtsalt raamatukokku, et
sisaldab seda funktsiooni nimetatakse POW nüüd Võin lihtsustada minu võimu funktsiooni
olema järgmine.
See läheb tagasi see anonüümne funktsioon.
>> Aga vaadake, kui lihtne see on nüüd.
See on anonüümne funktsioon, mis on vastu teatud tüüpi andmete,
ja see saab olema üks argument täpsemalt
Viidatud on 0 $, mis on tüüpi Double.
See läheb tagasi tüüpi kahekordne.
Aga tagastamise avalduse Nüüd on kaudne.
>> Ja see on täpselt sellist stiili, et on väga levinud Swift,
kogu koht.
Me näeme seda kogu aeg Swift.
Nii et ma olen näitab see kõik teile, sest see süntaks.
See on väga levinud näha, mis tähendab seda
on anonüümne funktsioon mis täidab
opereerimine neid argumente.
Ja seal on kaudne tulu.
Nii et see on absoluutselt sama asi meile seda öelda, siin.
>> Kuna see lokkis sulg on funktsioon,
me oleme selle toimingu Esimesel argument.
Me läheme tagasi, et.
Aga see välimine tagasipöördumine tagasi, et kogu funktsiooni,
et kogu anonüümne funktsioon et oleme just loodud.
Muid küsimusi?
Olgu, ma ei tea, kas Te olete selleks valmis,
kuid me ei saa minna isegi segasem koos Swift.
Oled valmis?
OK, see on hea.
>> Nüüd me tegelikult suudavad to, Swift, sest kuidas modulaarse
ja kuidas protokollil põhinevad See on see, määratleda oma freaking ettevõtjad.
Nagu antud juhul ei olnud meil operaator exponentiation-- hästi,
teostamise volitused midagi.
Aga ma ei saa, Swift, määrata uus operaator, et just seda teebki.
Nii et kui seal on kamp süntaks siin.
Ja ma võimaldavad teil vaadata seda kodus, kui te vaatate seda.
Aga me määratleme selle Siseliidete operaator, **, mis seejärel võimaldab meil,
määratledes, mida see funktsiooni ** tegelikult
ei, vastu vasakut kätt pool ja paremal küljel,
ja siis tagasi astendaja et Vasakul pool on paremal pool.
>> Ja nii nüüd äkki ma loonud uue lugeja.
Nii 2 ** 3 tähendab 2 kolmanda võimu.
[Meeles puhuriga SOUND] See mida ise peaks sind oleks nagu,
OK, kruvi C. Ma lähen Swift kogu tee.
See on hea.
See on päris fantastiline.
>> Kuigi see on hea näide.
Aga mul kordagi väljaspool Selle näite tegelikult
määratletud oma operaator.
Aga ikkagi, see näitab palju võimu Swift
ja miks see on tegelikult tõesti väga lahe.
OK, jah?
Sihtrühm: Kui sa oled määratleda oma operaator,
kuidas sa tead, sa ei kogemata proovida ja luua operaator, kes on
aastal kusagil C, nagu peidetud kusagil Swift,
nagu segane üks, mida ei näinud enne.
>> DAN ARMENDARIZ: Nii et kui sa üritad määratleda oma ettevõtjaid,
on oht määratleda üks üle olemasoleva operaator.
See läheb nii üksikasjalikud, et Ma ei usu, et meil on aeg minna üle.
Aga see on risk.
Ja see on tegelikult väga põhjust, miks Ma ei kasutanud Katus tähendab, mis
kui me kirjutades välja võimu, me tavaliselt kasutada 4 väike katus 5 või midagi
niimoodi, just siis, kui me oleme Gchatting semud või mis iganes.
Aga sel juhul, et tegelikult oleks põhjustanud avarii.
Ja nii ma vältida seda lihtsalt sellepärast, Sattusin tea sel juhul
et see põhjustaks et kokkupõrge.
>> Hästi.
Nüüd kahjuks jaoks Viimase seitsme minuti
Mul on hoida puhub Sinu meeled natuke.
Lubage mul teile näidata mõned muud asjad samuti.
>> Me oleme teile näidanud idee võttes neid anonüümseid funktsioone,
Nende sulgemine, mis võimaldavad teil Selline edasi funktsioonid ümber.
Võite neid tagasi.
Võite neid töödelda.
Seda saab teha igasuguseid hull värk.
>> Aga üks asi, mis juhtub olema kasulikud
on võime, vastandina tagastamisel need funktsioonid
funktsioonis, läbida funktsiooni parameetrina muu funktsiooni.
Sa võid mõelda ka, miks Maal ma tahan teha midagi sellist?
>> Noh, oletame, et ma tahan võtta see operaator, et ma
nii palju vaeva, et luua ja rakendada see hunnik erinevaid numbreid
massiivi.
Nii et kui mul on hulgaliselt integers-- 1, 4, 7, 2, 5, 10, 56.
Ja ma tahan, et kahekordistada neid kõiki.
Nii, et me oleks tavaliselt seda teha on lihtsalt kirjutada
lihtne silmus, mis itereerib üle neid kõiki
ja teha mingisugune ruudu operatsioon nende üle,
sisestanud need uued väärtused uude muutuja, või õigemini, uue massiivi siin.
Ja väärtus väljund Tulemuseks on siis kõik need massiivid,
või pigem Kõigil neil elementide nüüd ruudus.
>> Ja me võiksime teha sama asi cubing see,
kuid veidi häirekella peaks minema välja
öeldes, et äkki seal on kuidagi, et meil oleks
suutma seda lihtsustada natuke.
Ja tegelikult on.
Mis siis, kui me võiksime luua funktsioon, mis võimaldab meil
aktsepteerida, sest kiskja, funktsioon?
Nii et sel juhul võtta vaadata neid argumente.
Me läheme vastu nimekirja kahekordistub.
Ja siis me läheme vastu funktsioon
muutujale nimega f, mis toimub võtta Kahe ja tagasi Double.
Ja kogu toodangust kogu selle funktsiooni
nimetatakse kaardistajale läheb tagasi massiivi nimetatakse topelt.
>> Mis see siis lubage mul teha on korrata üle, et nimekirja
ja teha sama asja, kuid nüüd kohaldatakse selle funktsiooni igale
Üksikute väärtuste selles nimekirjas.
Nii et ma tõesti ei tea, mida f on.
Ei ole oluline mulle.
Aga nii kaua kui vaja kahekohalises, täidab mõned operatsioon seda,
ja siis tagastab Kahe, ma oleks siis
suutma kaardistada selle funktsiooni üle iga element nimekirjas.
>> Ja seda tüüpi programmeerimine nimetatakse kõrgemat järku funktsioonid,
kus me möödaminnes funktsioonid umbes nagu parameetrid
ja asju funktsioonidega.
See on omamoodi nagu võttes kõik need ideid, mida me oleme õppinud CS50
ja võttes neid omamoodi ja edasi järgmisele tasandile.
Ja see kõik on CS51 stiilis asju.
Ja nii me sügavuti minna rohkem klassides niimoodi.
>> Kuid sama kehtib ka siin oluline, sest me
vaata palju funktsioone mida kasutatakse Swift
et sisuliselt ei see, kus me oleme
mõned numbrid, mõned hulga numbrid.
Me läheme edasi, et massiivi meie kaardistajale.
Ja me ka läheb edasi mõne funktsiooni, mis
me oleme juba määratletud siin.
See saab olla kandiline.
Ja me läheme siis ruudu kõik need numbrid
ja hoidke, et sellesse tulemus siin.
>> Nii sel juhul oleme määratud meie oma funktsiooni nimetatakse kaardistajale.
Aga see täpse asi on, tegelikult ehitatud Swift.
On erinevaid funktsioone nimetatakse kaart.
Seal kaardil funktsiooni, seal on vähendada funktsiooni,
ja seal on filter funktsiooni, mis sisuliselt kohaldada funktsioonid
et iga element loetleda neid muuta mingil moel.
>> Sihtrühm: Nii, kuna sa muudavad andmed teise formaadis
läbi funktsioon--
DAN ARMENDARIZ: Right.
Jah, nii funktsioon et me vastu
muudabki andmed mingil moel.
Sel juhul olime kas kvadratuur, või olime cubing see,
või tõesti, me võiks täita no operatsiooni seda üldse.
>> Aga las ma näitan teile siis kuidas seda läheb otsima praktikas.
Ja jälle, ma töötab natuke aega. et ma ei ole
saab olema võimalik minna üle kõik lähtekoodi siin üksikasjalikult.
Aga ma kutsun teid üles seda tegema.
Saadame see niipea, kui võimalik pärast seda rääkida.
>> Aga kui te võtate pilk sellele, eeldada, et meil on nimekiri numbrid,
massiivi numbrid selles muutuja nimega numbrid.
Siis me tahame teha seda filter operatsiooni need numbrid.
Nii filter on kõrgem Et funktsioon, mis
nõustub massiivi ja ka funktsioon.
Ja iga element, mis massiiv, ta täidab seda ülesannet.
>> Kui see funktsioon tagastab Tõsi, see hoiab selle objekt.
Kui see funktsioon tagastab false, ta viskab ära, et objekti.
Ja siis ta tagastab nimekirja mis seejärel moodustasid kõik
on need teemad, mis on filtreeritud.
>> Nii ehk teisiti, on see sama mõte on gradebook.
Meil võib olla mitmeid klassid sellesse väärtus ehk numbrid.
Võiks olla 100 ja 70, ja 40, nii edasi ja nii edasi.
Mis see filter ei on teate et see on see, et süntaktiline suhkur
anonüümse funktsiooni.
See on anonüümne funktsioon öelda et parameeter, et ma olen vastu
saab olema, kui see on suurem kui 70,
siis naaseb tõsi, mis tähendab, et selle objekti hoitakse selles filter.
Nii olgem natuke konkreetsem sellest.
Kui mul on see massiiv numbrid ja see koosneb 100, 70 ja 40,
Ma täita see filter operatsioon igaüks neist.
Nii et esimene on see väärtus 100.
100 suurem või võrdne 70 On tõsi, mida
tähendab, et 100 hoitakse Selle uue koopia massiivi.
70 läbib ka.
Aga 40 ei ole.
Mis siis tagastatakse passingCount on massiivi elementide 100 ja 70--
100, koma, 70.
Need olid vaid kaks objekte, mis on peetud.
Ja nii põhjus, miks ma kiiresti läks läbi palju neid mingi kõrge, et
asjad on, sest see on see, et ühise asi, näete Swift päris
sageli, täidab opereerimine kasutades anonüümseid funktsiooni süntaks.
>> Seal on mõned lahedaid asju.
Lülitid on tõesti võimas Swift, Ma mõtlen nagu hull, hull võimas.
Võite kasutada lüliti, ja saab tegelikult kohaldada neid
vahemikkudele, mis on selline hull, ja teha fancy midagi sellist.
>> Kuid viimastel minutitel, Ma tahan, et liikuda edasi päris palju
ja näidata kindel näide sellest, kuidas saame luua iOS app kasutades Swift.
Nii et kui sa teed see, sa pead võtma
pöörama at-- Apple'i dokumentatsioon, nad
on palju väga head õpetused luua oma esimese taotluse.
Ja ma kutsun teid üles tegema et kuna nad teid
kõik sammud, mida täpselt kliki luua iOS rakendus.
>> Aga siin on meil see iOS app.
Ja see on päris lihtne app tõesti.
Kui ma saan seda, las ma näitan sa kuidas see välja näeb.
Kõik see sisuliselt ei ole see tõmbab internetist JSON faili
et olen salvestatud serverisse.
Ja et JSON faili määratleb pilte, mis võimaldab
ma siis tsükkel läbi, minu app, pilte minu veebiserver.
>> Nii et mul on siin getNextImage.
See laeb pildi Internetist, ja siis kuvab selle ekraanile.
>> Nii et see on üsna lihtne.
Aga eesmärk on näidata, kuidas saame kombineerida asju
Viimasest nädalatel CS50 arvesse tegelik iOS rakendus.
Teisisõnu, ehk üks asju, mida sa teha tahad
on, et iOS rakenduse ei tõmba andmeid internetis
ja näitavad kasutajale teatud informatsiooni.
See on täiesti punkti Selle lähtekoodi siin.
>> Nii et on palju räägitud kuidas teha tegelik iOS arengut.
Seal on palju hull süntaks et me ei ole näinud päris veel
nagu klassi, mida klassi tegelikult on.
Me saame suuresti tähelepanuta et praegu.
>> Aga märgata, et meil on sisaldanud selle erinevaid asju
et me oleme juba näinud, nagu funktsioone, mis on konkreetsed nimed.
Ja kui me anname neile toimib õige nime
et oodatakse iOS, tegelikult see tundub natuke maagiline.
Aga kui loote iOS rakenduse, siis
on konkreetne funktsioon, mille nimi on pandud telefoni ise
kui rakendus käivitub proovida luua protsess, mis tegelikult
jookseb oma taotluse.
Nii uuesti, seal on palju asju, mida ma on ilustada siin, et meid
rääkida sellest täpsemalt.
Aga ma kutsun teid vaatama võibolla Teisest iOS seminar, kuid ka mõned
õpetused Internetis mida teha palju paremini kirjeldada
konkreetset teavet.
>> Aga me näeme paar asja, mis on huvitav koodi siin.
Pange tähele, et meil on, kui avaldused.
Muide, üks oluline asi, kui avaldused
seisneb selles, et sulgudesse Loogiline väljendus on vabatahtlik.
Aga looksulg ei ole kohustuslik, ükskõik kui vähe või palju ridu koodi
sul, kui avaldus.
Sa ei saa olla, kui avaldused ilma looksulg Swift.
>> Ja see on, noh, omamoodi rumal.
Aga seal on ajalooline põhjust.
See peaks säästa ennast.
Nagu see näiteks, siis ei saa kõrvaldada looksulg ümber, et
kui avaldus.
Need on tegelikult vajalik.
Nii et ma kutsun teid üles heita pilk see.
Aga seal on veel üks ehitada, et ma tahan
näidata teile Swift, et on uus Swift 2.0 võrreldes
et vanemad versioonid Swift, mis on järgmine.
Vaatame, kuhu ma selle panna siin?
>> Nii see funktsioon nimega fetchJSON, see funktsioon
vastutab tõmmates, et JSON faili URL, mida lihtsalt nii juhtub
töötavat minu CS50 IDE.
Ma lihtsalt hakkasin Apache, panen JSON faili seal,
ja ma olen võimeline tõmmake et andmete edastamiseks Interneti kaudu
Selle funktsiooni ja selle URL, mis on varustatud telefoni teel.
See osutab raamatukogu, mida saate kasutada, kui
sa teed mõned iOS app arengut.
>> Pange tähele siin, et seal on see ebatavaline süntaktiline konstruktsiooni nimetatakse valvur.
Ja tõesti see kõik on Swift on võimalus kontrollida
et mõned asjad on täidetud, enne kui
jätkata ülejäänud funktsiooni.
Nii et ma võiks olla, kasutades Selle vabatahtlikud,
Ma oleks leidnud URL poolt töötab see NSURL funktsiooni
ja hoidmine, et arvesse URL pidev ja seejärel kontrollida
et näha, kas URL oli null, sest see läksin tagasi valikuline tüübist.
Ja kui ta oli null, siis ma välja printida viga ja siis tagasi.
>> Kuid selle asemel, mida valvur laseb meil teha on, et väga asi,
aga tagada, et see on tegelikult nii, et url
on nõuetekohaselt määratud NSURL.
Ja kui on, siis see ignoreerib üle selle, ja seda
mis võimaldab teil jätkata url olles nõuetekohaselt määratletud.
Aga kui see on nii, et url ei ole korralikult määratletud,
kui see tagastatakse veateade või mõne muu ootamatu asi
tegelikult toimub, see valvur ehitada võimaldab meil siis väljund, mis viga
ja kohe tagasi.
Jah?
>> Sihtrühm: Nii et see on omamoodi ja nagu, kui siis veel?
DAN ARMENDARIZ: See on selline nagu kui siis muidu, jah,
ainult et selle url on siis määratletud kõike alla selle.
Kui see läbib selle valvur, siis tegelikult täidetakse andmed
ja kasutatavad ülejäänud lähtekoodi oma funktsiooni.
Nii et ma arvan, et sa lähed hakkame nägema selle valvur samuti.
Ja olla tähelepanelik, et.
>> Nii lihtsalt vaadates paar muud asju, see siin on, mida,
Mis sa arvad, lihtsalt selle põhjal, mida me rääkisime enne?
>> Sihtrühm: Arvan, et see läheb jooksuks nimekirjas?
>> DAN ARMENDARIZ: Nii et lähedal.
See on funktsioon, mida me määratleme.
Ja meil on sisestanud, et funktsiooni argumendina see funktsioon siin.
>> Sihtrühm: [kuuldamatu] kui mitte olematu.
Nii et see on nimekirjas, eks?
>> DAN ARMENDARIZ: Kui viga ei ole null, nii et on-- nii et ma pean kerida.
Noh, vaatame, ma ei saa tõesti leidke siin.
viga on argument, mis on hetkel edasi anonüümseid funktsiooni.
See on anonüümne funktsiooni.
Tal ei ole nime.
Aga me oleme vastu need kolm argumente, andmed, reageerimine ja viga.
Ja ta läheb tagasi kehtetud, nii ta ei kavatse tagasi midagi.
Ja see on sisu Selle funktsiooni.
Ja siis on meil juurdepääs sees, et funktsiooni kõik need väited.
>> Nii et see on tuulispask Tour keeles.
Aga ma loodan seda, loodetavasti te võtate
pilk mõned õpetused konkreetse iOS arengule kiire,
eriti kui sa lähed Apple arendaja web page--
nad on palju väga hea õpetused, millest võite alustada.
Aga loodetavasti just seda tunnis rääkimise umbes süntaks on ise
sa piisavalt, et alustada sellega.
>> Avaldame kõik see allikas kood seminar kodulehel
võimalikult kiiresti ja ka slaidid nii et teil on eeskujuks kõigile neile.
Aga edu sulle oma projekte.
Ja tänan teid kõiki väga varsti.
>> [APPLAUSE]