>> [Muzika]
>> DAN AMRMENDARIZ: Gjithkush, mirëpritur të seminarit CS50,
iOS App Development me Swift.
Unë jam Dan Armendariz, dhe unë jam një preceptor e shkencës kompjuterike këtu në Harvard.
>> Dhe orën e ardhshme do të jetë një turne shakullinë e sa më shumë gjëra
në lidhje me këtë temë si ne mund të përshtatet.
Unë do të postoj të gjitha të kodit burim që ju do të shihni sot në internet.
Ne mund të mos jetë në gjendje të në fakt shkojnë mbi gjithçka
se unë jam që jam duke treguar se në këtë orë.
Por të paktën shpresojmë se përmes komentet e kodit burim,
ju do të jetë në gjendje të përpiqen të kuptoj se çfarë pikërisht po ndodh për ato gjëra
se ne nuk mjaft të marrë për të.
>> Në përgjithësi, struktura e flasim e sotme do të jetë si më poshtë.
Ne do të filloni duke bërë disa shërbime bazë Sintaksa me gjuhën Swift,
që shkon në disa nga më të avancuar Sintaksa e gjuhës Swift.
Për shkak të gjuhës është me të vërtetë moderne dhe atë
ka një shumë të nivelit të lartë karakteristika, gjëra që ne nuk kanë
parë në C gjatë CS50, ose edhe disa gjuhë të tjera
se ne kemi filluar përdorur në CS50 si PHP,
kështu që unë do të duhet të përpiqen për futur edhe disa tema që
janë të lidhura me gjuhë të nivelit të lartë që ju nuk mund të shihni në thellësi në CS50,
por ju do të shihni në më vonë klasa shkenca kompjuterike.
Kështu ajo do të jetë një mbushur fort orë.
Dhe ju lutem mos ngurroni të më lejoni të e di nëse keni ndonjë pyetje.
Pra, nëse ju jeni të interesuar duke bërë të zhvillimit
me Swift, apo me të vërtetë ndonjë zhvillim iOS app,
ka disa prej kërkesave.
Para së gjithash, ju duhet të jetë duke përdorur një Mac, drejtimin në shembujt
se ne do të jetë duke përdorur sot, një version i ri i OS relativisht
X. Në këtë rast, unë jam duke X 10.5.
Ju mund të konkurrojnë 10.11 në qoftë se ju dëshironi.
Por çdo gjë që ju jeni do të shikoni është përfshirë Xcode 7 dhe më vonë,
e cila ka versionin më të fundit i Swift, e cila është Swift 2.0.
Kjo është në fakt një goxha dallim i rëndësishëm.
Një shumë e sintaksë ka ndryshuar goxha të konsiderueshme
në disa raste nga Swift 1.0, i cili u lirua vitin e kaluar,
për Swift 2.0, e cila sapo doli këtë vjeshtë.
Pra, ne jemi duke shkuar për të treguar Swift 2.0.
Një shumë prej gjërave që ju kërkoni për internet
kur jeni duke u përpjekur për të marrë shtesë informacion në lidhje me një shumëllojshmëri të gjëra,
ju mund të dëshironi të qartë kërkoni për Swift 2
sesa Swift thjesht e vjetër për të bërë i sigurt që ju të merrni sintaksa e saktë.
>> Në fakt, kjo është përgjithësisht e vërtetë.
Ka një sasi të shpejtë të zhvillimit ndodh në gjuhën Swift
qysh Apple lëshuar atë, unë mendoj çfarë, kjo është pak më shumë se një vit
tani.
Dhe gjërat kanë ndryshuar në mënyrë dramatike në atë kohë.
Dhe kështu që nuk do të jenë të frustruar në qoftë se, kur ju jeni duke kërkuar rreth e rrotull
për tema mbi Swift apo si për të përmbushur diçka duke përdorur një kod shembull
apo diçka që ai nuk ka aktualisht punojnë në Swift 2.0.
Sigurohuni që ju jeni duke kërkuar në mënyrë specifike për këtë version
të përpiqen për të minimizuar efektet e ndryshme versionet dhe ato llojet e gjërave.
>> Unë do të përpiqemi për të nxjerr në pah vetëm disa gjëra që janë të ndryshme për versionet më të vjetra.
Por kjo është diçka për të parë për.
Kjo ndoshta do të jetë një nga dhimbje koke mëdha
që ju do të keni me Swift është gjetur shembull kodin që është më i vjetër, madje edhe vetëm
nga disa muaj, duke u përpjekur për të përdorur ajo në projektin tuaj më moderne.
Dhe kjo thjesht nuk funksionon.
Ju jeni marrë gabimet e përpiluesit, sintaksë Gabimet, të gjitha llojet e gjëra të çmendur.
Pra, vetëm të jetë i durueshëm me se, dhe ju do të shpresojmë se
kanë një përvojë mjaft të bukur me Përgjithësisht Swift.
>> Tani ju mund të vërtetë join-- dhe unë shpresoj ne fakt ende kemi këtë këtë year--
Apple App CS 50- Ekipi i zhvillimit, i cili
do t'ju lejojë të instaluar ndonjë Apps që keni krijuar në pajisjet tuaja iOS.
Pra, të marrë një sy në këtë URL nëse ju jeni të interesuar për të bërë atë.
>> Pra, vetëm një çift i gjëra në lidhje me vetë Swift.
Ajo është një gjuhë hartuar.
Por ju do të shihni se disa nga tiparet që ne përdorim
të lejojë atë që do të përdoret edhe në një grimë si një mënyrë e interpretuar si.
>> Një shumë e sintaksë është e huazuar nga C. Është e bazuar dhe e shkruar në C.
Dhe kështu që ne do të shohim se ka shumë të takeaways
nga njohuritë tuaja ekzistuese nga C që ne mund të portit të Swift.
>> Por ka gjëra që e bëjnë atë shumë të ndryshme nga C.
Ajo është e shtypur shumë i fuqishëm.
Ka menaxhimit automatik kujtesës.
Ju nuk jeni do të duhet të përdorin malloc apo kudo të lirë.
Është projektuar për përgjithshmërinë.
Pra, me fjalë të tjera, ju mund ta përdorni atë në të gjitha llojet e konteksteve, nga Apple Watch
për iPhone të gjithë rrugën deri në OS X, dhe edhe disa servera, madje disa scripting.
Por ne do të shohim se mbështetje për të shkruar
nuk është mjaft ende atje si ajo është në gjuhë të tjera.
Pra, ka shumë të ngjarë që ju do të jetë duke përdorur kjo ekskluzivisht për zhvillimin
në Mac tuaj apo iPhone tuaj.
>> Dhe ajo ka shumë karakteristika moderne.
Dhe shumë nga këto gjëra janë gjëra që ne jemi duke shkuar për të përpiqen për të trajtuar sot,
por edhe tema tanë që sinqerisht, ne mund të kushtojnë kurse të tëra.
Në të vërtetë, CS 51, i cili është ofruar semestër tjetër,
fokusohet shumë në këto tema që janë përshkruar më poshtë.
Kështu që ju mund të kaloni një semestër të tërë kuptuar këto gjëra.
Por, ne jemi duke shkuar për të provoni për të marrë nëpërmjet tyre
të paktën të mjaftueshme që ju mund të kuptojnë se çfarë është
ndodh kur ju shikoni në një program Swift
dhe të jetë në gjendje për të kollitem në rrugën tuaj përmes saj për projektin përfundimtar.
>> Tani një nga mënyrat më të mira që ju mund të të marrë informacion shtesë mbi këtë
është sinqerisht vetëm përmes Apple siguruar dokumentacionin për Swift.
Nuk është një shumë e TV që janë në dispozicion.
Dhe kjo është një bazë e mirë në shtëpi për ju për të kërkuar, gjëra të veçanta që ju
doni të bëni me një API që përfshin iOS.
Nëse ju doni të përdorni kamerën për shembull, ju mund të filloni duke kërkuar këtu,
dhe të përdorë gjithashtu edhe Google dhe rafte Overflow si ju do normalisht.
>> Çdo pyetje mbi këtë para se të hidhen të drejtë në?
Në rregull.
Le të lëvizë.
>> Pra, së pari, unë kam një Numri i dosjeve shembull.
Dhe unë jam duke shkuar për të përpiqen për të rritur përmes tyre relativisht shpejt.
Kjo është skedari Hello World për Swift.
Është shumë e thjeshtë.
Nuk ka mënyrë më shumë komente se ka kodin aktual.
Njoftim kodi aktual është në fund shumë on line 14.
Ajo thotë shtypura.
Dhe pastaj kjo është një thirrje funksion.
Ne jemi duke kaluar në të një string quajtur Përshëndetje CS50.
Vini re se nuk ka pikpresje.
Vini re se nuk ka int main.
Nuk ka asnjë nga cruft që kemi pasur me C.
Kur ne jemi duke përdorur Swift në këtë mënyrë, e cila është vetëm e shkruar në një skedar teksti
dhe ruhen në kompjuterin tim, atëherë Unë mund të përpiloni atë dhe drejtuar atë.
>> Vini re që këtu unë jam i mos përdorur IDE CS50.
Kjo supozon se unë jam drejtimin dhe që unë jam në OS X,
dhe se unë kam Xcode tashmë të instaluar në këtë makinë në mënyrë që kjo
në fakt funksionin.
Por kjo është vetëm një skedar normal teksti që ne pastaj mund të përpilojnë dhe të redaktoni.
Pra, le të shohim se si kjo në fakt funksionon.
Çka nëse unë dua të përpiloni atë?
1.swift swiftc.
Pas një moment ose dy, ajo do të shihni se ne kemi tani
hartuar këtë në një skedar të quajtur 1.
Dhe tani ne kemi shtypur CS50 tonë, kërkesa jonë Hello World vend.
>> Vini re një gjë tjetër si mirë është se në mungesë,
ne nuk kemi të dhëna A / n për të shkruar një linjë të re.
By default, funksioni shtypura në Swift do të shtypura një linjë të re për ju.
Ju mund të kalojë një shtesë fakultative parametër për të të treguar se nuk duhet të bëni kështu.
Por Google për më shumë informacion mbi këtë.
By default, ajo do të bëjë vijën shtypura.
>> Të gjithë të drejtë, kështu që le të lëvizë pastaj për disa gjëra të tjera.
Pra, si mund të vërtetë të përcaktojë variablat?
Ne mund ta bëjmë këtë është duke përdorur një prej dy metodave.
Dhe ai që unë dua të ju them për të parë është ky definicion le.
Dhe kjo është e rëndësishme sepse në mënyrë efektive
ajo që ne jemi duke bërë është përcaktuar një konstante.
Ne do të krijojë një ndryshore, ose më mirë një e quajti konstante,
japë atij disa data-- në ky rast, string Dan.
Por duke përdorur këtë le fjalen, ne jemi duke thënë
se kjo variable-- ose përsëri constant-- quajtur
Emri nuk do të ndryshohet.
Ajo do të jetë i pandryshueshëm gjatë gjithë kohëzgjatja e këtij programi
ose në të gjithë kohëzgjatja e kontekstit
se kjo variabël është në dispozicion.
>> Kjo është me të vërtetë e rëndësishme që kur ju keni disa të dhëna që nuk është
do të ndryshojë në programin tuaj, dhe ju do të shihni një shumëllojshmëri të shembujve
kur ne duam të përdorim le kundrejt sintaksë tjetër,
është e rëndësishme që ju përdorni le kudo që të jetë e mundur për shkak se këtë njofton
gjuha që ajo është nuk do të ndryshohet,
dhe kjo në fakt mund të kryejnë një shumë e optimizim
për të përmirësuar shpejtësinë dhe sigurinë e programit tuaj.
Dhe me siguri, unë nuk do të thotë le të përplasje ajo me gabime çmendur
që ne mund të jetë mësuar të shohim në C.
>> Atëherë ne mund të përdorim varg interpolation për të përmbledhur këtë në një varg.
Pra, ne mund të shohim në këtë Linja të shtypura, të shtypura hello,
dhe pastaj duke përdorur backslash parens të hapura, dhe pastaj emrin e variablit tim,
në këtë rast konstante, mbyllur kllapa.
Unë jam në thelb pastaj të vënë Përmbajtja e kësaj ndryshueshme quajtur emër
brenda vargut dhe pastaj shtypjen rezultatin atje.
>> Ka një ndryshim tjetër në këtë skedë që është se unë kam, në krye,
vënë në një linjë mesele, e cila në thelb vetëm specifikon
që unë dua për të përdorur Përkthyes Swift, e cila
do të thotë se unë nuk kanë më të hartojnë këtë program të veçantë.
Unë vetëm mund të kandidojë atë si shkrimit të saj.
Por kjo është, në këtë rast, pas skenat duke u hartuar dhe pastaj
duke u drejtuar.
Është vetëm e padukshme për ne.
>> Të gjithë të drejtë, kështu që le të lëvizë.
Pra, ka pak dredhi që ka ndodhur vetëm para.
Ju kam treguar se unë mund të përcaktojë një konstante.
Dhe unë mund të sigurojë disa të dhëna për të bërë atë.
Por në këtë rast, vini re se unë nuk e bëri në fakt të specifikojë llojin e të dhënave
që është.
Dhe kjo është për shkak se përpilues, Swift mund të
tregoj tipin e të dhënave të bazuar vetëm në të dhënat që kam vënë në të.
Për shkak se ajo e di se duke vlerësuar këtë ndryshueshme të drejtë këtu, kjo e drejtë e të dhënave
këtu, ajo e di se ajo është një varg.
Dhe kështu që ky emër konstante për këtë arsye është do të jetë një varg si.
>> Por ne gjithashtu mund të jetë i qartë rreth llojit që është
ne do të përdorim për konstantet ose variabla
duke përdorur këtë sintaksë instead-- le String emri i zorrës së trashë është e barabartë me
Dan, e cila në këtë rast do të thotë që ne jemi do të përcaktojë një quajti konstante.
Ajo do të jetë e tipit String.
Dhe vlera do të jetë Dan.
Tani mënyra të tjera që ne mund të krijojmë variables--
dhe këto janë variabla të ndryshueshme, të cilat do të thotë se ne jemi, në fakt, duke shkuar
për të ndryshuar përmbajtjen e tyre diku në kohëzgjatjen e kontekstit
se kjo variabël është defined-- ne përdorin fjalen var në vend të le.
Por përsëri, si parazgjedhje, nëse nuk e dini që ju duhet për të manipuluar që të dhënat,
përpiqen të përdorin le për përmirësime të performancës.
>> Në këtë rast, unë mund pastaj të specifikojë llojin e të dhënave
që ne presim që të jetë brenda ky variabël i ri i quajtur emërtim.
Ajo do të jetë një varg.
Dhe ne jemi duke shkuar për të pastaj lidh Dy vargjet bashku, string hello,
dhe string përfaqësuar nga ndryshueshme, ose më mirë emri konstante.
>> Pra, kjo është e bukur, sepse kjo është disi PHP si në atë që ne
kanë shumë të lehtë varg string.
Ne nuk duhet të automatikisht përdorin çdo lloj të menaxhimit të kujtesës
për të rritur madhësinë dhe të bëjë çdo lloj gjëra funny atje.
Kjo punon si ne faktikisht do të presim.
>> Të gjithë të drejtë, ndonjë pyetje mbi këtë?
>> Tani arsye tjetër që ne kemi nevojë për ju keni mundësinë për
të jetë në gjendje për të përcaktuar se çfarë tipi i variablave të dhënave janë
është për shkak se nganjëherë ne nuk e bëjmë dua të nisja variablave
me disa të dhënave në Pika e përkufizimit.
Pra, në këtë rast, le të themi që unë dua të fillojë inputting
disa notat në një libër të klasës.
E pra unë e di se një nga Variablat që unë dua të jem
do të jetë një notë ndryshueshëm.
Dhe ne gjithashtu e dimë se ne duan që ajo të jetë një numër të plotë.
Por ndoshta ne nuk e bëjmë akoma kanë që klasën në dispozicion.
>> Në Swift, ju duhet të përcaktojnë llojin e të dhënave
që është i lidhur me një ndryshueshme ose një le të vazhdueshme
para se ju mund të vërtetë përdorin atë ndryshore.
Për shkak se ajo është e shtypur me forcë, ju duhet të shoqërojnë një lloj
me këto variabla.
>> Pra, në këtë rast, në qoftë se unë nuk e kam si duhet inicializohet i pari me disa vlera,
atëherë unë duhet të them se çfarë Swift Unë pres lloji të dhënave të jetë.
Dhe ajo do të mbetet që i njëjti tip të dhënat e
të gjithë historinë e këtij programi.
>> Tani ju mund të joshet sa më shpejt që Unë kam krijuar këtë variabël klasën
dhe me kusht atë një numër i plotë i 100, tani, nëse unë
duan të përpiqen për të lidh një varg me këtë numër i plotë,
mund të joshet për të përdorur ende se operatori string varg
si ne e bëmë vetëm disa rreshta para.
Por për fat të keq, ky fakt nuk do të
punë, sepse ju jeni në thelb kryerjen
një operacion në dy lloje të ndryshme.
>> Tani kjo është shumë e ndryshme nga tjetri gjuhë si PHP cilat janë me të vërtetë
Budalla loosey me lloj e tyre të llojeve.
Ata janë ashtu si, vërtet, çfarëdo, Unë nuk e kujdesit.
Vetëm më jepni një lloj, dhe ndoshta unë do të bëj gjënë e duhur.
>> Në këtë rast, Swift është jashtëzakonisht të rreptë në lidhje me llojet
që ju jeni marrë me.
Ky operator përmbledhje apo operatori varg
ka në thelb një çift të opsione të ndryshme të mundshme.
Ju mund të bëni përmbledhje me integers, ose
mund të bëjë string varg, dhe ndoshta disa gjëra të tjera si edhe.
Por në qoftë se operatori nuk e njeh ajo që është në të dyja anët e saj,
ose më mirë kombinimi i atyre dy lloje, nuk është ajo që është pritur,
atëherë ajo do të shkaktojë një dështim.
>> Pra, në këtë rast, çfarë do të thotë të ketë një varg plus një numër të plotë?
Edhe në kontekstin e këtë, ne ndoshta do të doni
për të bërë një operacion string varg.
Por sigurisht kompjuteri nuk kanë atë lloj të kontekstit.
Dhe kështu që ne kemi nevojë për të siguruar se informacioni shtesë
për të le të dini se çfarë është se ne duam të bëjmë.
>> Pra, me fjalë të tjera, fakti se Swift është shtypur me forcë
do të thotë që ju duhet të bëni një pak punë shtesë
për të marrë atë për të vepruar mënyrë që ju do të duan.
Por si rezultat, është më e sigurt.
Dhe një herë ju keni marrë parasysh ato lloje,
gjëra vetëm sinqerisht të fillojë për të punuar mjaft mirë.
>> Pra, në këtë rast, ne atëherë do të kryejnë string varg
duke hedhur në mënyrë eksplicite numër i plotë në një varg
nga ambalazhi atë në këtë Kapitali funksion S String,
dhe pastaj duke përdorur varg string Operatori për të ndryshuar variablin tonë etiketë,
dhe pastaj të shtypura it out.
>> Deri më tani, në mënyrë të mirë?
Të gjithë të drejtë, le të lëvizë.
>> Tani ka një shumëllojshmëri të të dhënave Llojet që ne mund të përdorin në Swift.
Siç e keni bërë për të mësuar, ne mund të krijojë një rrjet të ndryshueshëm.
Dhe kjo array mund vetëm përmbajnë një lloj të vetëm.
>> Pra, në këtë rast, ne jemi duke shkuar për të krijuar një vargjeve të ndryshueshme e integers, të cilat
ne do të thërrasë nota, dhe ne do të jetë në gjendje për të ruajtur se në këtë grupim katror
format si ju kam rritur të mësuar për në një shumëllojshmëri të gjuhëve të tjera.
Por vini re se ne jemi këtu përcaktimin e disa gjërave.
notat është një variable-- i ndryshueshëm ne nuk e përdorin fjalen let.
Kështu që do të thotë që ne pastaj mund të modifikoj Përmbajtja e kësaj grup.
Ai është i tipit Array Int, dhe ne mund të them se
bazuar në këto kllapa katrore këtu.
>> Tani një nga gjërat e bukur në lidhje me këtë është se ne
kanë qasje në një shumë të informacion shtesë
për grup vetëm duke përdorur disa thjeshtë dot simbol.
Kështu për shembull, grades.count siguron për ne
numri i artikujve që ekzistojnë në atë grup, të cilat ne pastaj mund të hyni goxha
lehtë thjesht duke përdorur atë dot simbol.
>> Nëse ju doni të shtoni shtesë Artikuj në këtë grup,
ju nuk mund të bëjë stilin PHP ku ju vetëm në mënyrë eksplicite të përcaktuar,
në një indeks të caktuar, disa vlera që ju doni të futur.
Në vend të kësaj, përdorni append metodë në llojin array
për të append atë artikull, 95, në këtë listë.
>> Deri tani ky grup ka në vijim contents-- 100, 0, 90, 85.
Dhe tani ne kemi bashkangjitur 95 për të se si.
>> Ka mënyra të tjera ne mund të append gjëra.
Ju mund të përdorni të vërtetë një operator përmbledhje,
e cila do të interpretohet si një operacion grup append.
Dhe pastaj ju mund të append një tjetër array, përmbajtja e të cilit janë 70 dhe 80,
për këtë grup.
Deri tani ne kemi Përmbajtja në këtë variabël
grades-- 100, 0, 90, 85, 95, 70, dhe 80.
Kjo është vetëm një sintaktik bukur pak sheqer se Swift siguron për ne.
>> Pra, nëse ne duam të mbledhë notat, ne jemi ndoshta
do të duan të iterate mbi çdo send në këtë lak.
Dhe ne kemi, në Swift, nocioni e një për lak si ju do të presin.
Por mënyra që ne të tregojnë një varg është paksa e ndryshme.
Pra, në këtë rast, për të përmbledhur gjithçka, ne do të
do të krijojë një të përkohshme quajtur shumë të ndryshueshme në mënyrë për ne
për të ruajtur këtë akuzë.
>> Dhe vini re për tonë Ndërtimi loop këtu.
Për indeksin në 0 .. <grade.count.
Pra, ky ndërtim, 0 .. <grades.count është një operacion varg ku jemi
duke thënë se ne jemi duke shkuar për të krijuar një varg të numrave të plotë nga 0 deri
për të, por duke përjashtuar grades.count.
Kështu që kjo do të jetë 0, 1, 2, 3, 4, 5, deri në një shumë megjithatë
para grades.count.
>> Pra, kjo është e ndryshme se sa ne do të përdoret në mënyrë tipike për sythe
ku ju do të keni disa indeks ndryshueshme, vendosur atë të barabartë me 0 në fillim,
dhe pastaj të integrohen që deri disa Vlera më pak se numërimin e artikujve
në atë rrjet.
>> Pra, ka një modifikim për këtë, në fakt,
e cila na lejon për të shumë lehtë vendosur lloje të ndryshme të sillet.
Në qoftë se ju të ndryshojë këtë varg të tre pika, 0 ... grade.count,
kjo paraqet varg 0 të grades.count përfshirëse,
do të thotë se ky numër është edhe pastaj të përfshira në atë varg.
>> Por kjo është shumë i dobishëm për këto gjëra të sakta,
kur ne kemi për të kryer iterations mbi lak
sepse këto indekse janë të futura zero, siç e kemi parë në gjuhë të tjera
gjithashtu.
Çdo pyetje në këtë për lak?
>> Kështu që nuk ka përkufizim nënkuptuar i këtij indeksi variabël,
vlera e të cilit fillon në 0, dhe vazhdon në çdo ripërsëritje loop
për rritjen nga 1 deri deri një pikë që është e barabartë me grades.count,
në të cilën pikë, loop aborts.
>> Vini re se në vargun tonë interpolation këtu,
ne fakt mund të kryejnë disa thjeshtë manipulimet në këto vlera.
Pra, indeksi plus 1 do të vërtetë të kryejnë një përmbledhje e kësaj vlere
sepse indeksi është, në ky rast, një numër të plotë.
Dhe në atë moment, ajo do të pastaj do të konvertohet në një varg
dhe interpoluar në këtë varg këtu, dhe të shtypura jashtë si ne do të presim. .
>> Dhe gjëja e bukur rreth vargjeve këtu është
se ne jemi në gjendje të ketë Vlerat ngarkuar dhe vlerat vendosjen
duke përdorur simbol katror kllapa si ne kemi parë në gjuhë të tjera si edhe.
>> Të gjithë të drejtë, kështu që nga këtu, ne tani llogaritin shumën tonë të të gjitha notave tona.
Tani lloj tjetër hap logjik do të ishte
për të bërë një operacion ndarje të gjetur nga mesatarja e këtyre notave.
Por diçka e rëndësishme këtu po ndodh që
është se kjo shumë është ndoshta një numër të plotë.
Por ne kemi nevojë për të kryer disa lloj i ndarjes dyfishtë.
Dhe kjo do të jetë shumë e rëndësishme kur
ne duam të kryer këtë operacion, sepse ajo që ne jemi duke thënë
është se ne kemi nevojë për të vërtetë kryejnë ndarje në dy dyshe.
Dhe përsëri, sepse Swift është shtypur shumë të fuqishëm,
ne duhet në mënyrë të qartë të vendosur të gjithë të Artikuj në dyshe para se ne fakt
të kryer këtë operacion.
>> Pra, në mënyrë që ne të kryejnë ndarje të dyfishtë,
kjo nuk është e mjaftueshme për vetëm një e këtyre artikujve për jetë të dyfishtë.
Dy prej tyre duhet të jetë një të dyfishtë në mënyrë që të shpejtë
të jetë i sigurt se ky është ajo që ne duam të bëjmë.
Pra, ne do role në mënyrë eksplicite shuma që ne kemi llogaritur mbi
dhe numërimin e notave në dyshe, dhe pastaj të kryer këtë operacion dhe dyqan
që në këtë variabël të re, ose më mirë kjo konstante të ri të quajtur mesatare,
e cila do të ketë çfarë lloji, ju imagjinoni?
Të dyfishtë, po.
Pra, në këtë rast, ne nuk duhet të specifikojë atë
për shkak se ajo mund të nxirret nga Operacioni çfarë lloji të mesatares së të dhënave
do të jetë.
Dhe Swift në përgjithësi është shumë e mirë për të qenë në gjendje të tregoj llojet.
>> A doni të shihni këtë drejtuar, ose mund të lëvizë?
Unë dua të do të mbajë.
Çdo pyetje mbi ndonjë nga këto?
I madh.
>> Tani ne jemi duke shkuar për të filluar për të marrë në funksionet e mira stuff-- përcaktimin,
dhe disa lloje të tjera që janë unike për Swift që ju nuk e keni
shihet në gjuhë të tjera deri në këtë pikë,
por ata janë të pranishëm në tjetrën gjuhë që ju mund të gjeni më vonë.
Pra, së pari, nëse ju doni për të përcaktuar një funksion,
ju përcaktoni atë me fjalën shokuar funksion, dhe pastaj emrin funksioni,
dhe pastaj në kllapa, argumentet se ju doni që funksion të pranojë.
Argumentet duhet gjithashtu specify-- generally--
duhet të specifikojë llojin e të dhënave që ata janë, përveç nëse ata mund të nxirret.
Dhe ne do të shohim se pak Caveat në vetëm pak.
>> Pra, në këtë rast ne kemi një Funksioni i quajtur printGradeCount.
Ne jemi duke shkuar për të pranuar një variable-- ose më mirë në këtë rast,
një constant-- quajtur gradebook.
Dhe kjo do të jetë e shkruani sërë integers.
Tani ka diçka kjo është me të vërtetë e rëndësishme këtu
që unë dua që ju të kuptoni.
Kjo është se si parazgjedhje, këto argumente që janë të inputeve në këtë funksion janë
përcaktuar me një fjalen nënkuptuar LET, që do të thotë se unë nuk mund të modifikoni këtë
ndryshueshme gradebook këtu.
Dhe kjo lloj kuptim, sepse ju jeni duke kaluar të dhënat në.
Dhe ju ndoshta nuk e duan atë të ndryshohet nga nën ju.
Është e mundur për të përmendur në mënyrë eksplicite se kjo është një variabël duke vënë
fjalen var këtu.
Por kjo është një Gotcha që ne kemi njerëzit vënë re kanë bërë në të kaluarën
është se ata supozohet se ajo do të jetë një variabël, kur, në fakt, atë
është një konstante.
>> Të gjithë të drejtë, kështu që këtu pra, në këtë rast, ne nuk jemi të specifikuar asnjë lloj të kthimit.
Ne do të ju tregojnë se si për të bërë që në një moment të vetëm.
Por vini re se këtu kemi vetëm një të thjeshtë, nëse kusht.
Nëse librin e notave është bosh, e cila në këtë rast
është vetëm pronë e këtij numër i plotë grup, atëherë kemi të shtypura nga diçka.
Përndryshe bëjmë diçka tjetër.
>> Shumë i thjeshtë deri tani unë mendoj.
Por të ndaluar mua nëse keni ndonjë pyetje.
>> Tani ky funksion, mesatarisht, gjithashtu merr disa argumente, ose më mirë një argument,
i cili është librin e notave, dhe kjo kohë do të kthehet një lloj të dyfishtë.
Për shkak se ajo është informatikë mesatarja dhe kjo është
do të kthehen në fakt se mesatare llogaritur në vijën e quajtur.
>> Në këtë rast, ne specifikojë llojin kthehen pas një shigjetë.
Dhe kjo mund të ndihen lloj i pazakontë në fillim.
Ju keni rritur mësuar për vendosjen e kthimit
lloji para emrit të funksionit.
Por në qoftë se ju mendoni për këtë në aspektin e matematikës,
si kur ju keni matematikë që përcaktojnë një funksion,
ju keni një funksion me disa inputeve, dhe ajo prodhon një prodhim.
Dhe kjo është pikërisht ajo kjo është menduar për të imituar.
Dhe ka disa gjuhë të tjera që kanë sintaksë të ngjashme, si dhe,
por ndoshta askush që ju keni parë në CS50.
Por ende nuk do të jetë i hutuar nga ajo.
Shigjeta do të thotë se çfarë po ndodh të kthehet në këtë rast.
OK, kështu që si do të shkojmë për të llogaritur këtë mesatare?
E pra, nëse librin e notave është e zbrazët, edhe atëherë ne jemi
do të kthehen 0, e cila ndoshta një mënyrë e arsyeshme për të trajtuar këtë.
Unë nuk e di, le të vijë përsëri në se në një pak.
Kjo nuk mund të vërtetë të jetë një mënyrë e arsyeshme
për të llogaritur një mesatare nëse ne kemi një gradebook bosh.
>> Atëherë ne do të kryejnë vetëm mbledhje tonë.
Vini re se këtu ne fakt kanë një version alternativ të një
për lak, e cila na lejon të iterate mbi çdo send të vetëm në një rrjet
dhe vendin e çdo element në ndryshore e vet.
Duke specifikuar për klasën në gradebook, ajo që ne jemi duke thënë
është se ne jemi duke shkuar për implicite të krijojë një konstante të ri të quajtur
klasën që do të përfaqësojë çdo send unik në librin e notave
çdo herë që të iterates lak.
Kështu që herën e parë që është e drejtuar, klasa do të
të jetë pika e parë në librin e notave.
Herën e dytë ajo do të jetë e Pika e dytë, e kështu me radhë e kështu me radhë
deri gradebook ka shteruar veten e elementeve.
Atëherë ne do të jetë në gjendje për të përmbledhur se klasën në ndryshore tonë përmbledhje
dhe kthimi mesatar tonë siç e kam parë më parë.
OK, ndonjë pyetje?
Po?
Audienca: Unë kam dy pyetje.
Numri një, hipotetikisht, mund ju drejtuar numër i plotë në këtë?
A nuk duhet të jetë një të dyfishtë, është e saktë?
DAN AMRMENDARIZ: A mund të përsëris këtë pyetje?
Audienca: A mund ta bëj integer si mesatare?
DAN AMRMENDARIZ: A mund të të bëjë integer si mesatare?
Pra kthehen një numër të plotë mesatare në vend të një të dyfishtë?
>> Audienca: Return-- ju kanë që tani më poshtë.
DAN AMRMENDARIZ: Të drejtë këtu, kthehen 0.0?
Audienca: Po, vetëm të kthehen 0.
Pra, kjo do të jetë ose 80 apo 85, por jo 85.2.
>> DAN AMRMENDARIZ: Pra, në këtë rast, kështu që nuk ka një çift mënyra të ndryshme
të përgjigjem se.
Më lejoni të përgjigjem ato në mënyrë.
Pra, nëse unë vetëm të bëjë këtë kthim 0, a 0 është një numër i plotë vlerë.
Dhe kështu që do të shkaktojë një lloj gabim për këtë rast
për shkak se ajo është duke pritur një të dyfishtë por pastaj është kthyer një numër të plotë.
Nëse unë dua të kthehen një numër të plotë, unë mund.
Unë mund të vendosni llojin e kthimit të int, kthehen 0 këtu,
dhe nuk kryejnë ndarje të dyfishtë.
Por atëherë ne do të jemi duke bërë ndarjen integer.
Dhe kështu që ne pastaj nuk do të marrë mesatare që ne ndoshta do të presim.
Por, po ne mund të modifikoj Llojet në këtë mënyrë.
>> Audienca: Dhe së dyti, ju të ketë një të dyfishtë mbi krye.
Por poshtë, kur ju kthehen Double Double,
kjo është tashmë automatikisht kthimit format dyfishtë.
Pse ju ende nevojë për të përcaktuar atë me shigjetë në krye me një të dyfishtë?
>> DAN AMRMENDARIZ: Pra, në rast, kjo është pjesë
i the-- kështu për të përsëritur pyetjen, sepse kjo është e nënkuptuar nga kthimi
Llojet këtu, çfarë lloji kjo në fakt është, ne duhet të jetë i qartë me Swift
në lidhje me atë që ne duam të kthimi nga këtij funksioni
kështu që kur ajo kryen shkruani kontrolluar, ajo mund të bëni të sigurtë
se ajo që kemi shkruar në të vërtetë poshtë në fakt përputhet me atë.
Pra, kjo është lloj i si një kontroll me veten lloj të situatës.
Por ka are--
>> Audienca: [padëgjueshme] shigjetë?
>> DAN AMRMENDARIZ: Ka raste kur ne mund të specifikoni se ne mund implicite
vendosur llojin e kthimit.
Por në këtë rast, unë nuk e bëj mendoj se do të punojë.
Ka disa sintaksë tjetër se ne do të shohim më vonë.
>> Të gjithë të drejtë, kështu që ky burim Kodi është një pak të ndryshme
sepse ky parses argumente nga funksioni që ne jemi duke bërë thirrje.
Më lejoni të ju tregojnë se si funksionon para se ne fakt të lëvizë
për disa gjëra interesante që po ndodh në Swift.
>> Pra, në këtë rast, në qoftë se unë vetëm të drejtuar këtë Kodi, vëreni se ajo që po bën
ndërsa is--, kjo lloj më jep një gabim të pazakontë.
Unë kam nevojë për të kaluar atë një çift të integers si një argument command line.
Pra, le të shohim, 150 dhe 80, dhe hit Enter për të gjetur se çfarë është e vërtetë për ta bërë.
Është pranuar secili prej këto vlera si numra të plotë.
Është e inputting ato në një gradebook.
Dhe pastaj kjo është kryer se llogaritja mesatare
dhe kompjuteri se si ne do të presim.
>> Por me sa duket ka diçka ndodh në me këtë diçka refuzues
diçka si një numër të plotë.
Si ju mund të kujtojnë prej kur ishim që kanë të bëjnë me argumente command line
në C dhe gjuhë të tjera, shumë të parë Pika 0-të në këtë argument command line
Lista është emri i komandës se ne fakt ekzekutuar.
Pra, në këtë rast, unë jam vetëm looping mbi të gjitha argumentet command line.
Por unë nuk jam duke bërë çdo lloj të dashuroj kontrolloni për të kaloni mbi atë të parën.
Unë jam vetëm në mënyrë eksplicite ose implicite unë jam kontrollimin e cila prej këtyre llojeve
janë integers para unë në fakt kryer këtë llogaritje.
>> Dhe kjo është në thelb çfarë po ndodh këtu.
Për çdo argument në argumentet e procesit të,
Unë jam duke shkuar për të kryer disa kontroll.
Dhe në këtë rast, unë jam duke shkuar në përpjekje për të parë konvertuar
ky argument në një numër të plotë nga kryerjen e një Typecast të qartë,
sepse ajo është, në të dhënat, një varg dhe jo në fakt një numër të plotë.
>> Por kjo është lloj i një sintaksë të pazakontë, nëse klasën e le të barabartë Int (argumenti).
Çfarë është në të vërtetë ndodh këtu është jashtëzakonisht e
e rëndësishme për të përdorur Swift tuaj.
Kjo është duke përdorur atë që e quajtur një lloj fakultative.
>> Pra ky funksion, Int (argumenti), kthen jo vetëm një numër të plotë, por kthimit
atë që quhet një numër të plotë opsional.
Dhe kështu kjo është lloj i një tip në krye të një lloji.
Ju mund të lloj të imagjinojmë atë si ajo është kthyer si një paketë.
Dhe kur ju të hapur atë pako, ai ose
ka një numër të plotë, e cila është rezultat, ose ajo ka absolutisht asgjë në atë në të gjitha.
Dhe kjo është e dobishme si një error checking mekanizëm, sepse në këtë rast
ne mund të gjeni, ishte kjo lloj konvertimit të suksesshme?
Në qoftë se kjo ishte, atëherë kjo është në fakt do të ketë një numër të plotë brenda.
Përndryshe ajo do të ketë disa Vlera që ne do të thërrasë zero, e cila
është përfaqësues i asnjë numër të plotë në të gjitha.
Është me të vërtetë përfaqësuese e asgjë.
>> Dhe kështu kjo nëse ndërtimi na lejon që të hap këtë paketë,
që fakultative detyrueshme.
Dhe në qoftë se ne jemi në gjendje të hap që paketë dhe për të gjetur një numër të plotë brenda,
atëherë ajo që ne jemi duke thënë këtu është se ne do të atëherë
lejojmë që vlera e të vendosen në kjo konstante quajtur klasën.
Dhe kjo pjesë e në qoftë se deklarata, pjesa e sipërme e në qoftë se deklarata
do të kandidojë, sepse kjo çmbështjell ishte i suksesshëm.
>> Në qoftë se ndodh pikërisht kështu që ka pasur një gabim mbase
në këtë konvertim të qartë tipi nga një varg në një numër të plotë, ndoshta
kjo është ABC vlera për shembull.
Dhe kjo është në fakt nuk ndodh për të kthyer një numër të plotë.
Atëherë ajo do të kthehet zero, i cili nuk është një numër i plotë.
Dhe kjo në qoftë se deklarata mirë atëherë dështojnë.
klasën e nuk do të ekzistojnë, sepse ajo nuk ka përmbajtje numer i plote.
Dhe kjo do të drejtuar këtë bllok tjetër në vend.
Po?
>> AUDIENCA: zero është N-I-L?
DAN AMRMENDARIZ: nil është N-I-L, po.
>> Pra, kjo është ndoshta një nga më të gjërat më të vështira për Swift,
sidomos kur ju jeni në barërat e këqija në një app IOS
dhe ju jeni në të vërtetë duke u përpjekur për të bërë disa të zhvillimit atje.
Ajo do të jetë yelling me ju në lidhje fakultative.
Ajo do të jetë i kërkuar ju për pikëpyetjet dhe pikë thirrje.
Por sapo ju të kuptoj out-- nëse ju kushtojnë disa kohë për të parafytyruar
çfarë po ndodh me lloje opsionale, ju do të ruani veten shumë dhimbje koke
si ju janë duke u përpjekur për shkruani një aplikacion në Swift.
>> Është në fakt një tipar shumë të fuqishme.
Dhe ju do të keni vetëm për të të marrë fjalën time për të tani për tani.
Por ne do të shohim këtë ndërtim dhe disa të tjerë si ai
në disa të kodit tjetër burim që ne do të ju tregojnë se në vetëm pak.
>> A ka ndonjë pyetje fillestare këtu?
Pra takeaway e rëndësishme është që një lloj opsional është lloj i një metatype.
Ajo ose ka një vlerë, dhe nëse e bën atë, atëherë ajo
ndoshta do të ketë këtë vlerë lidhur me të, ose ajo nuk ka asnjë vlerë çfarëdo qoftë,
dhe është përfaqësuar nga zero.
Pjesa tjetër e kësaj është ndoshta si ju do të presin.
>> Pra, le të luftoj deri vështirësi përsëri.
Dhe kjo kohë, le të marrin një vështrim në disa lloje të tjera të dhëna që në fakt ekzistojnë.
Një prej tyre është fjalorë, i cili është shumë të ngjashme me fjalorë Python.
Është disi e ngjashme me një tryezë të hash në C. Kjo është në thelb një hartë të çelësat
ku çelësat mund të jetë vargjet.
Dhe kur ju shikoni deri ato çelësat, Ata çelësa do të ketë një vlerë.
Pra, kjo nuk është mjaft e një grup, por në vend të kësaj, të lidhura më ngushtë
në një hartë hash apo një tabelë hash.
>> Le të shohim se si kjo është menduar për të punuar para se ne fakt
shkoni në kodin burimor vetë.
Në qoftë se unë vetëm të drejtuar këtë, asgjë të vërtetë ndodh.
Është thënë mua se unë jam duke pritur disa parametra të tipit në vijim.
Kështu që unë jam duke shkuar për të siguruar të ajo disa emra problemeve të vendosur,
kështu pset0, ndoshta kam marrë 100.
Dhe pset1, kam marrë një 5.
Dhe pastaj në provim, unë e bëri me të vërtetë mirë dhe mori 30.
Dhe Oops, unë goditi një hapësirë ​​këtu.
>> Kur unë hit Enter, ju mund të shihni ajo kryen disa llogaritje.
Ajo thotë se gradebook është tre notat, pset1, pset0, provim.
Dhe librin e notave ka kjo mesatare specifike.
Pra, përsëri, ne jemi duke punuar me këtë ide gradebook,
por ne do të vazhdojmë iterating me kompleksitetin e funksionit tonë.
>> Pra, në fillim, ne jemi vetëm do të krijuar një funksion që
është përgjegjëse për shtypjen e përdorimit.
Dhe nuk është kjo dalje funksion i cili do të vetëm
lë me forcë kërkesën.
Kjo nuk është diçka që ju do të përdorni në iOS app.
Ky është vetëm, në këtë rast, me një argument command line.
Tjetra ne do të fillojnë të lëvizin në drejtim të Xcode.
Por kjo është specifike për një komandë Linja program stil në Swift.
>> Le të marrin një vështrim në disa nga gjërat interesante këtu.
Le të shohim, vetëm një çift i gjëra interesante për të përmendur ndoshta
është se në funksion tim shtypjen numrin e notave,
ju mund të kujtojnë se unë kam atë listë i pset1 items--, pset0, dhe provim.
Ju mund të vërtetë të shpejt dhe lehtësisht të bëjë këtë
duke marrë librin e notave, e cila është një fjalor që ka çelësat dhe vlerat.
Gjej të gjitha e kyç është nëpërmjet Metoda dot çelësat këtu,
dhe pastaj të përdorin këtë joinWithSeparator, e cila pastaj do të marrë të gjithë çelësat
që ne kishim shtypur në, pset1-- ose Na vjen keq, pset0, pset1, dhe exam--
dhe lidh ato së bashku duke përdorur një presje dhe një hapësirë
për të krijuar një varg të gjatë.
Ky operacion të bashkohen është vetëm phenomenally e dobishme në një shumëllojshmëri kontekstesh.
Dhe kështu është kjo joinWithSeparator.
>> Dhe kjo është një gjë që është ndryshuar nga Swift 1 deri Swift 2.
Ka përdorur të jetë një Style-- Python nëse ju jeni
njohur me Python-- një Python Stili bashkohen metodë në vargjet.
Por kjo nuk është më rasti në Swift 2.
Ju doni të përdorni këtë në qoftë se ju doni të lidh një grup të gjëra
së bashku me një varg.
>> Pra, ndoshta pastaj në faqen tonë Diskutimi i mesatar para,
kjo e bën pak më shumë kuptim për ne për të vendosur funksionin mesatar
të jetë një opsional dyfishtë në vend se vetëm një dyfishin qartë.
Sepse kemi pasur se kusht pazakontë ku,
çfarë nëse gradebook fakt nuk ka vlerat brenda saj?
Çfarë duhet norma mesatare e kthimit?
>> E pra ndoshta në C ju do të kishte bërë diçka
si kusht një vlerë sentinel, si 0.0, ose ndoshta një numër negativ,
apo diçka vetëm përfaqëson faktin se ka pasur disa kusht gabim
dhe ju ndoshta nuk të vërtetë kanë aftësia për të llogaritur atë mesatare.
E pra bukuria e specifikuar një lloj opsional do të jetë për të bërë atë.
Dhe unë tani jam duke thënë se të gjitha këto fjalime, por ky fakt nuk përdor optionals.
Por ne do të shohim se në vetëm minuta ku ne mund të vënë mesatare
të jetë një lloj dëshirë të dhënat në mënyrë që në qoftë se ai në fakt kthehet disa të dhëna, atëherë
ne do të kthehemi që të dhënat.
Përndryshe ne do të kthehemi zero, duke thënë se kjo
nuk ka asnjë llogaritje kuptimplotë.
>> Le të lëvizin për në diçka tjetër.
Pra, nga këtu, ne kemi qenë në kërkim në të gjitha këto shembuj në rreshtin e komandave.
Por me të vërtetë atë që ju jeni duke shkuar që të merret me të është Xcode.
Dhe një nga gjërat e këndshme rreth Xcode është, dhe veçanërisht në Swift,
është se ne kemi këtë gjë quhet një shesh lojrash.
Dhe një shesh lojrash është aspak një app IOS.
Por kjo ju mundëson për të eksperimentuar me Swift në një mënyrë shumë të lehtë.
Ju mund të shtypni të gjithë kodin tuaj.
Është bukur sintaksë theksuar këtu.
Kur keni krijuar një skedar të ri, ajo do të kërkojë ju në qoftë se ju doni të krijoni një shesh lojrash.
Por gjëja e bukur për Playground është se në të djathtë të dritares tuaj,
e bën atë të vërtetë të ju tregojnë Prodhimi nga kodin tuaj.
Pra, nëse unë lëvizni poshtë, ne mund të shohim se çfarë prodhimi i linjave të ndryshme të kodit
në fakt ndodh të jetë.
>> Pra, në këtë rast, ne do të drejtime të ndryshojë vetëm pak
dhe të flasim për diçka që është me të vërtetë e rëndësishme për këtë mënyrë të nivelit të lartë
se Swift vepron, dhe atë është kjo ide e mbylljeve.
Dhe ju ndoshta keni parë këtë pak në JavaScript.
Për ata prej jush që janë në CS50, mbylljet
janë shumë të njohura mënyrë, shumë e mirë për të bërë të nivelit të lartë gjërat në gjuhët moderne.
Por është gjithashtu lloj i vështirë për të përfundojë kokën tuaj rreth herë të parë.
Pra, nëse ju kërkoni në këtë hera e parë, kjo është në rregull.
Vetëm shikoni në kodin burimor dhe të shohim në qoftë se ju mund të kuptoj atë në shtëpi.
>> Pra, në këtë rast, le të themi se ne duan të krijojnë një shumë të eksponentët
me disa vlera fikse.
Pra, në këtë rast unë mund të krijojë një funksion.
Unë jam duke shkuar për të thirrur atë fuqia e 2 qëllimi i të cilit i vetëm në jetë
është për të marrë disa të dhëna dhe të dyfishtë ajo, dhe të kthehet atë vlerë.
Vini re se unë jam këtu pranuar një lloj të të dhënave.
Ajo do të jetë një ndryshore të quajtur x.
Është e tipit të dyfishta.
Dhe unë jam duke shkuar për të kthyer një të dyfishtë këtu.
Dhe unë jam vetëm duke shkuar për të bërë një shumë, sinqerisht, mjaft
mënyrë naive të dyfishuar këtë vlerë.
Dhe unë do të ju tregojnë përse këtë është e dobishme vetëm në një të dytë.
>> Vini re se këtu kemi këtë varg përsëri. për diçka në 1, dot
Dot Dot, 2, që do të thotë se ky lak do të kandidojë dy herë.
Por kjo paraqet një variabël bedel.
Kjo do të thotë unë nuk jam me të vërtetë duke shkuar për të të jetë duke përdorur këtë variabël kudo
brenda këtij lak.
Unë vetëm dua këtë linjë e kodit për të drejtuar dy herë,
pa pasur nevojë të dini vlera e atë varg.
>> Pra, në këtë rast unë jam running rezultatin herë x dy herë, e cila në thelb
do të thotë se unë jam squaring këtë vlerë.
Dhe kjo ndodh për punojnë si ne do të presim.
Fuqia e 2, duke kaluar një vlerë prej 2.0 na jep një prodhim prej 4.
3.2 Punimet 10.24.
>> Tani ne mund të bëjmë një të ngjashme gjë për pushtet e 3.
Por tani të ndryshojë vetëm varg.
Për variabël dummy në 1 përmes 3, shumëfishohen 3 herë,
dhe të bëjë të njëjtën gjë.
>> Pra, kjo mund të ndjehen pak contrived.
Por ka një rëndësi gjë këtu që
është se në kërkim në këto dy funksione, nuk ka
vetëm një gjë që është e ndryshme, cila është kjo vlerë në varg.
Çdo gjë tjetër në lidhje me këto dy funksionet, fuqia e 3 dhe fuqia e 2,
janë, në fakt, identik sepse ata punojnë në të njëjtën mënyrë.
>> Pra, në këtë pikë, pak kambanë alarmi duhet të plaste.
Shpresojmë se çfarë ju jeni duke thënë, ju e dini, kjo ndihet pak
si dyfishimin e përpjekjeve.
Ndoshta ka një mënyrë që unë do të të jetë në gjendje për të përmbledhur gjithë këtë
dhe të sigurojë një funksion ose të krijojnë një funksion që
bën pikërisht atë që unë dua, pa kanë nevojë të tipit atë në mënyrë eksplicite.
Dhe kjo është ajo që pushteti e mbylljes na lejon të bëjmë.
Pra, le të marrin një vështrim në këtë.
Dhe unë do të shpenzojnë një çift minuta në këtë, sepse kjo
është shumë e rëndësishme për Swift.
Ne e shohim këtë gjatë gjithë kohës.
Ne jemi duke shkuar për të përcaktuar një funksion.
Ajo do të quhet powerOf.
Ajo do të pranojë një parametër të quajtur y të tipit Int.
Por të marrë një vështrim në llojin e kthimit.
Lloji kthimi është, në kllapa, Double shigjetë të dyfishtë.
Që do të thotë se këtë funksion, kjo powerOf funksion,
është kthyer një funksion.
Që është pranuar një të dyfishtë dhe kthimin e një të dyfishtë.
Kështu që mund të tingëllojë si lloj i çmendur, por le të lëvizni poshtë pak
dhe të kërkoni për të parë se çfarë ndodh.
Ne jemi brenda këtij powerOf funksionit.
Ne jemi duke krijuar një funksion të ri quajtur exponentiator,
por kjo nuk ka rëndësi se çfarë është ajo.
>> Vini re se kjo ka një vlerë input e x.
Dhe kjo është duke marrë në një të dyfishtë dhe kthimin e një të dyfishtë.
Dhe kjo është e njëjta kodin që ne pa më sipër, përveç se vlera e 2
ose vlera e 3, që sipërme të lidhur në atë varg,
është zëvendësuar me kjo vlerë e y, të cilat
ishte parametri fillestare e funksionit tonë powerOf.
Dhe në këtë pikë, ne exponentiator kthehen.
Ne jemi kthyer funksionin.
>> Kjo është lloj i si një defekt të vogël mendje.
Por le të imagjinojmë se çfarë ndodh kur unë e quaj këtë funksion powerOf
dhe të kalojë në atë disa vlera si 2.
Çfarë kjo do të thotë është se Unë tani kanë vlerën
2 për y, që do të thotë se kjo vlerë y në këtë funksion exponentiator
do të jetë që vlera 2.
Por unë jam kthyer këtë funksion exponentiator.
>> Pra, vini re çfarë Swift thotë se unë kanë krijuar në këtë rast.
le katror është një përkufizim, është një funksion që pranon një të dyfishtë
dhe kthen një të dyfishtë.
Unë kam krijuar një funksion se shesheve diçka
duke përdorur këtë mekanizëm të drejtë këtu.
Dhe me të vërtetë se çfarë po ndodh është që ajo është kthyer funksionin
exponentiator, por kjo vlerë y është e mbështjellë në brendësi të saj.
Dhe kështu që tani çdo herë që unë të përdorni këtë variabël ose kjo konstante quajtur
katror, ​​është ajo që po ndodh të sillet si një funksion.
Dhe kështu atëherë unë mund të telefononi atë ndryshore si unë do të thërrasë një funksion,
dhe të kalojë në të një numër, si në këtë rast 3.
Dhe unë pastaj do katrore këtë vlerë.
Pra, 3 katror do pastaj bëhet 9, si ne mund të shohim këtu.
>> Me të vërtetë i çmendur, por kjo tani më lejon mundësi
për të krijuar funksione të tjera powerOf.
Ashtu si unë mund të them, OK, edhe tani unë dua për të krijuar një funksion i ri, powerOf (3),
dhe ruajtur atë në një quajtur kubike konstante.
Dhe tani kubike do të jetë një Funksioni i veçantë që do të pastaj
marrë disa vlera si input dhe kubike se vlera si ne mund të shohim në linjë fund
këtu.
kubike e 2 do të rezultojë në 8.
>> Shpresojmë sende goxha i zoti.
Ju kurrë nuk kam parë këtë më parë.
Unë ju inkurajoj që të shikoni në mbylljet dhe hetuar këtë pak më shumë.
Është gjëra me të vërtetë i fuqishëm ne shohim një shumë në JavaScript dhe disa gjuhë të tjera.
Është me të vërtetë jetike për të kuptuarit API si edhe
se ne do të merrni në vetëm një të dytë.
Po?
>> Audienca: Kur ju bëni powerOf (2), kllapa, dhe pastaj
tjetër kllapa, një tjetër input-- ju jeni në thelb duke zëvendësuar sheshin.
DAN AMRMENDARIZ: Pra shikoni në vijën e fundit këtu.
Ajo është në fakt krejtësisht e mundur që të bëj që chaining si ju sugjeruar.
Pra powerOf (5) do të thotë se ne jemi duke shkuar të ketë një exponentiator prej 5 deri këtu.
Pra, kjo është në thelb do të jetë njëjta gjë si 4 me fuqinë e pestë,
sepse ne kemi krijuar një exponentiating funksionojë me fuqinë e pestë,
dhe ne jemi duke kaluar në që të funksionojë vlerën 4.
Dhe ne kemi marrë këtë vlerë që ne presim, 1024.
Audienca: Dhe kjo nuk është një emrin, kështu që kjo e bën më të lehtë
për të lexuar, sheshin çfarëdo.
>> DAN AMRMENDARIZ: E drejta, pikërisht.
Kështu që para se unë vetëm vënë atë në një konstante këtu kështu
se ajo e bëri të lehtë për t'u përdorur këtë emër.
Po?
>> Audienca: Në këtë kontekst powerOf, kjo është pjesë
i gjuhë programimi në krahasim me mënyrën se si ju
mendoj se e powerOf në [e padëgjueshme]?
DAN AMRMENDARIZ: Pra, në këtë rast, powerOf
është thjesht emri i funksion që unë e përcaktuar këtu.
Kështu që nuk është e natyrshme në gjuhën e vetë,
por, kjo është vetëm një funksion që ka
që emri sepse unë jap këtë emër.
Ndonjë pyetje të tjera?
Në rregull.
>> Tani kjo është e madhe.
Por ju nuk jeni duke shkuar për të parë një shumë e funksioneve mbylljes se
janë si kjo, ku ju të përcaktojë, brenda e një funksion, një tjetër funksion.
Dhe ju mund të bëni atë.
Por kjo është lloj i jo të vërtetë e nevojshme, e drejtë?
Ashtu si pse nuk kam përcaktojnë këtë Funksioni i quajtur exponentiator
dhe pastaj menjëherë ta kthejë atë.
Pse nuk mundem të vetëm menjëherë kthehen këtë funksion?
>> Dhe në fakt, kjo është pikërisht Ideja prapa një koncept të quajtur
funksione anonime, ku funksione anonime në fakt nuk
kanë një emër, sepse ata nuk duhet të ketë një të tillë.
Dhe kështu në këtë rast, në 7B, ne mund të gjeni saktësisht se.
Kjo është e gjitha njëjti kod, bën pikërisht të njëjtën gjë,
por tani ne kemi ndryshuar atë pak kështu se ky funksion powerOf menjëherë
kthen një funksion.
Vini re se pas kthimit, ka një kllapa hapur kaçurrel.
Është pritur këtë input dyfishtë.
Është pritur se prodhimi dyfishtë.
Dhe pastaj në fjalen ndan kodin e vetë.
Pra, kjo është një funksion anonim.
Ajo nuk ka të vërtetë kanë një emër, kurse para se ajo u quajt exponentiator.
Por, siç e pamë, vetëm të vërtetë nuk i referohet exponentiator
jashtë atë funksion.
Pra, kjo nuk kishte rëndësi.
Pra, ky funksion është anonim ashtu-quajtur për shkak se ajo është e pa emër,
por është ende duke u përdorur në kontekstin e këtij kodi.
>> Ato e ardhshme çift Jam do të vazhdojë me shpresë
defekt mendjen tuaj pak.
Ne mund të thjeshtojë këtë edhe më shumë.
Sepse siç ishte astutely vuri në dukje më parë,
ndoshta ne fakt e di, nga inferring nga ky kod, çfarë
prodhimi i këtij kodi do të jetë.
Dhe në fakt, në këtë funksion anonim, ne në fakt mund të konkludoj llojet e të dhënave.
>> Pra, në këtë, ne nuk duhet të përcaktojë në mënyrë të qartë
tipi i të dhënave që është duke u input dhe output nga ky funksion
për disa arsye.
Njëra është që ne kemi përcaktuar, deri në nivel prototip i funksionit bashkëngjitur,
çfarë lloji i të dhënave të kësaj anonime Funksioni duhet të input dhe output.
Dhe nga ana tjetër, ne mund të konkludoj nga kodi
poshtë këtu se ne jemi të pranuar të dhëna se është e tipit dyfishtë
dhe kthimin e një të dyfishtë.
>> Vini re se këtu nuk kemi mënyrë eksplicite përcaktuar emrat e argumenteve
se ky funksion është pranuar.
Dhe kështu ne shohim që ne mund t'i referohemi këto parametra duke përdorur $ 0, $ 1,
kështu me radhë e kështu me radhë, në varësi të numri i asaj parametri përdoret
në këtë funksion.
>> Kjo është diçka që ju jeni duke shkuar për të parë një shumë është ky grupim i hapur kaçurrel
Përkufizimi ndjekur nga një $ 0, dhe pastaj disa operacion,
dhe pastaj një kllapa kaçurrel mbyllur.
Ky është një funksion anonim që kryen këtë operacion.
Ajo ka këtë parametër ku kjo është lloj është nxirret.
Kjo parametër i parë është $ 0.
Dhe disa operacion është ndodh në se $ 0.
>> Audienca: Pra shenja e dollarit do të thotë parametër në thelb,
dhe 0 do të thotë një të parë?
DAN Armendariz: Kjo është e saktë.
Pra shenja e dollarit thelb do të thotë parametër, dhe 0 do të thotë një të parë.
Por ai punon në mënyrë specifike në ky rast ku nuk kam quajtur
argumentet në funksion tim anonim.
>> Audienca: A Perl ose diçka të ketë kjo shenjë dollar, dollar 0 në atje?
DAN Armendariz: A që, unë jam i keq?
Audienca: A ka Perl kjo dollar 0, dollar 1--
DAN Armendariz: Unë nuk jam shumë të njohur me Perl,
por PHP ajo që përcakton variablave bazuar në shenjat e dollarit.
Dhe mund të ketë disa gjuhë që kanë karakteristika si kjo.
Në fakt, Swift huazon një shumë karakteristika si kjo
nga shumë gjuhë të tjera.
Ne e shohim lë të kuptohet se e Python në të.
Ky përkufizim i tipit duket se vijnë nga ocaml.
Dhe ne kemi vetëm një bandë e tërë e gjëra nga shumë gjuhë të ndryshme.
Kjo është një nga më të bukur gjëra në lidhje Swift
është se ajo merr një shumë të mirë ide nga një bandë e gjuhëve
dhe shoehorns të gjithë së bashku në një gjuhë super.
Në fakt, në qoftë se ju më lejoni të vazhdoni defekt mendjen tuaj,
kështu që ne kemi bërë të gjithë këtë.
Ne ndoshta mund të lehtësuar këtë një të vogël bit duke e kuptuar se, natyrisht,
Swift ka një exponentiating funksion ndërtuar në.
Nëse unë importit Darvinit, e cila është vetëm bibliotekë që
përmban ky funksion quhet pow, tani Unë mund të thjeshtojë fuqinë time të funksionit
të jetë në vijim.
Ajo do të jetë kthyer ky funksion anonim.
>> Por shikoni se sa e thjeshtë kjo është tani.
Ky është një funksion anonim që është pranuar disa lloj të të dhënave,
dhe kjo do të jetë një Argumenti në mënyrë specifike,
referohet në 0 $ që është e tipit të dyfishta.
Ajo do të kthehet një lloj dyfishtë.
Por deklarata kthimi tani është i nënkuptuar.
>> Dhe është ky stil i saktë se është shumë, shumë i përhapur në Swift,
në të gjithë vendin.
Ne jemi duke shkuar për të parë këtë gjatë gjithë kohës në Swift.
Kështu që unë jam duke treguar të gjithë këtë për ju për shkak të kësaj sintaksës.
Kjo është shumë e zakonshme për të parë, që do të thotë atë
është një funksion anonim që është kryer
disa operacion në këto argumente.
Dhe ka një kthim të nënkuptuar.
Pra, kjo është absolutisht e njëjta gjë për ne për të thënë këtë, të drejtë këtu.
>> Sepse këtë kaçurrel kllapa është një funksion,
ne jemi të kryer këtë operacion në argumentin e parë.
Ne jemi duke shkuar për të kthyer atë.
Por ky kthim jashtme është kthyer atë tërë funksion,
se funksioni i tërë anonim që ne kemi krijuar vetëm.
Ndonjë pyetje të tjera?
Të gjithë të drejtë, unë nuk e di nëse ju djema jeni gati për këtë,
por ne mund të shkojnë edhe crazier me Swift.
Jeni gati?
OK, kjo është e madhe.
>> Tani ne fakt kanë aftësinë për të, në Swift, për shkak të asaj se si modulare
dhe si i bazuar protokoll është, të përcaktojnë operatorët tona freaking.
Ashtu si në këtë rast, kemi pasur asnjë operatori për exponentiation-- mirë,
për kryerjen e kompetencave të diçkaje.
Por unë mund të, në Swift, përcaktojnë një të ri Operatori që bën pikërisht këtë.
Pra, në këtë rast nuk ka një bandë e sintaksës këtu.
Dhe unë do të ju lejojnë të shikoni në atë në shtëpi kur ju shikoni në këtë.
Por ne jemi definuar këtë Infiks operator, **, i cili pastaj do të na lejojë,
duke përcaktuar se çka Funksioni ** fakt
ka, për të pranuar një dorën e majtë anë dhe një e djathtë anë,
dhe pastaj të kthehen eksponent i se Left Hand anë në anën e djathtë.
>> Dhe kështu që tani të gjithë një e papritur I kanë krijuar një numërues të re.
Pra 2 ** 3 do të thotë 2 të pushtetit të tretë.
[Mendje të shëndoshë defekt] Kjo nga vetë duhet të bëjë që ju të jetë si,
OK, vidhos C. unë jam duke shkuar Swift gjithë rrugën.
Kjo eshte fantastike.
Kjo është shumë e fantastik.
>> Edhe pse ky është një shembull i madh.
Por unë kurrë nuk kam një herë jashtë i këtij shembulli në fakt
përcaktuar operatorin tim.
Por ende, ajo tregon një Shumë fuqinë e Swift
dhe pse kjo është në fakt me të vërtetë shumë i ftohtë.
OK, po?
Audienca: Nëse ju jeni përcaktimin operatorin tuaj,
si nuk e dini që ju nuk aksidentalisht të përpiqet dhe për të krijuar një operator që është
në diku në C, si fshehur diku në Swift,
si një një i panjohur që ju mund të nuk e kanë parë më parë.
>> DAN Armendariz: Pra, nëse ju jeni duke u përpjekur për të përcaktuar operatorët tuaja,
ekziston rreziku i përcaktimit një mbi një operator ekzistues.
Që shkon në një nivel të detajuar që Unë nuk mendoj se ne kemi kohë për të shkuar mbi.
Por kjo është një rrezik.
Dhe kjo është në fakt arsyeja pse shumë Unë nuk e përdorin simbolin caret, i cili
kur ne jemi duke shtypur jashtë pushtetit, ne zakonisht përdorin 4 caret pak 5 apo diçka
si kjo, vetëm kur ne jemi Gchatting buddies apo çfarëdo.
Por në këtë rast, që në fakt do të kishte shkaktuar një përplasje.
Dhe kështu unë shmangur atë vetëm për shkak se I ka ndodhur të di në këtë rast
se kjo do të shkaktonte atë përplasje.
>> Në rregull.
Tani për fat të keq, për shtatë minuta e fundit,
Unë kam për të mbajtur defekt mendjet tuaja pak.
Pra, më lejoni të ju tregojnë se disa gjëra të tjera si edhe.
>> Ne kemi treguar ju këtë ide duke pasur këto funksione anonime,
këto mbylljet që ju lejojnë të lloj i kalojnë funksionet përreth.
Ju mund të kthehen ato.
Ju mund të manipulojnë ato.
Ju mund të bëni të gjitha llojet e gjëra të çmendur.
>> Por një gjë tjetër që ndodh të jenë të dobishme
është aftësia për të, në krahasim për të kthyer këto funksione
në një funksion, për të kaluar një funksion si një parametër të një tjetër funksion.
Ju mund të jetë duke menduar edhe pse në Tokë do të dua të bëj diçka të tillë?
>> E pra, le të themi se unë dua për të marrë këtë operator që unë
punuar kaq shumë për të krijuar dhe të aplikojnë ajo në një bandë të numrave të ndryshëm
në një rrjet.
Pra, në këtë rast unë kam një grup të integers-- 1, 4, 7, 2, 5, 10, 56.
Dhe unë dua të dyfishtë të gjithë ata.
Mënyra se ne do zakonisht bëni është të shkruani vetëm
një të thjeshtë për lak që iterates mbi të gjithë ata
dhe të kryejnë një lloj të Operacioni katror mbi ta,
inputting ato vlera të reja në një të ri ndryshueshme, ose më mirë, një koleksion të ri këtu.
Dhe vlera e prodhimit të Rezultati është atëherë të gjitha këto vargjeve,
ose më mirë të gjithë ata Elementet tani katror.
>> Dhe ne mund të bëjmë të njëjtën gjë gjë për cubing atë,
por një zile alarmi pak duhet të shkojnë jashtë
duke thënë se ndoshta ka disa mënyra që ne do
të jetë në gjendje për të lehtësuar këtë një pak.
Dhe në fakt nuk është.
Çfarë ndodh nëse ne mund të krijojë një funksion që na lejon
për të pranuar, si një grabitqar, një funksion?
Pra, në këtë rast, të marrë një shikoni në këto argumente.
Ne jemi duke shkuar për të pranuar një listë dyshe.
Dhe pastaj ne jemi duke shkuar për të pranuar një funksion
në një ndryshore të quajtur f që do për të marrë një të dyfishtë dhe të kthehet një të dyfishtë.
Dhe tërë Prodhimi e tërë këtij funksioni
quajtur mekanizmin do të kthehet një grup të quajtur të dyfishtë.
>> Çfarë kjo atëherë do të lejojë mua për të bëni është që të iterate mbi atë listë
dhe të bëjë të njëjtën gjë, por tani zbatojë këtë funksion në çdo
e vlerave individuale në atë listë.
Kështu që unë nuk mund të vërtetë e di se çfarë është f.
Kjo nuk ka rëndësi për mua.
Por, për aq kohë sa ajo merr në një të dyfishtë, kryen disa operacion në të,
dhe pastaj kthehet një Të dyfishtë, atëherë unë do të jetë
në gjendje të ndajë këtë funksion në të gjithë çdo element i vetëm në listë.
>> Dhe ky lloj i programimit është quajtur funksionet më të larta rendit,
ku ne jemi duke kaluar funksione rreth si parametra
dhe duke bërë gjëra me funksione.
Është lloj si duke marrë të gjitha këto ide që ne kemi mësuar në CS50
dhe marrjen e tyre lloj e nivelit tjetër.
Dhe kjo është e gjitha gjëra stil CS51.
Dhe kështu ne do të shkojnë në thellësi më shumë në klasat si kjo.
>> Por kjo është edhe e rëndësishme këtu, sepse ne
të shihni një shumë të funksioneve që janë përdorur në Swift
që në thelb nuk kjo, ku ne kemi
disa numra, disa grup të numrave.
Ne jemi duke shkuar për të kaluar se array në Mapper tonë.
Dhe ne jemi gjithashtu do të kalojnë disa funksion, i cili
ne kemi përcaktuar tashmë këtu.
Ajo do të jetë katror.
Dhe ne jemi duke shkuar për të, atëherë katrore të gjitha ato numra
dhe dyqan se në këtë rezultat këtu.
>> Pra ky rast kemi përcaktuar tonë Funksioni i vet quajtur Mapper.
Por kjo gjë është e saktë, në fakt, e ndërtuar në Swift.
Ka një shumëllojshmëri të Funksionet e quajtur hartë.
Ka një funksion hartë, ka një funksion të reduktuar,
dhe ka një funksion filtër, e cila në thelb të zbatohen funksione
për çdo element të vetëm në një lista për të ndryshuar ato në një farë mënyre.
>> Audienca: Pra, kur ju jeni transformuar e të dhënave në një format tjetër
përmes një function--
DAN Armendariz: E drejta.
Yeah, kështu që funksioni se ne jemi duke pranuar
është transformuar të dhënat në një farë mënyre.
Në këtë rast, ne kemi qenë ose squaring atë, ose ne ishim cubing atë,
apo me të vërtetë, ne mund të kryejnë nuk ka operacion në atë në të gjitha.
>> Por më lejoni të ju tregojnë se si kjo atëherë do të shikojmë në praktikë.
Dhe përsëri, unë jam drejtimin e një bit e kohës. kështu që unë nuk jam
do të jetë në gjendje për të shkuar mbi të gjitha e kodit burim këtu në detaje.
Por unë ju inkurajoj për të bërë këtë.
Ne do të postoj atë sa më shpejt e mundur pas kësaj bisede.
>> Por në qoftë se ju merrni një vështrim në këtë, supozojmë se kemi një listë të numrave,
një grup i numrave në këtë ndryshore të quajtur numra.
Pastaj ne duam për të kryer këtë operacion filtër në ato numra.
Pra, filtri është një më të lartë Funksioni mënyrë që
pranon një rrjet dhe gjithashtu një funksion.
Dhe mbi çdo element në se grup, ajo kryen atë funksion.
>> Nëse kjo kthimet funksion vërtetë, ajo mban atë artikull.
Në qoftë se funksioni kthehet rreme, ajo hedh larg se pika.
Dhe pastaj ajo jep një listë që është bërë, atëherë të gjithë
nga ato sende që janë filtruar.
>> Pra, në një tjetër fjalë, kjo është e njëjta ide, librin e notave.
Ne mund të ketë një shumëllojshmëri të notave në këtë vlerë i quajtur numra.
Mund të jetë 100, dhe 70, dhe 40, e kështu me radhë e kështu me radhë.
Çfarë kjo filtër nuk është njoftim se kjo është se sheqeri sintaktik
për një funksion anonim.
Ky është një funksion anonim duke thënë se parametri që unë jam duke pranuar
do të jetë, në qoftë se ajo është më i madh se 70,
atëherë kjo do të kthehet të vërtetë, do të thotë se se pika do të mbahen në këtë filtër.
Pra, le të jetë pak më konkrete në lidhje me këtë.
Nëse unë kam këtë grup të numrave dhe përbëhet nga 100, 70, dhe 40,
Unë kryej këtë filtër operacion në çdo një nga ato.
Kështu që para është kjo vlerë prej 100.
100 më e madhe se ose e barabartë në 70 është e vërtetë, e cila
do të thotë se 100 është mbajtur në kjo kopje e re e këtij grup.
70 edhe kalon.
Por 40 nuk ka.
Pra, çfarë është kthyer në passingCount është grup i elementeve 100 dhe 70--
100, presje, 70.
Ata ishin të vetmet sende që janë mbajtur.
Dhe kështu arsyeja që unë shkova me shpejt shumë nga këto lloj të rendit të lartë
gjërat janë, sepse kjo është se e zakonshme gjë që ju do të shihni në Swift mjaft
shpesh, është kryer një operacion duke përdorur këtë sintaksë funksion anonim.
>> Ka disa sende të ftohtë.
Çelsin janë me të vërtetë të fuqishme në Swift, Unë do të thotë ashtu si i çmendur, i çmendur i fuqishëm.
Ju mund të përdorni kaloni, dhe ju në fakt mund të aplikoni ato
për vargjet, që është lloj i çmendur, dhe të bëjë stuff dashuroj si kjo.
>> Por në minutat e fundit, Unë dua të kaloni përpara mjaft larg
dhe t'ju tregojë një shembull specifik të si ne mund të krijojmë në iOS app duke përdorur Swift.
Pra, kur ju jeni duke bërë kjo, ju do të keni për të marrë
një vështrim at-- për Apple dokumentacionin, ata
kanë shumë mësime të vërtetë të mirë për krijimin e aplikimit tuaj të parë.
Dhe unë ju inkurajoj për të bërë se për shkak se ata të ju
nëpër të gjitha hapat e çfarë saktësisht në klikoni mbi për të krijuar një aplikim iOS.
>> Por këtu kemi këtë app iOS.
Dhe kjo është një app shumë e thjeshtë të vërtetë.
Nëse unë të drejtuar këtë, më lejoni të tregoj ju atë që duket si.
Të gjitha ajo në thelb nuk është ajo tërheq nga interneti një fotografi JSON
që i kam ruajtur në një server.
Dhe kjo skedë JSON përcakton imazhe që lejojnë
mua për të pastaj të ciklit përmes, në tim app, imazhe nga web serverin tim.
>> Kështu që unë kam këtu getNextImage.
Ai ngarkon një imazh nga interneti, dhe pastaj tregon atë në ekran.
>> Pra, kjo është shumë e thjeshtë.
Por qëllimi këtu është për të treguar ju se si ne mund të kombinohen gjëra
nga javët e fundit të CS50 në një aplikim aktual iOS.
Me fjalë të tjera, ndoshta një nga gjëra që ju do të dëshironi të bëni
është që të kemi një kërkesë që iOS mund të tërheqë të dhëna nga interneti
dhe të tregojnë përdoruesit disa informacione.
Kjo është tërësisht pika i këtij kodi burim këtu.
>> Pra, ka shumë për të thënë për si për të bërë zhvillimin aktual IOS.
Nuk është shumë e sintaksës çmendur që ne nuk e kemi parë ende mjaft
si një klasë, çfarë një klasë të vërtetë është.
Ne kryesisht mund të injorojë që për momentin.
>> Por vini re se ne kemi përmbante brenda kjo një shumëllojshmëri të gjëra
që ne kemi parë tashmë si funksionet që kanë emra të veçanta.
Dhe kur ne japim atyre funksionon emrat e duhur
që priten nga iOS, në fakt kjo ndihet pak magjike.
Por, kur ju krijoni një Aplikimi iOS, atje
janë emra të veçanta funksion që janë quajtur nga vetë në telefon
si kërkesa është e ngarkimit të provoni për të krijuar procesin që në fakt
shkon aplikimin tuaj.
Pra, përsëri, ka shumë gjëra që unë duhet të komentoj mbi këtu në mënyrë për ne
për të folur për këtë në mënyrë specifike.
Por unë ju inkurajoj që të shikoni në mbase seminari tjetër iOS, por edhe disa
e mësime online që bëjnë një punë shumë më të mirë për të përshkruar
informacionin specifik.
>> Por ne mund të shohim disa gjëra që janë interesante nga kodi këtu.
Vini re se në qoftë se ne kemi deklarata.
Nga rruga, e rëndësishme Gjë në lidhje me nëse deklaratat
është se kllapa rreth Shprehje Boolean janë fakultative.
Por formatimin e teksteve kaçurrel nuk janë fakultative, pa marrë parasysh sa pak apo shumë rreshta të kodit
ju keni në një në qoftë se deklarata.
Ju nuk mund të ketë një në qoftë se deklarata pa formatimin e teksteve kaçurrel në Swift.
>> Dhe kjo është, mirë, lloj i trashë.
Por ka arsye historike për këtë.
Ajo është menduar për t'ju shpëtuar nga vetë.
Ashtu si kjo për shembull, ju nuk mund të eliminimin e formatimin e teksteve kaçurrel rreth se
nëse deklarata.
Ato janë në fakt të nevojshme.
Kështu që unë ju inkurajoj që të hidhini një sy në këtë.
Por ka një më shumë ndërtuar që unë dua
për të treguar në lidhje Swift se është e re për Swift 2.0 krahasuar
në versionet më të vjetra të Swift, i cili është në vijim.
Le të shohim se ku e kam vënë atë këtu?
>> Pra, në këtë funksion të quajtur fetchJSON, ky funksion
është përgjegjës për të tërhequr atë JSON fotografi nga një URL, e cila ndodh vetëm në mënyrë të
që të konkurrojnë në IDE tim CS50.
Unë vetëm filluar Apache, vënë dosjen time JSON atje,
dhe unë jam në gjendje për të pastaj ta tërheqë atë të dhënat nga interneti duke përdorur
ky funksion dhe kjo URL, i cili është i pajisur me telefon.
Është e dhënë nga një bibliotekë që ju përdorni kur
ju jeni duke bërë disa të zhvillimit app IOS.
>> Vini re këtu se nuk është ky pazakontë konstrukt sintaksore quajtur roje.
Dhe me të vërtetë e gjithë kjo është në Swift është një mënyrë për të verifikuar
se disa gjëra kanë janë përmbushur para jush
vazhduar me pjesën tjetër të funksionit.
Kështu që unë mund të ketë, duke përdorur ky lloj fakultative,
Unë mund të ketë gjetur URL nga running këtë funksion NSURL
dhe ruajtjen që në një URL konstante, dhe pastaj duke kontrolluar
për të parë nëse URL ishte zero, sepse ajo ishte duke shkuar për të kthyer një lloj opsional.
Dhe në qoftë se ajo ishte zero, atëherë unë do të shtypura nga një gabim dhe pastaj të kthehen.
>> Por në vend, çfarë roje lejon bëjmë është që gjë shumë,
por të siguruar se ajo është e në fakt rasti që url
ka qenë e vendosur siç duhet nga NSURL.
Dhe në qoftë se ajo është, atëherë ajo kërcen mbi këtë, dhe kjo
do t'ju lejojë të vazhdojë me url që janë përcaktuar siç duhet.
Por në qoftë se është rasti që URL nuk është përcaktuar siç duhet,
nëse ky funksion kthen një gabim apo diçka tjetër e papritur
në fakt ndodh, këtë roje konstrukt na lejon të atëherë përfundimi këtë gabim
dhe të kthehet menjëherë.
Po?
>> Audienca: Pra, kjo është lloj e si një në qoftë se pastaj të tjerët?
DAN Armendariz: Kjo është lloj i si një në qoftë se pastaj të tjerët, po,
përveç se kjo URL është atëherë të përcaktuara për çdo gjë nën këtë.
Po të kalojë këtë roje, pastaj atë në fakt do të mbushet me të dhëna
dhe i përdorshëm në e mbetur kod burim në funksion tuaj.
Kështu që unë dyshoj se ju jeni do të të fillojë për të parë këtë roje si.
Dhe të jemi të ndërgjegjshëm se.
>> Pra, vetëm duke kërkuar në një çift të tjera të gjëra, kjo e drejtë këtu është ajo,
mendoni ju, duke u bazuar vetëm në atë ne ishim duke folur për para?
>> Audienca: Mendoni se ajo do të kandidojë në listë?
>> DAN Armendariz: Pra, kjo është afër.
Ky është një funksion që ne po përcaktimin.
Dhe ne jemi inputting këtë funksion si një argument për këtë funksion këtu.
>> Audienca: [padëgjueshme] nëse nuk është zero.
Pra, kjo është në listë, e drejtë?
>> DAN Armendariz: Në qoftë se gabimi nuk është zero, kështu që is-- kështu që unë duhet të lëvizni.
E pra, le të shohim, unë nuk mund të vërtetë shkoni te drejtë këtu.
Gabimi është një argument që është duke u kaluar në këtë funksion anonim.
Ky është një funksion anonim.
Ajo nuk ka emër.
Por ne jemi të pranuar këto tre argumentet, të dhënat, përgjigje, dhe gabim.
Dhe ajo do të kthehet pavlefshëm, kështu kjo nuk do të kthehen asgjë.
Dhe kjo është përmbajtja e atë funksion.
Dhe pastaj ne kemi qasje brenda se funksion te secili prej këtyre argumenteve.
>> Pra, kjo është një shakullinë Turneu i gjuhës.
Por unë shpresoj me këtë, shpresojmë që ju të merrni
një vështrim në disa nga tutorials specifike për zhvillimin e iOS me Swift,
veçanërisht në qoftë se ju shkoni në Web developer page-- Apple
ata kanë një shumë të vërtetë të mirë mësime të merrni ju keni filluar.
Por shpresojmë se vetëm këtë orë e folur në lidhje me sintaksë vetë i ka dhënë
ju të mjaftueshme për të marrë filluar me atë.
>> Ne do të postoj të gjitha të këtij burimi Kodi në faqen e internetit seminarit
sa më shpejt të jetë e mundur, dhe gjithashtu slides kështu që ju keni një referencë për të gjithë ata.
Por fat të mirë me projektet tuaja.
Dhe ju falenderoj të gjithë shumë për të ardhur.
>> [Duartrokitje]