>> [Přehrávání hudby]
>> DAN AMRMENDARIZ: Každý, vítejte na CS50 seminář,
iOS App Development s Swift.
Jsem Dan Armendariz, a já jsem učitel informatiky tady na Harvardu.
>> A další hodina bude vichřice prohlídka tolik věcí
o tomto tématu, jak jsme se vejde.
Budu se po celý zdrojového kódu že budete vidět online ještě dnes.
Mohli bychom nebyli schopni skutečně jít nade vším
že jsem, že jsem ukáže vám v této hodině.
Ale aspoň doufám, že prostřednictvím připomínky zdrojového kódu,
budete moci pokusit se zjistit, co přesně se děje na ty věci
že nemáme dost dostat.
>> Celkově lze říci, struktura dnešní diskuse bude následující.
Začneme se dělat některé základní syntax s jazykem Swift,
jít do některé z více pokročilé Syntaxe Swift jazyka.
Vzhledem k tomu, jazyka je opravdu moderní a to
má hodně vysoké úrovni rysy, věci, které máme ne
je vidět na C v celé CS50, nebo Dokonce i některé jiné jazyky
že jsme začali použití v CS50 jako je PHP,
takže budu muset pokusit zavedly také některé témata, která
jsou vztaženy k jazycích vyšší úrovně že nemusíte vidět do hloubky v CS50,
ale uvidíte později počítačové vědy třídy.
Takže to Bude to zhutnění hodinu.
A prosím, neváhejte mě nechat vědět, pokud máte nějaké otázky.
Takže pokud máte zájem v tom rozvoje
s Swift, nebo opravdu jakýkoli iOS pro vývoj aplikací,
existuje několik požadavků.
Za prvé, musíte používat Mac, běžící v příkladech
že budeme používat dnes, relativně nová verze operačního systému
X. V tomto případě, běžím X 10.5.
Můžete být spuštěn 10.11, pokud chcete.
Ale všechno, co budete viz zapojuje Xcode 7 a novější,
který má nejnovější verzi Swift, který je Swift 2,0.
To je vlastně docela důležitý rozdíl.
Hodně syntaxe má změnilo docela významně
v některých případech od Swift 1.0, který byl propuštěn v loňském roce,
na Swift 2.0, který právě vyšel letos na podzim.
Takže jdeme ukázat Swift 2.0.
Spousta věcí, které hledáte pro online
když se snažíte dostat další informace o různých věcí,
možná budete chtít explicitně vyhledávat Swift 2
spíše než jen obyčejný starý Swift, aby se ujistil, že dostanete syntaxe správná.
>> Ve skutečnosti je tento obecně platí.
K dispozici je rychlý množství vývoje děje v Swift jazyce
Od té doby Apple to propuštěn, myslím, co, je to už něco přes rok
teď.
A věci se změnily dramaticky v tom čase.
A tak nebuďte frustrovaní pokud, když jste rozhlížet
pro témat na Swift nebo jak dosáhnout něco, pomocí některé příklad kódu
nebo něco, že tomu tak není skutečně pracují na Swift 2.0.
Ujistěte se, že jste hledali speciálně pro tuto verzi
pokusit se minimalizovat efekty různých verze a ty druhy věcí.
>> Budu se snažit poukázat jen některé věci které se budou lišit, aby starší verze.
Ale je to něco, co si dát pozor.
To asi bude jeden z největších bolestí hlavy
že budete mít s Swift je zjištění, příklad kódu, který je starší, i jen
o pár měsíců, se snaží používat to v modernějším projektu.
A to prostě nefunguje.
Začínáš chyby kompilátoru, syntax Chyby, všechny druhy bláznivé věci.
Takže prostě být pacient s že, a doufejme, že budete
mají docela pěkné zážitky s Swift celkově.
>> Nyní můžete skutečně join-- a já doufám, jsme vlastně ještě This rok--
CS 50 je Apple app vývojový tým, který
vám umožní instalovat žádné aplikace který vytvoříte na vašich zařízeních se systémem iOS.
Takže se podívat na tuto adresu URL, pokud máte zájem o tom, že.
>> Takže jen pár věci, o Swift sám.
Jedná se o sestaven jazyk.
Ale uvidíte, že některé z funkcí, které používáme
tomu, aby mohla být použita také v trochu jako interpretovaný způsobem stejně.
>> Mnoho syntaxe je půjčil z C. Je založen a napsaný v jazyce C.
A tak jsme se vidět, že existuje spousta takeaways
z vašich současných znalostí z C, který můžeme port Swift.
>> Ale jsou tu věci, které dělat to velmi odlišné od C
Je to velmi silně zadali.
K dispozici je automatická správa paměti.
Nebudete muset používat malloc nebo zdarma kdekoliv.
Je určen pro obecnosti.
Takže jinými slovy, můžete jej použít v nejrůznějších kontextech a situacích, od Apple Watch
iPhone celou cestu až do OS X, a dokonce i některé servery, dokonce i některé skriptování.
Ale uvidíme, že podpora pro skriptování
není tam ještě dost as to je v jiných jazycích.
Takže s největší pravděpodobností budete používat to výhradně pro rozvoj
na počítači Mac nebo iPhone.
>> A to má spoustu moderních prvků.
A mnoho z těchto věcí jsou věci, které budeme se snažit řešit dnes,
ale také naše témata, která upřímně řečeno, můžeme věnovat celé kurzy.
Ve skutečnosti, CS 51, který je nabídl další semestr,
se zaměřuje hodně na těchto tématech , které jsou popsány níže.
Takže můžete strávit celý semestr pochopení těchto věcí.
Ale budeme se snažit dostat přes ně
alespoň tak, že vás může pochopit, co je
děje, když se podíváte na Swift programu
a musí být schopen zaseknout svou cestu přes to pro finální projekt.
>> Nyní jeden z nejlepších způsobů, které můžete získat další informace na toto téma
je upřímně řečeno právě prostřednictvím Apple za předpokladu, dokumentaci k Swift.
Je tu spousta API které jsou k dispozici.
A to je dobrá domácí základna pro vás hledat, konkrétní věci, které
chcete udělat s API zahrnující iOS.
Chcete-li používat fotoaparát příklad, můžete začít hledat zde,
a také používají Google a Stack Overflow, jako byste normálně.
>> Jakékoli otázky týkající se této předtím, než jsme se skočit přímo?
Dobře.
Pokračujme.
>> Takže nejprve, mám Počet například souborů.
A budu se snažit do kroku přes ně relativně rychle.
Toto je soubor Ahoj světe pro Swift.
Je to velmi jednoduché.
Je tu mnohem více komentáře než existují konkrétní kód.
Všimněte si, že skutečná kódu je na samém dně na řádku 14.
To říká, že tisk.
A pak je to volání funkce.
Jsme přecházet do ní Řetězec s názvem Ahoj cs50.
Všimněte si, že je žádné středníky.
Všimněte si, že není int main.
Je tu žádný z Cruft, že jsme měli s C.
Když jsme pomocí Swift tímto způsobem, který je právě napsal v textovém souboru
a uloženy na mém počítači, pak Mohu zkompilovat a spustit jej.
>> Všimněte si, že tady nejsem nepoužíváte CS50 IDE.
To předpokládá, že jsem běh a že jsem na OS X,
a že jsem Xcode již nainstalován Na tomto stroji, aby pro tento
skutečně funkci.
Ale to je jen normální textový soubor že se pak můžeme sestavit a upravovat.
Tak uvidíme, jak to vlastně funguje.
Co když chci, aby to kompilaci?
swiftc 1.swift.
Po chvilce nebo dvou, to uvidí, že máme nyní
sestavil toto do souboru s názvem 1.
A teď jsme tištěný naši CS50, naše Hello World aplikace poněkud.
>> Všimněte si jednu věc jako dobře, je, že ve výchozím nastavení,
jsme neměli zadávat a / n vytisknout nový řádek.
Ve výchozím nastavení je funkce v tisku Swift vytiskne novou linku pro vás.
Můžete předat fakultativní doplňková Parametr to říct, že tak neučiní.
Ale Google pro více informací o to.
Ve výchozím nastavení, bude to dělat tiskovou linku.
>> Dobře, tak pojďme dál pak se na některé jiné.
Tak jak můžeme vlastně definovat proměnné?
Můžeme si dělat, že je to za použití jedné ze dvou metod.
A ten, který chci vám říci, o Prvním z nich je tato definice let.
A to je důležité protože účinně
to, co děláme, je definování konstantu.
Chystáme se vytvořit proměnnou, nebo spíše konstantní s názvem název,
poskytovat k ní některé data-- v Tento případ, řetězec Dan.
Ale pomocí tohoto LET klíčových slov, říkáme
že tento proměnná-- nebo Znovu constant-- nazvaný
jméno je nikdy být změněn.
Je to bude neměnná po celou dobu doba trvání tohoto programu
nebo po celou dobu trvání kontextu
že tato proměnná je k dispozici.
>> To je velmi důležité, že když máte nějaké data, která nejsou
se změní ve vašem programu, a uvidíte celou řadu příkladů
o tom, kdy chceme použít nechat proti druhé syntaxe
je důležité, abyste používali nechat všude tam, kde je to možné, protože to přináší informace
jazyk, který je nebude změněn,
a může ve skutečnosti provést hodně optimalizací
zlepšit rychlost a bezpečnost vašeho programu.
A bezpečnost, myslím nenechám že havárie s bláznivými chybami
že bychom mohli být zvyklí vídat v C.
>> Pak můžeme použít řetězec interpolace zapouzdřit to v řetězci.
Takže můžeme vidět v tom print linka, tisk ahoj,
a pak pomocí zpětného lomítka otevřených parens, a pak jméno mého proměnné,
v tomto případě konstantní, zavřete závorek.
Já jsem v podstatě pak dosazení Obsah této proměnné s názvem jméno
uvnitř řetězce a poté tisk tam výsledek.
>> Je tu ještě jedna další změny tohoto souboru což je to, co mám, na samém vrcholu,
dal do shebang linii, která v podstatě jen specifikuje
že chci použít Swift interpret, který
Znamená to, že jsem se již nemusí sestavit tento konkrétní program.
Můžu jen spustit jej jako jeho vlastního scénáře.
Ale to je v tomto případě, za scény shromažďuje a poté
spuštěn.
Je to jen na nás neviditelná.
>> Dobře, tak pojďme dál.
Takže tam to trochu podvodu že se právě stalo předtím.
Ukázal jsem ti, že mohli definovat konstantu.
A já jsem mohl poskytnout některé údaje na to.
Ale v tomto případě, si všimněte, že jsem to neudělal ve skutečnosti určit typ dat
to je ono.
A to proto, že kompilátor, Swift může
odvodit typ dat jen na základě Na základě údajů, které jsem do něho.
Protože ví, že na základě vyhodnocení této variabilní tady, tato data vpravo
tu, to ví, že je řetězec.
A tak tato konstanta jméno tudíž bude řetězec stejně.
>> Ale můžeme být i explicitní o typu, který je
budeme používat pro konstanty nebo proměnné
pomocí této syntaxe instead-- ať název tlustého střeva String rovná
Dan, což v tomto případě znamená, že jsme bude definovat konstantní názvem jméno.
Bude to být typu String.
A hodnota bude Dan.
Nyní na druhou stranu, které můžeme vytvořit variables--
a to jsou měnitelné proměnné, které znamená, že jsou ve skutečnosti děje
změnit jejich obsah někdy v trvání kontextu
že tato proměnná je defined-- my pomocí klíčového slova var místo pronájmu.
Ale opět, ve výchozím nastavení, pokud nevíte, že je třeba manipulovat, že data,
zkuste použít nechat pro zlepšení výkonu.
>> V tomto případě, mohu pak specifikovat typ dat
že očekáváme, že budeme uvnitř tato nová proměnná s názvem štítek.
Bude to být řetězec.
A budeme se spojíte dva řetězce dohromady, řetězec ahoj,
a řetězec představována variabilní, nebo spíše konstantní název.
>> Takže to je pěkné, protože to je poněkud PHP jako v té my
mají velmi snadné řetězení řetězců.
Nemáme automaticky použít libovolný druh paměťového řízení
zvětšit velikost a dělat nějaký druh legračních věcí tam.
To funguje jak bychom vlastně očekávat.
>> Dobře, nějaké otázky o tom myslíte?
>> Nyní se další důvod, proč potřebujeme, budete mít možnost
aby bylo možné definovat, co typ datových proměnných
Je to proto, někdy ne Chcete inicializovat proměnné
s některými dat na bod definice.
Takže v tomto případě, řekněme že chci začít zadání
Některé stupně do úrovňové knihu.
No já vím, že jedním z proměnné, které chci být
se chystá být proměnlivý stupeň.
A víme také, že my chci, aby to bylo celé číslo.
Ale možná my dosud mají, že stupeň k dispozici.
>> V Swift, musíte definovat typ dat
který je spojen s proměnná nebo nechat na konstantní
Než můžete skutečně použít tuto proměnnou.
Vzhledem k tomu, že je silně napsaný, budete muset připojit typ
s těmito proměnnými.
>> Takže v tomto případě, pokud jsem správně inicializována nejprve s nějakou hodnotu,
pak musím říci, co Swift Očekávám, že typ dat být.
A to bude i nadále že stejný typ dat
v celé historii tohoto programu.
>> Nyní můžete být v pokušení, jakmile Vytvořil jsem tento stupeň proměnnou
a pokud ji má celé číslo 100, teď, pokud I
chcete zkusit zřetězit řetězec s tímto celé číslo,
by mohl být v pokušení i nadále používat že provozovatel řetězec zřetězení
jako jsme to udělali jen pár řádků předtím.
Ale naneštěstí, Tím se vlastně není
pracovat, protože jste v podstatě provádí
operace na dvou různých typů.
>> Nyní je to velmi odlišné od jiných jazyky jako PHP, které jsou opravdu
loosey goosey s jejich druhem typů.
Jsou stejně jako, jo, co, je mi to jedno.
Dej mi jeden typ, a možná budu dělat správnou věc.
>> V tomto případě, je Swift velmi přísná o typech
že máte co do činění s.
Tento operátor shrnutí nebo operátor zřetězení
má v podstatě několik různých možností.
Můžete to udělat shrnutí s celými čísly, nebo
může dělat zřetězení, a možná některé další věci stejně.
Ale pokud tento subjekt neuznává co je na jedné straně toho,
nebo spíše jejich kombinaci dva druhy, není to, co to je očekával,
pak to bude způsobit selhání.
>> Takže v tomto případě, co to znamená mít řetězec plus celé číslo?
Výhodně v kontextu toho jsme pravděpodobně chtít
udělat operaci řetězec zřetězení.
Ale samozřejmě je počítač nemá tento druh kontextu.
A proto je třeba poskytnout že dodatečné informace
aby mu vědět, co to je to, že chceme dělat.
>> Takže jinými slovy, skutečnost, že Swift je silně zadali
znamená, že musíte udělat trochu další práce
aby si to k provozu tak, že byste chtěli.
Avšak v důsledku toho, že je bezpečnější.
A až budete mít vzít v úvahu tyto typy,
věci prostě upřímně začít se docela dobře fungovat.
>> Takže v tomto případě, a pak by se nám provést zřetězení
výslovným odléváním celé číslo do řetězce
od zabalením do této kapitál funkce S String,
a pak pomocí metody zřetězení operátor změnit naši štítek proměnné,
a pak ho vytisknout.
>> Zatím je vše dobré?
Dobře, pojďme dál.
>> Nyní existuje celá řada údajů typy, které můžeme použít v Swift.
Jak jste si zvykli na, můžeme vytvořit proměnlivý pole.
Pouze A to pole může obsahovat jediný typ.
>> Takže v tomto případě, budeme vytvářet mutabilní pole celých čísel, které
budeme nazývat známky, a my budeme schopni pro ukládání, že v tomto hranatých závorkách
Formát jak jste Zvykli v různých jiných jazyků.
Ale všimněte si, že tady jsme definuje několik věcí.
stupně je proměnlivý proměnná-- nebudeme používat nechat klíčové slovo.
Takže to znamená, že můžeme potom upravit Obsah tohoto pole.
To je typu Array Int, a můžeme říct, že
na základě zde těchto hranatých závorkách.
>> Nyní jeden z pěkných věcí na tom je, že jsme
mají přístup k mnoha dodatečné informace
o pole jen pomocí některé jednoduché tečka notace.
Tak například, grades.count poskytuje nám
počet položek, které existují v tom, že pole, které pak můžeme přistupovat pěkně
snadno jednoduše pomocí této dot notace.
>> Chcete-li přidat další položky na tomto poli,
nemůžete dělat styl PHP kde stačí explicitně definovat,
při daném indexu, nějaká hodnota které chcete vložit.
Místo toho použijte append metoda v typu pole
připojit této položky, 95, do tohoto seznamu.
>> Takže teď to pole má následující contents-- 100, 0, 90, 85.
A teď jsme připojen 95 se, že stejně.
>> Existují i ​​jiné způsoby můžeme připojit věci.
Můžete skutečně používat operátor sčítání,
který bude interpretován jako operace pole přidávacího.
A pak můžete připojit další pole, jehož obsah je 70 a 80,
do této matice.
Takže teď máme obsah v této proměnné
grades-- 100, 0, 90, 85, 95, 70, a 80.
To je jen pěkný malý syntaktický cukr, který Swift poskytuje k nám.
>> Takže pokud chceme sečíst stupně, jsme snad
bude chtít opakovat nad každou položku v této smyčky.
A my to mají v Swift, pojem ze smyčky for, jak byste očekávali.
Ale způsob, jakým jsme naznačují, rozsah se mírně liší.
Takže v tomto případě, aby Stručně řečeno všechno, budeme
chystáte vytvořit dočasný proměnná nazývá suma, aby nás
udržet tento počet.
>> A všimněte si naši FOR stavba zde smyčka.
Pro index v 0 .. <grade.count.
Takže tato konstrukce, 0 .. <grades.count je rozsah operace, kde jsme
říká, že budeme vytvářet rozsah čísel od 0 nahoru
se ale s vyloučením grades.count.
Takže to bude mít hodnotu 0, 1, 2, 3, 4, 5, až do nicméně mnoho jeden
Před grades.count.
>> Takže tohle je něco jiného než to, jak jsme se se obvykle používají pro smyčky
tam, kde byste mít nějaký index proměnná, nastavte ji na hodnotu 0 na první,
a pak integrovat že až někteří hodnota menší než počet položek
v tomto poli.
>> Takže tam je modifikace k tomu, ve skutečnosti,
což nám umožňuje velmi snadno nastavit různé typy rozsahů.
Pokud změníte tento rozsah do tři tečky, 0 ... grade.count,
to představuje rozsah 0 na grades.count včetně,
což znamená, že toto číslo je také pak zahrnuty v tomto rozsahu.
>> Ale to je velmi šikovný Pro tyto přesné věci,
když máme provést iterace přes smyčku
protože tyto indexy jsou indexovány nula, jak jsme viděli v jiných jazycích
také.
Jakékoli otázky týkající se této pro smyčce?
>> Takže tam je implicitní definice tohoto indexu proměnné,
jejichž hodnota začíná na 0, a pokračuje v každé smyčky iteraci
zvýšit o 1 až do bodu, která se rovná grades.count,
na kterém místě, smyčka přeruší.
>> Všimněte si, že v našem řetězci Interpolace tady,
skutečně můžeme provést některé jednoduché manipulace na tyto hodnoty.
Takže index plus 1 budou skutečně provést shrnutí uvedené hodnoty
proto, že index je, v Tento případ, celé číslo.
A v tu chvíli, že bude pak být převedena na řetězec
a interpolovat do tohoto řetězce tady, a vytisknout tak, jak bychom očekávali. ,
>> A pěkná věc o pole je zde
že jsme také schopni mít Načítání hodnot a nastavení hodnoty
pomocí hranatou závorku zápis jako jsme viděli v jiných jazycích.
>> Dobře, takže odsud, máme nyní vypočítat náš součet všech našich tříd.
Nyní druh příští logickým krokem by bylo
udělat operaci divize najít se průměr těchto tříd.
Ale něco důležitého Zde se děje, které
je to, že tato částka je možná celé číslo.
Ale my potřebujeme provést některé druh dvojího divize.
A to bude nesmírně důležité, když
Chceme k provedení této operace, protože to, co říkáme
je to, že musíme skutečně provést rozdělení na dva dvoulůžkové.
A znovu, protože Swift je velmi silně napsaný,
musíme explicitně nastavit všechny položky k čtyřhře předtím jsme vlastně
provedení této operace.
>> Tak, aby pro nás vykonávat dvojí rozdělení,
že to není dostačující jen jeden z těchto položek za double.
Oba mají být double v pořadí pro SWIFT
být jisti, že tento je to, co chceme dělat.
Tak jsme se pak explicitně obsadit částka, kterou jsme vypočítán výše
a počet tříd až zdvojnásobí, a proveďte této operace a obchod
že do této nové proměnné, nebo spíše tato nová konstanta s názvem průměr,
který bude mít jaký typ, si to představit?
Dvoulůžkový pokoj, jo.
Takže v tomto případě jsme Nemusíte to specifikovat
protože to může být odvozena z Provoz jaký typ průměru dat
bude.
A Swift je obecně docela dobrý o tom, že schopný odvodit typy.
>> Chcete vidět běžet, nebo mohu jít dál?
Chci jít dál.
Jakékoliv dotazy týkající se něco z toho?
Skvělý.
>> Teď budeme začít se dostat do dobré stuff-- definování funkcí,
a několik dalších typů, které jsou jedinečné Swift, že nemáte
viděný v jiných jazycích až do tohoto bodu,
ale jsou přítomny v jiné jazyky, které můžete najít později.
Takže první, pokud chcete, pro definování funkce,
ji definovat společně s funky slovem funkce, a pak název funkce,
a pak se v závorkách, argumenty Chceme, aby funkci přijmout.
Tyto argumenty musí také specify-- generally--
musí rovněž určit typ dat, která jsou, pokud lze dovodit.
A uvidíme, že jen málo námitka v jen trochu.
>> Takže v tomto případě máme Funkce tzv printGradeCount.
Budeme akceptovat proměnná-- nebo spíše v tomto případě,
constant-- volal zadávání známek.
A to bude mít zadejte pole celých čísel.
Teď je tu něco, že je opravdu důležité zde
že chci, abyste pochopili.
To je to, že ve výchozím nastavení, jsou tyto argumenty které jsou vstupy do této funkce je
definované s implicitní nechat klíčové slovo, což znamená, že nemůžu změnit to
gradebook variabilní zde.
A to nějak dává smysl, protože jste předávání dat dovnitř.
A možná to nechci který má být změněn z pod tebou.
Je možné výslovně uvést že se jedná o proměnnou tím, že
VaR klíčové slovo zde.
Ale to je chyták, že jsme všiml lidé dělali v minulosti
je, že se předpokládá, že to bude být proměnná, když ve skutečnosti to
je konstanta.
>> Dobře, takže tady pak, v tomto případě, nejsme určující žádný typ návratu.
Ukážeme vám, jak na to že za chvíli.
Ale všimněte si, že tady máme jen jednoduchý, pokud stavu.
V případě, že je gradebook prázdný, což v tomto případě
je jen vlastnost tohoto integer pole, pak vytisknout něco.
V opačném případě budeme dělat něco jiného.
>> Velice jednoduché tak daleko myslím.
Ale mě zastavit, pokud máte nějaké otázky.
>> Nyní je tato funkce, průměr, také bere některé parametry, nebo spíše jeden argument,
což je gradebook, a tentokrát se chystá vrátit dvojí typ.
Vzhledem k tomu, že je výpočetní průměr a to je
bude skutečně vrátit, že Vypočítaný průměr volající linky.
>> V tomto případě jsme specifikovat vrátit typ po šipkou.
A to mohou cítit trochu divný na prvním místě.
Vyrostl jsi zvyklá ke stanovení návrat
zadejte před název funkce.
Ale pokud si myslíte, že to co se týče matematiky,
jako když máte matematiku , které definují funkci,
máte funkci s některými vstupy, a to produkuje výstup.
A to je přesně to, co toto má napodobit.
A je tu pár dalších jazyků které mají podobnou syntaxi stejně,
ale asi nikdo, že jste viděli na CS50.
Ale stále nemají být zmateni tím.
Šipka znamená, že to, co se děje které mají být vráceny v tomto případě.
OK, tak jak budeme vypočítat tento průměr?
No, pokud se gradebook prázdný, no a pak jsme
vracet 0, což možná rozumný způsob, jak zacházet toto.
Nevím, pojďme přijít zpět, že v trochu.
To může ve skutečnosti není být rozumný způsob,
vypočítat průměr, pokud máme prázdnou zadávání známek.
>> Pak prostě budeme hrát naši shrnutí.
Všimněte si, že tady jsme vlastně mají alternativní verzi
pro smyčce, což nám umožňuje iteraci nad každou jednotlivou položku v poli
a umístit každý prvek do vlastního proměnné.
Zadáním pro platové třídy gradebook, co říkáme
je to, že budeme implicitně vytvořte novou konstantu nazvanou
třída, která bude reprezentovat každý jedinečný položka v Gradebook
pokaždé, když cyklus for iteruje.
Takže poprvé, že je to běh, bude třída
jako první položka v Gradebook.
Podruhé, že to bude Druhým bodem, tak dále a tak dále
až gradebook má vyčerpala prvků.
Pak budeme moci sečíst, že třída do našeho součtu proměnné
a vrátit Náš průměrný jak jsme viděli dříve.
OK, nějaké otázky?
Ano?
Diváků: Mám dvě otázky.
Číslo jedna, hypoteticky, může spuštění celé číslo na tohle?
Nemusí to být double, je to pravda?
DAN AMRMENDARIZ: Můžete zopakovat na tuto otázku?
Diváků: Mohu celé číslo, jako je průměr?
DAN AMRMENDARIZ: Můžete dělat celé číslo jako průměr?
Takže vrátit celé číslo Průměrná namísto double?
>> Publikum: Return-- vás mají, že právě teď níže.
DAN AMRMENDARIZ: Přímo tady, návrat 0.0?
Publikum: Jo, jen vrátit 0.
Takže to bude buď 80 nebo 85, ale ne 85,2.
>> DAN AMRMENDARIZ: Takže v tomto případě, takže je tu pár různými způsoby
odpovědět, že.
Dovolte mi, abych na ně odpovědět v pořadí.
Takže když jsem se, aby tento návrat 0, a 0 je celé číslo.
A tak, že způsobí, že Chyba typu pro tento případ
protože se očekává dvojité ale se pak vrací celé číslo.
Pokud bych se chtěl vrátit celé číslo, můžu.
Mohu nastavit návratový typ do int, vrátit 0 zde
a neprovede dvojitou divize.
Ale pak bychom byli dělá celočíselné dělení.
A tak jsme pak by se dostat Průměrný že bychom možná očekávali.
Ale ano, můžeme modifikovat typy tímto způsobem.
>> Publikum: A za druhé, vás mají jeden dvoulůžkový na vrcholu.
Ale dole, když vás dělat vrátit Dvoulůžkový,
to je už automaticky vrácení Double formátu.
Proč stále musíte definovat s šipkou na vrcholu s manželskou?
>> DAN AMRMENDARIZ: So V případě, že je to součást
z the-- tak opakovat otázku, protože je to implicitní z návratu
typy zde, jaký typ to vlastně je, musíme být explicitní s Swift
o tom, co chceme vrátit z této funkce
tak, že když se provádí psaní kontrola, to může ujistěte se,
že to, co jsme vlastně napsal dole vlastně odpovídá to.
Takže je to něco jako šeku sami se nějak situace.
Ale tam are--
>> Diváků: [Neslyšitelné] šíp?
>> DAN AMRMENDARIZ: existují případy, kdy můžeme určit, že můžeme implicitně
nastavte typ návratu.
Ale v tomto případě, vůbec se mi nelíbí si myslí, že by to fungovalo.
Je tu nějaký jiný syntax že uvidíme později.
>> Dobře, takže tento zdroj kód je trochu jiný
protože tento analyzuje argumenty z funkce, která voláme.
Dovolte mi, abych vám ukázat, jak to funguje Než jsme se vlastně dál
na některé zajímavé věci že se děje v Swift.
>> Takže v tomto případě, když jsem jen spustit tento kódu, Všimněte si, že to, co dělá
je-- zatímco to druh dává mi divný chybu.
Musím předat pár celá čísla jako argument příkazového řádku.
Tak uvidíme, 150 a 80, a stiskněte klávesu Enter zjistit, co je to vlastně dělá.
Je to přijetí každého z tyto hodnoty jsou celá čísla.
Je vkládání je do Gradebook.
A pak je to předvádění že průměrný výpočet
a výstup, který, jak bychom očekávali.
>> Ale samozřejmě že se něco děje na této zamítá něčím
něco jako celé číslo.
Jak jste si možná pamatujete z doby, kdy jsme byli jednání s argumenty příkazového řádku
v C a dalších jazycích, úplně první 0-tý položka v tomto argumentu příkazového řádku
Seznam je název příkazu že jsme vlastně popraven.
Takže v tomto případě, já jsem jen opakování přes všechny argumenty příkazového řádku se.
Ale já nedělám žádný druh Fancy zkontrolujte, přeskočit, že první z nich.
Jsem jen explicitně nebo implicitně, že jsem kontroly, které z těchto typů
jsou celá čísla, než jsem ve skutečnosti provedení tohoto výpočtu.
>> A to je v podstatě co se tady děje.
Pro každý argument argumenty procesu,
Budu vykonávat nějakou kontrolu.
A v tomto případě, jdu pokusit se nejdříve převést
tento argument na celé číslo od provedením explicitní obsadit,
proto, že je, na vstupu, řetězec a nikoli ve skutečnosti celé číslo.
>> Ale to je trochu divný syntaxe, pokud nechat dílek odpovídá Int (argumentu).
Co se vlastně děje zde je extrémně
důležité, aby vaše pomocí Swift.
To je to, co je s použitím volal volitelný typ.
>> Takže tato funkce Int (argumentu), vrátí nejen celé číslo, ale vrátí
co se nazývá volitelný celé číslo.
A tak to je druh typu na vrcholu typu.
Můžete nějak si to představit jako je to vrací jako balíček.
A když otevřete, že balíček, buď
má celé číslo, které je výsledkem, nebo má v ní absolutně vůbec nic.
A to je užitečný jako kontroly chybový mechanismus, protože v tomto případě
můžeme zjistit, byl tento typ konverze úspěšná?
Pokud by to bylo, pak to je ve skutečnosti bude mít celé číslo uvnitř.
V opačném případě, že to bude mít nějaký hodnota, kterou budeme nazývat nevyužity,
vyjadřující není celé číslo vůbec.
Je to opravdu reprezentativní ničeho.
>> A tak, pokud konstrukce nám umožňuje rozbalit ten balíček,
že volitelná vazba.
A pokud jsme schopni rozbalovat, že balit a najít celé číslo uvnitř,
pak to, co říkáme Zde je, že jsme se pak
dovolit, aby hodnota, která bude uvedena do tato konstanta s názvem stupeň.
A tato část if, horní část if
poběží, protože to Vybalte byl úspěšný.
>> Pokud to jen tak se stane, že došlo k chybě možná
V tomto explicitní konverzi typu z řetězce na celé číslo, možná
je to hodnota ABC např.
A to vlastně nebude převést na celé číslo.
Pak se vrátí nil, což není celé číslo.
A to if i poté nezdaří.
třída nebude existovat, protože nemá celočíselné obsah.
A to bude spustit tento jiný blok místo.
Ano?
>> Diváků: Nil je N-I-L?
DAN AMRMENDARIZ: nil je N-I-L, ano.
>> Takže to je možná jeden z nejtěžších věcí, o Swift,
zvláště když jste v plevele na app iOS
a jste vlastně pokoušíte udělat nějaké rozvoje tam.
Je to bude řvát na tebe asi nepovinná.
Je to bude vás s žádostí o otazníky a vykřičníky.
Ale jakmile jste zjistili out-- pokud vás věnovat nějaký čas přemýšlením,
co se děje s volitelnými typy, ušetříte si spoustu bolesti hlavy
jak se snažíte napsat aplikaci v Swift.
>> Je to vlastně velmi výkonné funkce.
A budete mít jen vzít mé slovo pro to nyní.
Ale uvidíme tuto konstrukci a někteří jiní to líbí
V některých jiných zdrojového kódu, který vám ukážeme v jen trochu.
>> Jsou nějaké prvními otázkami tady?
Takže důležité, je to, že jídlo s sebou volitelný typ je jakýsi metatype.
To má buď hodnotu, a pokud ano, pak to
bude možná muset tuto hodnotu spojenou s tím, nebo to nemá žádnou hodnotu vůbec,
a je reprezentována nulovou.
Zbytek je možná jak byste očekávali.
>> Takže pojďme rozjet obtížnost ještě jednou.
A tentokrát, pojďme se podívat na některé Jiné typy dat, které skutečně existují.
Jedním z nich je slovníky, který je velmi podobný Pythonu slovníků.
Je to trochu podobné hash tabulky v C. Je to v podstatě mapování kláves
kde klíče mohou být řetězce.
A když se podíváte na ty klíče, tyto klávesy bude mít hodnotu.
Takže to není úplně pole, ale místo toho, více úzce spojena
na mapu hash nebo hash tabulky.
>> Podívejme se, jak se to má do práce, než jsme vlastně
jít do zdrojového kódu samotného.
Pokud bych jen spustit to, nic se neděje.
To mi říká, že jsem očekával některé parametry následujícího typu.
Takže budu poskytovat to nějaký problém nastavit jména,
tak pset0, možná jsem dostal 100.
A pset1, mám 5.
A pak se na zkoušku, I dělal opravdu dobře a dostal 30.
A pardon, jsem trefil prostor zde.
>> Když jsem stiskněte klávesu Enter, můžete vidět že provádí některé výpočty.
To říká, že jsou tři gradebook stupně, pset1, pset0, zkouška.
A gradebook má tento specifický průměr.
Takže znovu, pracujeme s tímto Gradebook myšlenkou,
ale budeme pokračovat v iteraci s složitosti naší funkce.
>> Takže na začátku, jsme jen bude vytvořit funkci, která
je zodpovědný za tisk použití.
A tam je to východ funkci, která bude jen
násilně ukončit aplikaci.
To není něco, budete používat v iOS app.
Toto je pouze v tomto případě, s argument příkazového řádku.
Dále začneme směrem k Xcode.
Ale to je specifický pro příkazu čáry program Swift.
>> Pojďme se podívat na některé z zajímavé věci zde.
Pojďme se podívat, jen pár zajímavé věci zmínit snad
je to, že ve své funkci tisk počtu stupňů,
můžete připomenout, že jsem měl ten seznam z items-- pset1, pset0 a zkouškou.
Můžete skutečně rychle a to snadno udělat
tím, že na zadávání známek, což je Slovník, který má klíče a hodnoty.
Najít všechny klíče je přes Metoda, kterou zde dot klíče,
a poté použijte tuto joinWithSeparator, které se pak všechny klíče
které jsme psali v, pset1-- nebo Omlouvám se, pset0, pset1, a exam--
a zřetězit je dohromady pomocí čárku a mezeru
vytvořit jeden dlouhý řetězec.
To připojit operace je jen fenomenálně užitečné v různých souvislostech.
A tak je to právě tato joinWithSeparator.
>> A to je jedna věc, která je změnilo od Swift 1 Swift 2.
Tam bývala Python style-- pokud jste
obeznámeni s Python-- python styl připojit metodou na řetězcích.
Ale to už není případ Swift 2.
Chcete-li použít, pokud chcete, zřetězit řadu věcí
spolu s řetězcem.
>> Tak snad pak v naší diskuse o průměru dříve,
to dělá trochu větší smysl pro nás nastavit průměrnou funkci
být případná dvojná spíše než jen explicitní double.
Vzhledem k tomu, že jsme měli neobvyklý stav, kdy,
Co když gradebook vlastně nemá žádné hodnoty v rámci ní?
Jaký by měl průměrný výnos?
>> No, možná budete v C by udělal něco
jako předpokladu hodnotu Sentinel jako 0,0, nebo možná záporné číslo,
nebo něco, co jen reprezentovat skutečnost, že tam byla nějaká chyba podmínku
a vy možná nejsou ve skutečnosti mít schopnost vypočítat uvedený průměr.
No krása zadáním volitelný typ by se to udělat.
A já jsem teď říkal všechna tato slova, ale to vlastně nepoužívá Volitelně.
Ale uvidíme, že v právě minuty, kde můžeme nastavit průměr
být nepovinný datový typ tak, aby pokud to vlastně vrací některé údaje, pak
vrátíme se, že data.
V opačném případě se vrátíme nil, říká, že toto
nemá žádný smysluplný výpočet.
>> Pojďme k něčemu jinému.
Takže z tady, jsme se při pohledu na všechny tyto příklady v příkazovém řádku.
Ale opravdu to, co budete se bude zabývat, je Xcode.
A jedna z pěkné věci o Xcode je, a konkrétně v Swift,
je, že máme tento čemu se říká dětské hřiště.
A dětské hřiště, je vůbec app iOS.
Ale to vám umožní experimentovat s Swift ve velmi jednoduchým způsobem.
Můžete zadat všechny vaše kódu.
Je to pěkně syntaxi zde zvýrazněny.
Při vytvoření nového souboru, zeptá se vy, pokud chcete vytvořit dětské hřiště.
Ale pěkná věc, o Playground je to, že na pravé části okna,
to vlastně ukáže, Výstup z kódu.
Takže když jsem se posunout dolů, můžeme vidět, co výstup různých řádků kódu
ve skutečnosti se stane být.
>> Takže v tomto případě, jdeme změnili směr jen trochu
a mluvit o něčem, co je opravdu důležité této vysoké úrovně způsobem
že Swift provozuje, a to je tento nápad, uzávěrů.
A pravděpodobně jste viděl trochu v JavaScriptu.
Pro ty z vás, které jsou v CS50, uzávěry
jsou velmi populární, velmi dobrý způsob, jak dělat na vysoké úrovni, co v moderních jazycích.
Ale je to také trochu obtížné zabalit hlavu kolem poprvé.
Takže pokud se podíváme na to Poprvé, to je v pořádku.
Stačí se podívat na zdrojový kód a vidět pokud můžete přijít na to doma.
>> Takže v tomto případě, řekněme, že jsme chcete vytvořit mnoho exponentů
s nějakou pevnou hodnotu.
Takže v tomto případě mohu vytvořit funkci.
Budu říkat moc 2, jejichž jediným cílem v životě
je vzít nějaký vstup a double to, a vrátí tuto hodnotu.
Všimněte si, že jsem tady přijímá jeden typ dat.
Bude to být proměnná s názvem x.
To je typu Double.
A já jdu vrátit dvojitým zde.
A já jsem prostě jít dělat velmi, upřímně řečeno, docela
naivní způsobem zdvojnásobit tuto hodnotu.
A já vám ukážu, proč tento je užitečné v jen sekundy.
>> Všimněte si, že zde máme tuto nabídku znovu. něco v 1, dot
dot dot, 2, což znamená, že tato smyčka bude probíhat dvakrát.
Ale to představuje fiktivní proměnnou.
To znamená, že jsem to opravdu bude lze pomocí tohoto proměnné kdekoliv
uvnitř této smyčky.
Chci jen tento řádek kódu spustit dvakrát,
aniž by museli vědět, je hodnota tohoto rozmezí.
>> Takže v tomto případě Běžím výsledek časy x dvakrát, které v podstatě
Znamená to, že jsem kvadratura tuto hodnotu.
A to se stane práce, jak bychom očekávali.
Síla 2, předáním hodnoty 2.0 nám dává výkon 4.
3.2 práce pro 10,24.
>> Teď si můžeme dělat podobné věc pro sílu 3.
Ale teď změní pouze rozsah.
Pro dummy proměnné v 1 až 3, násobit 3 krát,
a udělat to samé.
>> Takže to může cítit trochu nepřirozený.
Ale je to důležitá věc, která zde
je to, že při pohledu na tyto dvě funkce, je tu
jen jedna věc, to je něco jiného, která je tato hodnota v rozmezí.
Vše ostatní o těchto dvou Funkce, výkon 3 a síla 2,
jsou ve skutečnosti, shodné, nebot pracují stejným způsobem.
>> Takže v tomto bodě, trochu poplach je třeba jít pryč.
Doufejme, že to, co říkáte, Víte, to cítí trochu
jako zdvojení úsilí.
Možná, že existuje způsob, že bych bylo možné zapouzdřit to vše
a zajistit funkci nebo vytvořit funkci, která
dělá přesně to, co chci, aniž museli psát to explicitně.
A to je to, co síla o uzavření nám umožňuje dělat.
Takže pojďme se podívat na to.
A já budu strávit pár minut na to, protože to
je docela důležité pro Swift.
Vidíme to po celou dobu.
Chystáme se definování funkce.
Bude to být nazýván powerOf.
Bude to akceptovat Parametr volal y typu int.
Ale podívejte se na návratový typ.
Návratový typ je v závorky, dvojitou šipku Double.
Což znamená, že tuto funkci, tato funkce powerOf,
vrací funkce.
To znamená přijetí Double a vrácení Double.
Takže to může znít druh šílený, ale pojďme nalistujte trochu
a podívat se, co se stane.
Jsme uvnitř této funkce powerOf.
Jsme vytvoření nové funkce volal exponentiator,
ale nezáleží na tom, co to je.
>> Všimněte si, že tento má vstupní hodnota x.
A to je přičemž v dvoulůžkovém a vrácení Double.
A to je stejný kód, který jsme viděli výše, kromě toho, že na hodnotu 2
nebo hodnotu 3, a to horní hranici v tomto rozmezí,
byl nahrazen tato hodnota y, který
byl první parametr naší powerOf funkce.
A v tomto bodě, my vrátit exponentiator.
Jsme vrácení funkce.
>> Je to něco jako malý mysl vyfukování.
Ale pojďme si představit, co se stane, Když jsem tuto funkci volat powerOf
a přecházejí do něj nějakou hodnotu jako 2.
Co to znamená, že Mám nyní hodnotu
2 pro y, což znamená, že tuto hodnotu y v této funkci exponentiator
bude to, že hodnota 2.
Ale Vracím to Funkce exponentiator.
>> Takže upozornění, co Swift říká, že vytvořili v tomto případě.
nechť náměstí je definice, že je to funkce, která přijímá Double
a vrátí double.
Vytvořil jsem funkci že čtverců něco
použití tohoto mechanismu tady.
A opravdu to, co se děje, je že se vrací tuto funkci
exponentiator, ale tato hodnota y je zabalen uvnitř ní.
A tak teď pokaždé, když jsem použít proměnná nebo tato konstanta s názvem
čtverec, to bude to chovat jako funkci.
A tak jsem se pak volat, že proměnné jako bych nazval funkci,
a předat do něj číslo, jako je v tomto případě 3.
A já se pak náměstí tuto hodnotu.
Takže 3 druhou pak stát 9, jak můžeme vidět zde.
>> Opravdu blázen, ale teď Umožňuje mi příležitost
vytvořit jiné powerOf funkce.
Jako mohu říci, v pořádku, no teď chci vytvořit novou funkci, powerOf (3),
a uložit, že na A konstantní nazvaný krychle.
A teď krychle bude být samostatná funkce, které pak bude
trvat nějakou hodnotu jako vstup a krychle hodnota jako můžeme vidět na dolním řádku
zde.
kostka 2 bude mít za následek 8.
>> Doufejme, že docela pěkné věci.
Vy jste nikdy neviděli.
Doporučuji vám podívat se do uzávěry a zkoumat to trochu víc.
Je to opravdu silný věc vidíme hodně v JavaScriptu a některých jiných jazyků.
Je to opravdu velmi důležité pochopení API stejně
že se dostaneme do pár sekund.
Ano?
>> Diváků: Pokud tak učiníte powerOf (2), závorka, a poté
další závorka, další input-- jste v podstatě výměnou náměstí.
DAN AMRMENDARIZ: Tak se podívejte na poslední řádek zde.
Je to ve skutečnosti zcela možné tomu, že řetězení, jak jste navrhl.
Takže powerOf (5), znamená to, že jedeme mít exponentiator z 5 sem.
Takže to je v podstatě bude být totéž jako 4 až páté síle,
proto, že jsme vytvořili exponentiating fungují tak, že na páté silové,
a my jsme přechází do , které fungují na hodnotu 4.
A dostaneme tuto hodnotu že očekáváme, 1024.
Diváků: A není to jméno, tak to usnadňuje
číst, náměstí cokoliv.
>> DAN AMRMENDARIZ: Správně, přesně tak.
Takže předtím, než jsem jen dát to do tady, takže konstantní
že to dělalo to snadné, že název.
Ano?
>> Publikum: V této souvislosti powerOf, je to část
programovacího jazyka na rozdíl od toho, jak
myslet na powerOf v [neslyšitelných]?
DAN AMRMENDARIZ: So V tomto případě, powerOf
je jednoduše název z Funkce, které jsem definována tady.
Takže to není vlastní na jazyk sám,
ale místo toho, je to jen funkce, která má
že název proto, že jsem dát mu to jméno.
Nějaké další otázky?
Dobře.
>> Nyní je to skvělé.
Ale vy nebudete vidět Mnoho závěrečných funkcí, které
jsou jako to, kde můžete definovat, uvnitř jedné funkce, jiné funkci.
A můžete to udělat.
Ale je to trochu není opravdu nutné, je to tak?
Stejně jako proč se definovat to Funkce tzv exponentiator
a pak se hned vrátit.
Proč nemůžu prostě hned vrátit tuto funkci?
>> A ve skutečnosti, to je právě myšlenkou koncepce s názvem
anonymní funkce, kde anonymní funkce nejsou ve skutečnosti
mají jméno, protože oni Nemusíte mít jeden.
A tak je v tomto případě, v 7B, můžeme najít přesně to.
Je to všechno stejný kód, dělá přesně totéž,
ale teď jsme to změnil lehce tak že tato funkce powerOf okamžitě
vrátí funkci.
Všimněte si, že po návratu, tam je otevřená složené závorky.
Je to očekává tento vstup Double.
Je to očekává, že produkce Double.
A pak se v klíčové slovo odděluje kód sám o sobě.
Tak tohle je anonymní funkce.
To není ve skutečnosti mít jméno, zatímco předtím to bylo voláno exponentiator.
Ale jak jsme viděli, jen opravdu neuvedla exponentiator
vně této funkce.
Takže na tom nezáleželo.
Takže to anonymní funkce takzvaný protože to je bezejmenný,
ale je to stále používá v kontextu tohoto kódu.
>> Další pár z nich jsem bude pokračovat doufejme
foukání vaše mysl trochu.
Můžeme zjednodušit to ještě více.
Vzhledem k tomu, jak byl bystře již dříve poukázal,
Možná jsme skutečně vědět, o vyvodil z tohoto kódu, co
Výstup tohoto kódu bude.
A ve skutečnosti, v tomto anonymní funkce, lze v podstatě odvodit typy dat.
>> Takže v tomto jednom, my už je třeba explicitně definovat
typ dat, která je bytí Vstup a výstup z této funkce
na pár důvodů.
Jedním z nich je, že jsme je definován, a to až u Prototyp funkce obvodového,
jaký typ dat tohoto anonymních funkce by se vstup a výstup.
A z druhého, jsme lze vyvodit z kódu
tady dole, že přijímáme vstup, který je typu Double
a vrácení Double.
>> Všimněte si, že tu máme není výslovně definované názvy argumentů
že tato funkce je přijímat.
A tak vidíme, můžeme odkazovat na tyto parametry pomocí $ 0, $ 1,
tak dále a tak dále, v závislosti na počet tohoto parametru používá
v této funkci.
>> To je něco, co se děje vidět hodně, je to otevřený kudrnaté držák
Definice po němž následuje $ 0, a pak některé operace,
a pak uzavřený složené závorky.
To je anonymní funkce který provádí tuto operaci.
To má tento parametr kde je to typ je odvozený.
To první parametr je $. 0
A některé operace je děje, že $. 0
>> Diváků: Takže znak dolaru znamená parametr v podstatě,
a 0 znamená první?
DAN Armendariz: To je správné.
Takže znak dolaru v podstatě znamená, parametr, a 0 znamená první.
Ale funguje to konkrétně Tento případ, kdy jsem se jmenoval
argumenty v mém anonymní funkce.
>> Diváků: Má Perl nebo něco máte Tento znak dolaru, dolar 0 tam?
DAN Armendariz: Má, který je mi líto?
Diváků: Má mít Perl Tento dolaru 0, dolar 1--
DAN Armendariz: Nejsem příliš obeznámeni s Perl,
ale PHP, co definuje proměnné založený na dolaru.
A tam mohou být některé jazyky že mají vlastnosti, jako je tato.
Ve skutečnosti, Swift vypůjčuje mnoho funkcí, jako je tento
z mnoha dalších jazyků.
Vidíme náznaky Python v něm.
Tato definice typu Zdá se, že pochází z OCaml.
A máme jen spoustu věci z mnoha různých jazyků.
To je jeden z pěkné věcí o Swift
je, že to trvá hodně z nejlepších nápady od banda jazyků
a shoehorns je všechny dohromady do jednoho super-jazyka.
Ve skutečnosti, pokud dovolíte, aby pokračovat fouká svou mysl,
takže jsme dělali vše.
Můžeme snad zjednodušit to trochu bit by si uvědomil, že, samozřejmě,
Swift má exponentiating funkce postavena v roce.
Kdybych importovat Darwin, který je jen knihovna
Nabízí této funkce s názvem pow, nyní Mohu zjednodušit svůj výkon funkce
být následující.
To se bude vracet tato anonymní funkce.
>> Ale podívejte se na to, jak jednoduché to je teď.
To je anonymní funkce, která přijímá nějaký druh dat,
a bude jedno Argument specificky,
odkazoval se na $ 0, která je typu double.
To se chystá vrátit typu Double.
Avšak návrat prohlášení Nyní je implicitní.
>> A to je to přesně styl, který se je velmi, velmi převládající v Swift,
všude.
Jedeme do vidět po celou dobu v Swift.
Takže jsem ukazovat tohle všechno jste kvůli této syntaxe.
To je velmi časté vidět, což znamená, že jej
je anonymní funkce který provádí
některé operace na těchto argumentů.
A tam je implicitní výnos.
Tak to je naprosto totéž Pro nás to říkám, tady.
>> Protože tato kudrnaté Držák je funkce,
Jsme provést tuto operaci Na první argument.
Budeme se vrátit to.
Ale toto vnější přiznání je vracet celou tuhle funkci,
že celá anonymní funkce že jsme právě vytvořili.
Nějaké další otázky?
Dobře, já ne-li vědět, vy jste na to připraven,
ale můžeme jít ještě šílenější s Swift.
Jste připraveni?
OK, to je skvělé.
>> Teď jsme vlastně mít možnost k, v Swift, protože, jak modulární
a, jak na základě protokolu, je, aby definovat své vlastní šílí operátory.
Stejně jako v tomto případě jsme měli no pohon pro exponentiation-- dobře,
pro provádění pravomocí něco.
Ale můžu, v Swift, definovat nový subjekt, který dělá přesně to.
Takže v tomto případě je banda syntaxe sem.
A já vám umožní podívat se na to doma, když se podíváte na to.
Ale my definování tohoto infix operátor, **, které se nám pak umožní,
definováním co to Funkce ** vlastně
to, přijmout levou ruku boční a pravá strana,
a pak se vrátit exponent, který levá strana na pravé straně.
>> A tak teď najednou I vytvořili nový čitatele.
Tak 2 ** 3 prostředku 2 na třetí mocninou.
[Mysl vyfukování SOUND] To by sama o sobě by vás měl být rád,
OK, šroub C. jdu Swift celou cestu.
To je skvělé.
To je docela fantastické.
>> I když je to skvělý příklad.
Ale já mám nikdy jednou venku v tomto příkladu vlastně
definované vlastní operátor.
Ale přesto, to ukazuje Hodně moc Swift
a proč je to vlastně opravdu cool.
OK, ano?
Diváků: Pokud jste definování vašeho vlastního operátora,
Jak víš, že nemáte náhodou pokusit se vytvořit operátor, který je
v někde v C, stejně jako skryté někde v Swift,
jako ten, který vám obskurní nemusí neviděli.
>> DAN Armendariz: Takže, pokud se snažíte definovat vlastní operátory,
existuje riziko, definování jeden přes existující operátora.
Že jde do úrovně detailů, které Nemyslím si, že máme čas projít.
Ale, že je zde riziko.
A to je ve skutečnosti velmi důvod, proč Nechtěl jsem používat symbol stříšky, který
když jsme psaní ven moc, obvykle použijte 4 malá stříška 5 nebo tak něco
jako to, že ve chvíli, kdy jsme Gchatting kamarádi nebo cokoliv jiného.
Ale v tom případě, že ve skutečnosti by způsobil kolizi.
A tak jsem se vyhýbal to jen proto, Náhodou jsem vědět, v tomto případě
že skutečnosti, které by tuto kolizi.
>> Dobře.
Nyní bohužel, pro posledních sedm minut,
Musím se držet foukání vaše mysl trochu.
Takže mi dovolte, abych vám ukázat některé další věci stejně.
>> Jsme vám ukázáno tuto myšlenku s těmito anonymní funkce,
Tyto uzávěry, které umožňují uživateli druh projít kolem funkcí.
Můžete je vrátit.
Můžete s nimi manipulovat.
Můžete dělat všechny druhy šílené věci.
>> Ale jedna věc, která další se stane, že jsou užitečné
je schopnost, na rozdíl na návrat těchto funkcí
ve funkci, předat funkci jako parametr k jiné funkci.
Ty by mohly být myšlení dobře, proč na Zemi bych chtěl něco takového udělat?
>> No, řekněme, že chci, , aby tento operátor, které jsem
pracoval tak tvrdě na vytvoření a použití to spoustu různých čísel
v poli.
Takže v tomto případě mám řadu integers-- 1, 4, 7, 2, 5, 10, 56.
A já chci, aby je všechny zdvojnásobit.
Mimochodem, že bychom typicky to udělat, je jen psát
jednoduchý pro smyčce, které iteruje přes všechny z nich
a provádět nějaký druh square operace nad nimi,
zadávání těchto nových hodnot do nového variabilní, nebo spíše, nové pole sem.
A hodnota výstupu Výsledkem je pak všechny tyto polí,
nebo spíše všechny ty Prvky teď na druhou.
>> A mohli bychom udělat to samé věc pro Cubing to,
ale trochu poplach by měl jít pryč
říká, že možná existuje nějaký způsob, že bychom
bylo možné zjednodušit tento trochu.
A ve skutečnosti je.
Co kdybychom mohli vytvářet funkci, která nám umožňuje
akceptovat, jako dravec, funkce?
Takže v tomto případě trvat podívejte se na tyto argumenty.
Chystáme se přijmout seznam zdvojnásobí.
A pak půjdeme přijmout funkci
v proměnné nazvané f, která se děje vzít s manželskou postelí a vrátit double.
A celý výstup celého této funkce
volal mapper se chystá vrátit matici s názvem double.
>> Co to by mě pak umožní udělat, je iterovat přes tomto seznamu
a udělat to samé, ale teď aplikovat tuto funkci na každé
z jednotlivých hodnot v tomto seznamu.
Takže jsem opravdu nevím, co je f.
Nezáleží na tom, ke mně.
Ale tak dlouho, jak bude potřeba v dvoulůžkovém, provádí nějaké operace na to,
a pak se vrátí Dvoulůžkový pokoj, tak bych pak
schopný mapovat tuto funkci napříč každý prvek v seznamu.
>> A tento typ programů je tzv vyšších řádů funkce,
kde jsme kolem funkce asi jako parametry
a dělat věci s funkcemi.
Je to něco jako s ohledem na všechny tyto myšlenky, které jsme se naučili v CS50
a brát je třídění o na další úroveň.
A to je všechno CS51 styl věci.
A tak půjdeme do hloubky více ve třídách, jako je to.
>> Ale to je také zde důležité, protože my
vidět mnoho funkcí které jsou použity v Swift
že v podstatě dělá to, kde jsme
některá čísla, některá pole čísel.
Chystáme se projít kolem toho pole do našeho mapper.
A my jsme také bude projít nějakou funkci, která
jsme již definovány tady.
Bude to být čtverec.
A jdeme do té doby čtverec všech těchto čísel
a obchod, který do tohoto výsledku zde.
>> Takže v tomto případě jsme formulovali jsme vlastní funkci nazvanou mapper.
Ale to přesně věc je, Ve skutečnosti, zabudované do Swift.
Existuje celá řada Funkce tzv mapa.
K dispozici je funkce map, tam je snížení funkce,
a tam je filtrační funkce, které v podstatě platí funkce
ke každému prvku v Seznam je upravit nějakým způsobem.
>> Diváků: Takže, protože jste transformaci data do jiného formátu
přes function--
DAN Armendariz: Správně.
Jo, takže funkce že jsme přijetím
transformuje data v nějaké cestě.
V tomto případě jsme byli buď kvadratura, nebo jsme byli Cubing to,
nebo opravdu, mohli bychom hrát žádná operace na ní vůbec.
>> Ale dovolte mi pak ukáže, jak to bude vypadat v praxi.
A opět, Běžím trochu času. takže si nejsem
bude moci projít všechny zdrojového kódu zde v detailu.
Ale já jsem povzbudit vás k tomu, že.
Budeme to psát, jakmile nejdříve po tomto rozhovoru.
>> Ale pokud se podíváte na to, Předpokládáme, že máme seznam čísel,
pole čísel v tomto proměnné volaných čísel.
Pak jsme chcete provést tuto Filtr operace na těchto čísel.
Takže filtr je vyšší objednat funkce, která
přijímá pole a také funkce.
A na každém prvku v tom, že pole, vykonává tuto funkci.
>> Pokud se, že výnosy funkce pravda, udržuje tuto položku.
Pokud se tato funkce vrátí hodnotu false, to zahodí tuto položku.
A pak se to vrátí seznam , která je pak tvořena all
z těchto položek, které byly filtrovány.
>> Takže jinými slovy, je to stejný nápad se gradebook.
Mohli bychom mít různé stupně jakosti Do tohoto čísla hodnotou tzv.
Mohl by to být 100 a 70, a 40, tak dále a tak dále.
Co tento filtr dělá, je upozornění že je to, že syntaktický cukr
pro anonymní funkce.
Jedná se o anonymní funkce rčení že parametr, že jsem přijal
bude, pokud o to je větší než 70 ° C,
pak to bude vrátí true, což znamená, že že položka bude mít na tohoto filtru.
Takže buďme trochu konkrétnější o tom.
Mám-li toto pole čísel a skládá se z 100, 70 a 40,
I provést tento filtr operace na každém z nich.
Tak, že první je tato hodnota 100.
100 větší nebo rovno 70 je pravda, který
Znamená to, že 100 je držena v tato nová kopie tohoto pole.
70 také prochází.
Ale 40 není.
Takže to, co je vrácena v passingCount je pole prvků 100 a 70--
100, čárka, 70.
To byly jen dva položky, které byly uchovávány.
A tak důvod, proč jsem se rychle prošel Mnoho z těchto druhů vyššího řádu
věci jsou, protože to je to, že společná věc, kterou uvidíte v Swift docela
často, provádí nějakou operaci pomocí této anonymní syntaxe funkce.
>> Tam je nějaký super věci.
Přepínače jsou opravdu silný v Swift, Mám na mysli, stejně jako blázen, blázen silný.
Můžete použít přepínač, a můžete skutečně aplikovat
do rozsahů, což je tak trochu blázen, a dělat fantazie podobné věci.
>> Ale v posledních několika minut, Chci přeskočit poměrně daleko
a ukázat vám konkrétní příklad toho, jak můžeme vytvořit v iOS pomocí Swift.
Takže když děláte to, budete muset vzít
A Look at-- na Apple dokumentace, oni
mají spoustu opravdu dobré tutoriály pro vytvoření první aplikace.
A já povzbudit vás k tomu že proto, že vás
přes všechny kroky, co přesně klikněte na vytvořit aplikaci iOS.
>> Ale tady máme tuto aplikaci iOS.
A je to opravdu docela jednoduchá aplikace.
Pokud bych to běžet, dovolte mi ukázat vám, jak to vypadá.
Vše, co to v podstatě dělá, je to vytáhne z internetu spis JSON
že jsem uloženy na serveru.
A to JSON soubor definuje, obrazy, které umožňují
abych pak procházet, na mém app, obrázky z mého webového serveru.
>> Takže mám tady getNextImage.
To načte obrázek z internetu, a pak ji zobrazí na displeji.
>> Takže je to docela jednoduché.
Ale cílem je ukázat, , jak můžeme kombinovat věci
z posledních několika týdnů CS50 do skutečné iOS aplikace.
Jinými slovy, možná jeden z věci, které budete chtít udělat,
je mít aplikace iOS, který můžete vytáhnout data z internetu
a ukázat uživateli nějaké informace.
To je zcela bod z tohoto zdrojového kódu zde.
>> Takže je tu hodně říci o jak to udělat skutečný iOS rozvoj.
Tam je hodně bláznivé syntaxe že jsme neviděli ještě dost
jako třída, co je to třída ve skutečnosti je.
Můžeme do značné míry ignorovat že v současné době.
>> Ale všimněte si, že jsme obsahovaly v rámci tohoto různé věcí
že jsme již viděli, jako funkce, které mají specifická jména.
A když jsme se dát ty, Funguje správné názvy
která se očekává od iOS, ve skutečnosti to cítí trochu kouzelné.
Ale když si vytvořit iOS aplikace, tam
jsou specifické názvy funkcí, které jsou volány samotný telefon
protože aplikace se nahrává vyzkoušet vytvořit proces, který ve skutečnosti
běží vaše aplikace.
Takže znovu, je tu spousta věcí, které jsem musí zakrývat tu, aby nás
mluvit o tom konkrétně.
Ale já Doporučujeme vám podívat se na možná ostatní iOS semináře, ale i některé
o tutoriály on-line, které dělají mnohem lepší práci popisující
specifické informace.
>> Ale můžeme vidět několik věcí, které jsou zajímavé odtud kódu.
Všimněte si, že máme-li prohlášení.
Mimochodem, jeden důležitý věc, o if
je to, že závorek Logický výraz jsou volitelné.
Ale složené závorky nejsou povinné, bez ohledu na to, jak málo nebo mnoho řádků kódu
Máte v if.
Nemůžete mít if bez složených závorek v Swift.
>> A to je dobře, nějak hloupé.
Ale je tu historické důvody pro to.
Je to má, aby vás zachránil od sebe.
Stejně jako to například, nemůžete eliminovat složené závorky kolem toho
if.
Ty jsou ve skutečnosti zapotřebí.
Tak jsem povzbudit, abyste se podívat na tohle.
Ale je tu ještě jeden konstruovat, že chci,
vám ukázat, že o Swift je nový Swift 2.0 porovnání
na starší verze Swift, což je následující.
Pojďme se podívat, kde jsem dát sem?
>> Takže v této funkci s názvem fetchJSON, tato funkce
je zodpovědný za tahání, že JSON soubor z adresy URL, který jen tak se stane
běží na mém CS50 IDE.
Jen jsem začal Apache, dám JSON souboru tam,
a jsem schopen vytáhněte, že data z internetu pomocí
tato funkce a toto URL, která je opatřena v telefonu.
Je to předkládané dopravcem při knihovna, která používáte při
děláte nějaké systému iOS pro vývoj aplikací.
>> Všimněte si, že je to neobvyklé syntaktický konstrukt volal stráž.
A opravdu to vše je v Swift je způsob ověřování
že některé věci mají byly splněny před vámi
pokračovat se zbytkem funkce.
Takže jsem mohl mít, s použitím Tento volitelný typ,
Mohl jsem našel adresu URL spuštění této funkce NSURL
a ukládání, že do URL konstantní, a poté kontrola
aby zjistil, zda URL byla nulová, protože to se chystá vrátit volitelný typ.
A kdyby to byla nulová, pak bych vytisknout chybu a pak se vrátit.
>> Ale místo toho, co stráž nechává nás udělat, je, že velmi věc,
ale ujistěte se, že je ve skutečnosti platí, že url
byl správně nastaven NSURL.
A pokud je to, pak je přeskakuje to, a to
vám umožní pokračovat s url, které byly řádně definovány.
Ale je-li tomu tak, že url není správně definována,
pokud je tato funkce vrací chybu nebo nějaká jiná nečekaná věc
skutečně nastane, tento guard konstrukt nám umožňuje pak výstup tuto chybu
a okamžitě vrátit.
Ano?
>> Diváků: Takže je to trochu o Jako jestli pak jiný?
DAN Armendariz: Je to druh Jako jestli pak jiný, ano,
kromě toho, že tato adresa URL je pak definovány pro všechno pod toto.
Pokud projde tento ochranný kryt, poté jej bude skutečně naplněna daty
a použitelné ve zbývající zdrojový kód ve vaší funkci.
Tak jsem podezření, že budete začnete vidět tento ochranný kryt stejně.
A dbát na to.
>> Takže jen při pohledu na pár dalších věci, to tady je to, co,
myslíš, jen podle toho, co jsme hovořili o dříve?
>> Diváků: Myslíš, že to bude běh na seznamu?
>> DAN Armendariz: Tak to je blízko.
Jedná se o funkci, že se definuje.
A my jsme zadání této funkce jako argument této funkce zde.
>> Diváků: [Neslyšitelné], pokud není nulová.
Takže je to v seznamu, je to tak?
>> DAN Armendariz: Pokud chyba není nulová, takže tak je-- musím posouvat.
No, podívejme se, nemůžu přejděte na právě zde.
Chyba je argument, který je být předaný této anonymní funkce.
Jedná se o anonymní funkce.
To nemá žádný název.
Ale my přijímáme tyto tři argumenty, data, reakce, a chybě.
A to se chystá vrátit neplatné, takže že to nebude nic vracet.
A to je obsah této funkce.
A pak máme přístup uvnitř, že funkcí pro každý z těchto argumentů.
>> Takže je to vichřice prohlídka jazyka.
Ale doufám, že s tím, doufejme, že, jak si vzít
pohled na některé z tutoriálů specifické pro iOS vývoji s Swift,
zvláště pokud jdete do Apple developer web page--
oni mají spoustu opravdu dobré návody, jak začít.
Ale doufejme, že právě tato hodina mluvit o syntaxi sám dal
Jsi dost, abyste mohli začít s tím.
>> Budeme psát všechny tohoto zdroje kód na webových stránkách semináře
co nejdříve, a také snímky takže máte odkaz pro všechny ty.
Ale hodně štěstí s vaše projekty.
A děkuji vám všem moc přišli.
>> [POTLESK]