>> [Музички]
>> ДАН AMRMENDARIZ: Секој, добредојдовте во семинарот CS50,
iOS App развој со Свифт.
Јас сум Дан Armendariz, и јас сум наставник на компјутерската наука тука на Харвард.
>> И следниот час ќе биде виорот турнеја на колку работи
на оваа тема, како што може да се вклопат.
Јас ќе ја објавите на сите на изворниот код кои ќе ги видите на интернет денес.
Ние може да не биде во можност да всушност, оди над сè
дека сум дека сум Ви прикажуваат во овој час.
Но барем се надевам дека преку коментарите на изворниот код,
ќе бидете во можност да се обиде да дознаам што точно се случува за тие работи
дека ние не сосема да се дојде до.
>> Сè на сè, на структурата на денешниот разговор ќе биде како што следува.
Ќе започне од тоа некои основни синтакса со јазикот Свифт,
навлегуваме во некои од понапредните Синтаксата на Свифт јазик.
Бидејќи јазикот е навистина модерен и тоа
има голем број на високо ниво карактеристики, работи кои не треба
виден во C текот CS50, или па дури и некои други јазици
дека ние сме отворени користење во CS50 како PHP,
па јас сум ќе мора да се обиде да се воведе, исто така, дел од темите кои
се поврзани со високото ниво јазици дека не може да се види во длабочина во CS50,
но ќе видите подоцна компјутерски науки класи.
Значи тоа се случува да биде збиени час.
И ве молиме да се чувствуваат слободни да ме пушти знам дали имате било какви прашања.
Значи, ако сте заинтересирани правејќи развој
со Свифт, или навистина било развој iOS стан,
постојат неколку барања.
Прво на сите, ќе мора да биде со користење на Mac, трчање во примерите
дека ние се случува да биде во употреба и денес, релативно нова верзија на оперативен систем
X. Во овој случај, јас се кандидирам X 10.5.
Можете да се работи 10.11, ако сакате.
Но, сето она што ви се случува да види се вклучуваат Xcode 7 и подоцна,
која има најновата верзија на Свифт, која е Свифт 2.0.
Ова е всушност прилично важна разлика.
Голем дел од синтаксата има променети прилично значително
во некои случаи од Свифт 1.0, кој беше објавен минатата година,
да Свифт 2.0, кој само излезе оваа есен.
Па ние ќе се покаже Свифт 2.0.
А многу од работите кои да пребарувате за онлајн
кога ќе се обидуваш да се добие дополнителни информации во врска со различни нешта,
можеби ќе сакате да експлицитно пребарувате за Свифт 2
а не само обичен стар Свифт да се направи сигурни дека ќе добиете синтаксата точни.
>> Всушност, ова е генерално точно.
Има еден брз износот на развој случува во Свифт јазик
откако Apple го отпушти, мислам што, тоа е малку повеќе од една година
сега.
И работите се променија драматично во тоа време.
И така не се фрустрирани ако, кога сте во потрага наоколу
теми за вршење на услуги брз или како да се постигне нешто со користење на некои пример кодот
или нешто што не е така всушност работат на Свифт 2.0.
Бидете сигурни дека сте во потрага специјално за таа верзија
во обид да се минимизираат ефектите на различни верзии и оние видови на нештата.
>> Ќе се обидам да се истакне само некои работи кои се различни со постарите верзии.
Но тоа е нешто да внимаваш за.
Што е веројатно нема да биде еден од најголемите главоболки
дека ќе имаат со Свифт е изнаоѓање пример код, кој е постар, дури и само
по неколку месеци, во обид да го користите тоа во вашата помодерен проект.
И тоа само едноставно не функционира.
Ти си добивање грешки компајлер, синтакса грешки, сите видови на луди нешта.
Па само да бидете трпеливи со тоа, и се надевам дека ќе
имаат прилично убаво искуство Свифт со генералниот пласман.
>> Сега може да се, всушност, join-- и се надевам ние всушност има ваков оваа year--
CS 50 Јаболко App тимот за развој, која
ќе ви овозможи да се инсталира било апликации кој ќе се создаде на вашиот iOS уреди.
Па да ги разгледаме во овој URL ако сте заинтересирани за тоа го прават.
>> Па само неколку работи во врска со самата Свифт.
Таа е составена јазик.
Но, ќе се види дека некои од карактеристиките кои ги користиме
оставете ја да се користи и за малку како начин да се толкува, како и.
>> Голем дел од синтаксата е позајмена од C. Тоа е врз основа и напишан во C.
И така ќе се види дека постојат голем број на takeaways
од вашиот постоечки знаења од C што можеме порта да Свифт.
>> Но, постојат работи кои го прават тоа многу различна од В.
Тоа е многу силно отчукува.
Има автоматско управување со меморијата.
Вие нема да мора да се користете Примерок или бесплатно насекаде.
Тоа е дизајниран за општо добро.
Значи со други зборови, можете да го користите во сите видови на контексти, од Apple Види
на iPhone на целиот пат до OS X, и па дури и некои сервери, па дури и некои скриптирање.
Но, ќе видиме дека поддршка за скриптирање
не е сосема има уште како што е во други јазици.
Па најверојатно ќе биде со користење на ова ексклузивно за развој
на вашиот Mac или iPhone.
>> И таа има многу модерни карактеристики.
И многу од овие работи се работи кои ние ќе треба да се обиде да се обратам денес,
но исто така и на нашите теми кои искрено, можеме да го посвети целото курсеви.
Во фактот, CS 51, што е понудени следниот семестар,
се фокусира многу на овие теми кои се опишани подолу.
За да можете да го поминат целиот семестар разбирање на овие работи.
Но, ние ќе треба да се обиде да се добие преку нив
барем доволно да се може да се разбере она што е
се случува кога ќе се погледне со брзина од програмата
и да бидат способни да се пробие на вашиот пат низ него за финалниот проект.
>> Сега е еден од најдобрите начини на кои може да се добиете дополнителни информации за ова
е искрено само преку Епл документација за Свифт.
Има многу на API кои се на располагање.
И ова е добра база за вас да барате, конкретни работи што
сакате да направите со API, вклучувајќи iOS.
Ако сакате да ја користите камерата за На пример, можете да почнете да барате тука,
и исто така го користат Гугл и Стак Прелевање како што нормално би.
>> Било какви прашања во врска со овој пред да скокаат право во?
Во ред.
Ајде да се движи.
>> Значи прво, имам бројот на пример датотеки.
А јас ќе одам да се обиде да се повлече преку нив релативно брзо.
Ова е Здраво Светот датотека за Свифт.
Тоа е многу едноставно.
Има начин повеќе коментари отколку што има вистински код.
Известување на реалните код е на самото дно на линијата 14.
Таа вели дека за печатење.
И тогаш тоа е повик на функција.
Ние сме поминува во неа низа наречен Здраво CS50.
Забележи дека не постои точка-запирка.
Известување дека нема int главната.
Нема ниту еден од cruft што ги имавме со Ц.
Кога се користат Свифт на овој начин, кој е само напишано во текстуална датотека
и се чуваат на мојот компјутер, а потоа Можам да го компајлирате и да ја стартувате.
>> Забележите дека овде сум некористење на CS50 ИРО.
Ова значи дека јас сум трчање и дека јас сум на OS X,
и дека сум Xcode веќе инсталиран на оваа машина со цел за ова
за да всушност функција.
Но, ова е само нормална текстуална датотека кои потоа може да се собере и уреди.
Да видиме како тоа всушност се работи.
Што ако сакам да го компајлирате?
swiftc 1.swift.
По една минута или две, тоа ќе видите дека ние имаме сега
Составувач е ова во датотека наречена 1.
И сега имаме нашите печатени CS50, нашите Hello World апликација наместо.
>> Забележи една друга работа што добро е тоа што по дифолт,
ние не треба да го внесете на / n да се печати нова линија.
Стандардно, функцијата за печатење во Свифт ќе печати на нова линија за вас.
Можете да помине евентуален дополнителен параметар за да се каже дека тоа не го стори тоа.
Но на Google за повеќе информации за тоа.
По дифолт, тоа ќе го стори линија за печатење.
>> Добро, па ајде да се движи тогаш за некои други работи.
Па како можеме навистина да дефинираат променливи?
Можеме да го направиме тоа е со користење на еден од двата методи.
И оној кој јас сакам да ти кажам Првата е во врска со дефиницијата пушти.
И ова е важно бидејќи ефикасно
она што го правиме е дефинирање константа.
Ние ќе се обидеме да се создаде променлива, или подобро кажано, постојана нарече,
за да го обезбеди некои data-- во овој случај, стринг Дан.
Но, со помош на овој ајде клучни зборови, сакаме да го кажеме
дека ова variable-- или повторно повика constant--
име, никогаш нема да се смени.
Тоа се случува да биде непроменлива во текот времетраењето на оваа програма
или во текот на Времетраењето на контекстот
дека таа променлива е достапна.
>> Ова е навистина важно дека кога имате некои податоци кои не се
ќе се промени во вашата програма, и ќе видите различни примери
за кога ќе сакате да го користите нека наспроти други синтакса,
тоа е важно да користите дозволувајте Секогаш кога е можно, бидејќи ова нотифицирана
на јазикот на кој што е нема да се промени,
и тоа, всушност, може да врши многу оптимизации
да се подобри брзината и безбедноста на вашата програма.
И со безбедноста, јас не значи да таа несреќа со луди грешки
кои би можеле да бидат навикнати да гледаат во В.
>> Тогаш може да се користат низа интерполација да капсулирало ова во рок од стрингот.
Па ние може да се види во овој печати линија, печати здраво,
а потоа со помош обратна коса црта отворен parens, а потоа го името на променливата ми,
во овој случај константна, затворете го загради.
Јас сум во суштина потоа да се стави на Содржината на оваа променлива наречена име
внатрешноста на низа и потоа печати резултатот таму.
>> Има една друга промена До оваа податотека а тоа е дека имам, во самиот врв,
се стави во shebang линија, која во основа, само ги специфицира
што сакате да ја користите Свифт преведувач,
значи дека јас повеќе не мораат да собере на оваа конкретна програма.
Јас само може да се кандидира како своја скрипта.
Но, ова е, во овој случај, зад сцените се собрани, а потоа
што се извршуваат.
Тоа е само невидливо за нас.
>> Добро, па ајде да се движи.
Па таму е малку на измама што се случило пред тоа.
Те покажа дека сум може да се дефинира константа.
И јас би можеле да обезбедат некои податоци да го стори тоа.
Но, во овој случај, да се забележи дека не сум всушност, наведете го видот на податоците
тоа е тоа.
А тоа е затоа што на компајлер, Свифт може
заклучиме од типот на податоците само врз основа на податоците кои ни го ставам во него.
Затоа што знае дека од страна на оценување на оваа променлива токму тука, ова право податоци
тука, таа знае дека тоа е стринг.
Па така ова име затоа е постојана ќе биде променлива, како и.
>> Но, ние исто така може да бидат експлицитни за типот кој е
ние се случува да се користи за константи и променливи
со користење на оваа синтакса instead-- дозволувајте името колон Стринг еднаква
Дан, кој во овој случај значи дека ние сме ќе се дефинира константа нарече.
Тоа се случува да биде од тип Стринг.
И вредноста ќе биде Дан.
Сега на друг начин на кој можеме да се создаде variables--
и овие се променливи променливи, кои значи дека ние сме, всушност, се случува
да се промени нивната содржина некаде во траење од контекст
дека таа променлива се defined-- ние користете var клучни зборови наместо ајде.
Но, повторно, по дифолт, освен ако навистина знаете кои ви се потребни за да се манипулира со тие податоци,
обидете да го користите за да подобрувања во перформансите.
>> Во овој случај, тогаш можам наведете го видот на податоците
кои се очекува да биде во внатрешноста на оваа нова променлива наречена етикета.
Тоа се случува да биде стринг.
И ние си оди за да потоа concatenate две жици заедно, стрингот здраво,
и гудачкиот претставена од страна на променлива, или подобро кажано, постојаното име.
>> Значи ова е убаво, бидејќи ова е малку PHP како со тоа што ние
имаат многу лесно низа сплет.
Ние не треба да се автоматски користете било каков вид на управување со меморијата
да се зголеми големината и направи било кој вид на смешни работи таму.
Ова работи како што ние, всушност, би се очекувало.
>> Сите права, било прашања во врска со ова?
>> Сега од друга причина што ние треба да имаат способност
за да може да се дефинира она што Вид на променливи податоци
е затоа што понекогаш не сакате да го иницијализирам променливи
со некои податоци во точка на дефиниција.
Значи во овој случај, да речеме што сакам да започне внесување
некои оценки во градус книга.
Па знам дека еден од варијабли кои сакам да бидам
се случува да биде непостојана одделение.
И ние исто така знаеме дека ние сакам тоа да биде цел број.
Но, можеби се 'уште не имаат тоа одделение на располагање.
>> Кај Свифт, ќе мора да го дефинирање на типот на податоци
кој е поврзан со променлива или нека постојана
Пред да можете да всушност ја користат таа променлива.
Поради тоа што е силно отчукува, ќе мора да се дружат еден вид
со овие променливи.
>> Значи во овој случај, ако јас не сум правилно иницијализиран првиот со некоја вредност,
тогаш јас треба да се каже она што Свифт Очекувам типот податоци да бидат.
И тоа се случува да остане на истиот тип на податоци
низ историјата на оваа програма.
>> Сега може да биде во искушение штом Имам креирано овој градус променлива
и тоа со што се предвидени цел број 100, сега ако јас
сакате да се обиде да concatenate стринг со тој број,
би можеле да бидат доведени во искушение да се уште го користат тој оператор низа сплет
како што ни остана само неколку линии порано.
Но за жал, ова всушност ќе не
работат, затоа што се суштина вршење
операција на два различни вида.
>> Сега ова е многу различен од другите јазици како PHP кои се навистина
loosey изплашен со нивниот вид на типови.
Тие се само се допаѓа, да, што и да, не ми е грижа.
Само дај ми еден тип, и можеби и јас ќе ја направат вистинската работа.
>> Во овој случај, Свифт е многу строги за видовите
кои ќе се занимаваат со.
Овој оператор сума или конкатенација оператор
во суштина неколку различни можни опции.
Можете да го направите сума со цели броеви, или
може да направи низа сплет, и можеби и некои други работи, како и.
Но, ако тоа не го признава оператор она што е на двете страни на тоа,
или, поточно, комбинација на сите овие два типа, не е она што го очекуваме,
тогаш тоа нема да предизвика неуспех.
>> Значи во овој случај, што значи тоа да има низа плус цел број?
И во контекст на ова, веројатно ќе сакате
да се направи операција на низа сплет.
Но, се разбира на компјутерот не мора тој вид на контекст.
И така ние треба да се обезбедат дека дополнителни информации
да нека знаат што е тоа е дека ние сакаме да се направи.
>> Значи со други зборови, тоа дека Свифт е силно отчукува
значи дека треба да се направи малку дополнителна работа
да се добие тоа да работат на начин на кој вие ќе го сакате.
Но, како резултат на тоа, тоа е побезбедно.
И штом еднаш ќе имаат преземат ги во предвид овие видови,
работи само искрено да почне да се работи доста добро.
>> Значи во овој случај, тогаш ние би изврши низа сплет
со експлицитно кастинг цел број во низа
со тоа што обвивката во овој капитал К низа функција,
а потоа со помош на низа сплет оператор да ги изменат нашите променлива етикета,
а потоа и да го испечатите.
>> Досега добро?
Добро, ајде да се движи.
>> Сега постојат различни податоци видови кои може да се користат во Свифт.
Како што се навикнати да, можеме да се создаде променливи низа.
Само и дека низа може содржи еден тип.
>> Значи во овој случај, ние ќе треба да се создаде на променливи низи од броеви, кои
ние ќе го наречеме оценки, и ние ќе бидеме во можност за да ја запази дека во овој плоштад заградата
формат како што сте свикнале во голем број на други јазици.
Но се забележи дека тука се дефинирање на неколку работи.
оценки е непостојана variable-- ние не го користат ајде клучен збор.
Па тоа значи дека тогаш ние може да го менува Содржината на оваа низа.
Тоа е од типот Низа int, а ние може да се каже дека
врз основа на овие квадратни загради тука.
>> Сега е еден од убавите работи во врска со ова е дека ние
имаат пристап до голем број на дополнителни информации
за низа само користење некои едноставни точка нотација.
Така на пример, grades.count обезбедува до нас
бројот на предмети кои постојат во таа низа, која потоа можеме да пристапите прилично
лесно, едноставно со помош на таа точка нотација.
>> Ако сакате да додадете дополнителни предмети на оваа низа,
не можете да направите стилот на PHP каде што само експлицитно да се дефинира,
во даден индекс, некои вредност што сакате да ја внесете.
Наместо тоа, користете додавај метод во вид на низа
за да се додаде таа ствар, 95, на оваа листа.
>> Па сега оваа низа има следниве contents-- 100, 0, 90, 85.
И сега сме во прилог 95 до тоа како добро.
>> Постојат и други начини можеме да додадете работи.
Ти всушност може да се користи оператор збир,
која ќе се толкува како операција низа додавај.
А потоа може да се додаде уште еден низа, чии содржини се 70 и 80,
за таа низа.
Така, сега имаме на содржина на овој променлив
grades-- 100, 0, 90, 85, 95, 70 и 80.
Ова е само убаво малку синтаксички шеќер што Свифт дава нам.
>> Значи, ако сакаме да се сумира на оценки, ние сме можеби
ќе сакаат да iterate во текот на секој елемент во овој циклус.
И ние имаме, кај Свифт, поимот на за телефонска линија, како што би очекувале.
Но начинот на кој ние се покаже опсег е малку поинаква.
Значи во овој случај, да се сумира сè, ние ќе
случува да се создаде привремена променлива наречена сума со цел за нас
да се одржи овој брои.
>> И известување за нашите јамка изградба тука.
За индекс во 0 .. <grade.count.
Значи оваа конструкција, 0 .. <grades.count е операција спектар каде сме
велејќи дека ние се случува да се создаде голем број на цели броеви од 0 до
да, но со исклучок grades.count.
Па ова ќе биде 0, 1, 2, 3, 4, 5, се до еден сепак многу
пред grades.count.
>> Значи ова е различно од тоа како ние обично ќе се користи за петелки
каде што ќе има некои индекс променлива, еднакво на 0 поставени во првиот,
а потоа се интегрираат дека до некои вредност помала од бројот на предмети
во таа низа.
>> Значи, постои промена на ова, всушност,
која ни овозможува да многу лесно поставени различни видови на опсег.
Ако го промените овој опсег до три точки, 0 ... grade.count,
ова претставува опсег од 0 да grades.count инклузивен,
што значи дека тој број е, исто така, потоа се вклучени во тој опсег.
>> Но, ова е многу корисна за овие егзактни работи,
кога треба да се изврши повторувања над јамка
поради тоа што тие индекси се нула индексирани, како што видовме на други јазици
исто така.
Било какви прашања во врска со ова за телефонска линија?
>> Значи има имплицитна дефиниција на овој индекс променлива,
чија вредност започнува од 0, и продолжува на секој циклус на повторување
за да се зголеми за 1 до точка што е еднаков на grades.count,
на која точка, јамка прекинува.
>> Забележете дека во нашата низа интерполација тука,
ние, всушност, може да изврши некои едноставни манипулации на тие вредности.
Па индексот плус 1, всушност, ќе вршење на сума од таа вредност
бидејќи индексот е, овој случај, цел број.
И во тој момент, тоа ќе потоа се конвертира во низа
и интерполиран на овој стринг тука, и печатени надвор како што би се очекувало. .
>> И убаво нешто за низи тука е
дека и ние сме во можност да имаат Примам вредности и вредностите на поставката
користење на плоштадот заградата нотација како ние сме виделе на други јазици, како и.
>> Добро, па од тука, ние сега пресмета нашите збирот на сите од нашите оценки.
Сега вид на следниот логичен чекор би бил
да се направи операција на поделба да се најде од просекот на оние одделенија.
Но, нешто важно тука се случува која
е дека оваа сума е можеби цел број.
Но, ние треба да се изврши некои вид на двојна поделба.
И тоа се случува да биде исклучително важно кога
сакаме да ја извршите оваа операција, затоа што она што сакаме да го кажеме
е дека ние треба да се, всушност, изврши поделба на две двојки.
И повторно, бидејќи Свифт е многу силно чука,
ние мора експлицитно да го поставите на сите предмети да двојки пред ние всушност
изведување на таа операција.
>> Значи, со цел за нас да изврши двојна поделба,
тоа не е доволно за само еден на оние ставки за да биде двојно.
И двете од нив мора да биде двокреветни со цел за брзо
за да бидете сигурни дека овој е она што сакаме да го стори.
Па, ние тогаш ќе експлицитно typecast збирот кој го пресметува погоре
и пребројувањето на оценки за двојки, и потоа изведување на таа операција и продавница
дека во оваа нова променлива, или подобро кажано, оваа нова постојана наречен просек,
кои ќе имаат каков тип, можете да замислите?
Двојно, да.
Значи во овој случај, ние не мора да го наведете
затоа што тоа може да се заклучи од операција каков тип на просечните податоци
ќе биде.
И Свифт е обично прилично добар за да се биде во можност да заклучиме типови.
>> Дали сакате да го видите ова работи, или можам да се движат натаму?
Сакам да се одржи во живот.
Било какви прашања во врска со било кој од овој?
Одлично.
>> Сега ние ќе треба да почнат да се добие за да се добрата stuff-- функции дефинирање,
и неколку други видови кои се единствен за Свифт дека немате
видел на други јазици до овој момент,
но тие се присутни во други јазици кои можеби ќе се најде подоцна.
Значи прво, ако сакате за да се дефинира функција,
го дефинирал со фанки збор функција, а потоа името на функцијата,
а потоа во заграда, аргументите што сакате да ја прифати таа функција.
Аргументите мора, исто така specify-- generally--
исто така мора да се определи видот на податоците кои тие се, освен ако тие не може да се заклучи.
И ќе видиме дека многу малку забелешката за само малку.
>> Значи во овој случај имаме функција наречена printGradeCount.
Ние ќе треба да се прифати variable-- односно во овој случај,
на constant-- наречен gradebook.
И тоа се случува да биде на напишете низа од цели броеви.
Сега има нешто што е навистина важно тука
што сакам да го разбере.
Тоа е дека по правило, овие аргументи кои се извори на информации за оваа функција се
дефинирани со имплицитно ајде на клучни зборови, што значи дека не можам да го измените ова
gradebook променлива овде.
И тој вид на смисла, затоа што ти си поминува податоците.
А вие можеби не го сакаат тоа да се промени од под вас.
Можно е да се споменува експлицитно дека ова е променлива со ставање
на var клучниот збор овде.
Но, тоа е дека ние сме gotcha забележав луѓе го направиле во минатото
е дека тие се претпоставува дека тоа се случува да биде променлива, кога, всушност, тоа
е константа.
>> Добро, па тука тогаш, во овој случај, ние не се специфицира секаков вид враќање.
Ние ќе ви покаже како да се направи дека во само еден миг.
Не се забележи дека тука имаме само едноставна ако состојба.
Ако gradebook е празен, кој во овој случај
е само во сопственост на оваа цел број низа, тогаш ние се печати нешто.
Инаку ние се направи нешто друго.
>> Прилично јасна досега мислам.
Но ме запре, ако имате било какви прашања.
>> Сега оваа функција, во просек, исто така, ги зема некои аргументи, или поточно еден аргумент,
која е gradebook, и овој пат ќе се врати двоен тип.
Поради тоа што се компјутери просечната и тоа е
ќе всушност се врати таа пресметаниот просек на повикувачка линија.
>> Во овој случај, ние наведете тип врати по стрела.
И ова може да се чувствуваат вид на чудни во прв.
Сте свикнале за поставување на враќање
внесете пред името на функцијата.
Но, ако се мисли на ова во однос на математиката,
како кога имаш математика со кои се дефинира функција,
имаш функција со некои влезови, и произведува излез.
И тоа е точно она што ова би требало да го имитираат.
И има неколку други јазици кои имаат слична синтакса, како и,
но веројатно никој што сте виделе во CS50.
Но, сепак не се збунети од тоа.
На стрелката значи дека она што се случува треба да се врати во овој случај.
Добро, па како ќе се дојде да се пресмета овој просек?
Па, ако gradebook е празна, и тогаш сите ние сме
ќе се врати 0, што можеби разумен начин за лекување на оваа.
Не знам, ајде да дојде назад кон тоа во малку.
Ова можеби и не, всушност, да биде разумен начин
да се пресмета просек ако имаме празен gradebook.
>> Тогаш ние само ќе се изврши нашите сума.
Известување дека тука, всушност, има една алтернативна верзија на
за телефонска линија, која ни овозможува да iterate над секоја точка во низа
и место на секој елемент во свои променлива.
Со впишување на одделение gradebook, она што сакаме да го кажеме
е во тоа што ние ќе треба да имплицитно се создаде нов постојан наречен
оценка што ќе ги претставуваат секоја единствена ставка во gradebook
секој пат дека за јамка iterates.
Па прв пат Тоа е воден, одделение ќе
биде прв објект во gradebook.
Вториот пат тоа ќе биде на Втората точка, па натаму и така натаму
се додека има gradebook се исцрпени на елементи.
Тогаш ние ќе бидеме во можност да се сумира што одделение во нашата сума променлива
и да се врати нашиот просек како што не сум видел.
ОК, било какви прашања?
Да?
ПУБЛИКАТА: Имам две прашања.
Број еден, хипотетички, можат ќе се кандидира за оваа цел број еден?
Не мора да биде двокреветни, е тоа точно?
ДАН AMRMENDARIZ: Можете ли да повторувам тоа прашање?
ПУБЛИКАТА: Може ли да се направи цел број во однос на просекот?
ДАН AMRMENDARIZ: Можете ли да направи цел број како просек?
Па се врати цел број просечна наместо на двојно?
>> ПУБЛИКАТА: ќе Return-- имаат тоа право сега подолу.
ДАН AMRMENDARIZ: Токму тука, се врати 0.0?
ПУБЛИКАТА: Да, само се врати 0.
Па тоа ќе биде или 80 или 85 години, но не и 85.2.
>> ДАН AMRMENDARIZ: Значи во тој случај, така има неколку различни начини
да одговори на тоа.
Дозволете ми да се одговори на нив со цел.
Значи, ако јас само се направи ова враќање 0, 0 е целобројна вредност.
И така што ќе предизвика Вид на грешка за овој случај
поради тоа што се очекува двојно но потоа ќе се врати цел број.
Ако сакам да се врати цел број, можам.
Можам да го поставите тип на враќање да int, се врати 0 тука,
и да не се изврши двојна поделба.
Но, тогаш ние би биле прави целобројна поделба.
И така ние тогаш не би се добие Просечната дека ние можеби би очекувале.
Но, да, ние може да го менува видовите на тој начин.
>> ПУБЛИКАТА: И второ, вие имаат еден брачен на врвот.
Но, долу, кога ќе се враќаат Двокреветна Двокреветна,
која веќе е автоматски враќајќи Двоен формат.
Зошто се уште треба да го дефинираат со стрелки на врвот со Двоен?
>> ДАН AMRMENDARIZ: Значи За секој случај, ова е дел
на the-- така да го повтори прашањето, затоа што тоа е имплицитна од враќањето
типови тука, она што овој тип, всушност е, ние треба да се експлицитни со Свифт
за тоа што сакаме да го врати за излез од оваа функција
така што кога тоа врши напишеш проверка, може да бидете сигурни дека
дека она што, всушност, имаме напишано долу, всушност, е во согласност со тоа.
Така, тоа е вид на како чек со себе вид на ситуацијата.
Но има are--
>> ПУБЛИКАТА: [Беззвучен] arrow?
>> ДАН AMRMENDARIZ: Има случаи кога ние може да се каже дека ние може имплицитно
поставите тип враќање.
Но, во овој случај, јас не мислам дека ќе работи.
Има некои други синтакса кои што ќе видиме подоцна.
>> Добро, па овој извор код е малку поинаква
бидејќи овој парсира аргументи од функцијата, дека ние сме вика.
Дозволете ми да ви покажеме како функционира пред ние всушност се движат на
до некои интересни работи што се случува во Свифт.
>> Значи во овој случај, ако јас само ја извршите оваа код, забележите дека она што го прави
is-- време, тој вид на ми дава чудна грешка.
Јас треба да го помине неколку цели броеви како аргумент на командната линија.
Да видиме, 150 и 80, и притиснете Enter за да дознаете што тоа е всушност прави.
Тоа е прифаќање на секој од овие вредности како цели броеви.
Тоа ги внесување во gradebook.
И тогаш тоа е вршење дека просечен пресметка
и Ставање дека како што се би се очекувало.
>> Но очигледно има нешто се случува со овој отфрлајќи нешто
нешто како цел број.
Како што може да се сети од кога бевме кои се занимаваат со аргументи на командната линија
во C и на други јазици, првиот 0-ти елемент во тој аргумент за командната линија
Листата е името на командата дека ние всушност егзекутирани.
Значи во овој случај, јас сум само looping над сите аргументи на командната линија.
Но, јас не го правам било кој вид на фенси проверете, за да го прескокнете во текот на овој првиот.
Јас сум само експлицитно или имплицитно сум проверка кој од овие видови
се цели броеви пред јас всушност извршување на оваа пресметка.
>> И тоа е во суштина она што се случува овде.
За секој аргумент во аргументи процесот е,
Одам да се изврши некоја чек.
И во овој случај, јас ќе одам да се обиде да се претворат
тој аргумент во цел број од вршење експлицитна typecast,
поради тоа што е, на влез, стринг а не во фактот цел број.
>> Но, ова е вид на чудно синтакса, ако нека градус еднаква INT (аргументи).
Што всушност се случува тука е исклучително
важно да вашиот користење Свифт.
Ова е со користење на она што е наречен изборен тип.
>> Затоа оваа функција, инт (аргумент), се враќа не само цел број, но се враќа
она што се нарекува изборен цел број.
И така ова е вид на тип на врвот на еден тип.
Можете да го замислите вид на како тоа е враќање како пакет.
И кога ќе ја отворите дека пакет, или
има цел број, што е резултат, или таа има апсолутно ништо во неа на сите.
И ова е корисно, како проверка на грешка механизам, бидејќи во овој случај
ние може да се дознае, беше ова тип реализација успешни?
Ако е, тогаш тоа е во фактот случува да имаат цел број внатре.
Инаку тоа се случува да имаат некои вредност што ќе го наречеме нула, што
е претставник на цел број не на сите.
Тоа е навистина претставник на ништо.
>> Па така ова ако изградбата ни овозможува да се одвитка тој пакет,
дека опционални обврзувачки.
И ако ние сме во состојба да се одвитка дека пакет и да се најде цел број внатре,
тогаш она што сакаме да го кажеме тука е дека ние ќе потоа
овозможуваат таа вредност што треба да се постави во оваа постојана наречен одделение.
И овој дел од ако изјава, горниот дел на изјавата ако
ќе се кандидира, бидејќи тоа одвитка беше успешна.
>> Ако тоа само така се случува, дека имаше грешка можеби
во овој експлицитна конверзија тип од низа на цел број, можеби
тоа е на ABC вредноста на пример.
А тоа е, всушност, не се случува да се претворат во цел број.
Тогаш тоа ќе се врати нула, која не е цел број.
И ова ако изјава и потоа да пропадне.
одделение нема да постои, бидејќи нема содржина цел број.
И тоа ќе го изврши овој друг блок, наместо.
Да?
>> ПУБЛИКАТА: Нил е N-I-L?
ДАН AMRMENDARIZ: нула е N-јас-Л, да.
>> Така што ова е можеби еден од најтешките работи за Свифт,
особено кога сте во плевел врз iOS стан
и ти си, всушност се обидува да се направи некои развојот таму.
Тоа се случува да се вика во вас за опционални.
Тоа се случува да се прашуваат за прашалници и фантастичен поени.
Но штом ќе дознаам out-- ако посвети некое време за да се пронајдат
она што се случува со изборен видови, Ќе се спаси многу главоболка
како што се обидуваат да напишам еден стан во Свифт.
>> Тоа е всушност многу моќна функција.
А вие само ќе треба да земе збор ми за тоа за сега.
Но ќе видиме оваа конструкција и некои други се допаѓа
во некои од другите код која ние ќе ви покажеме во само малку.
>> Дали има некои почетните прашања во оваа ситуација?
Па важно е дека готова брза опционални вид е вид на metatype.
Или има вредност, и ако го прави тоа, тогаш тоа
можеби ќе има таа вредност поврзани со тоа, или нема вредност она,
и таа е претставена со нула.
Остатокот на ова е можеби како што би очекувале.
>> Значи, да се интензивира на потешкотии повторно.
И овој пат, ајде да ги разгледаме во некои други типови на податоци, кој всушност постои.
Еден од нив е речници, што е многу сличен на Пајтон речници.
Тоа е донекаде сличен на хаш табелата во C. Тоа е во суштина мапирање на копчињата
каде клучевите може да се жици.
И кога ќе се погледне нагоре тие клучеви, тие клучеви ќе имаат вредност.
Па тоа не е сосема низа, но наместо тоа, се повеќе тесно поврзани
со карта хеш или хаш табелата.
>> Ајде да видиме како ова би требало да се работи пред да се, всушност,
одат во изворниот код себе.
Ако јас само ја извршите оваа, ништо не се случува.
Тоа е ми кажуваше дека јас очекувам некои параметри од следните типови.
Па јас ќе одам да се обезбеди да се тоа некој проблем во собата имиња,
па pset0, можеби и јас добив 100.
И pset1, добив 5.
А потоа на испит, јас навистина добро и доби 30.
И Упс, јас хит простор тука.
>> Кога ќе притиснете Enter, може да се види го врши некоја пресметка.
Таа вели gradebook е три оценки, pset1, pset0, испит.
И gradebook има овој специфичен просек.
Значи, повторно, ние работиме gradebook со оваа идеја,
но ние ќе продолжиме процесирањето со комплексноста на нашата функција.
>> Така на почетокот, ние сме само случува да се создаде функција што
е одговорен за печатењето на употреба.
И таму е овој излез функција која само ќе
насилно се откажа од апликацијата.
Ова не е нешто што ќе ги користите во iOS стан.
Ова е само, во овој случај, со аргументи на командната линија.
Следна ние ќе тргнуваат кон Xcode.
Но, ова е специфична за команда програма на линијата во Свифт.
>> Ајде да ги разгледаме во некои од интересните работи тука.
Ајде да видиме, само неколку интересни работи да се спомене и можеби
е дека во мојата функција на печатење на бројот на оценките,
може да се сети дека ја имав таа листа на items-- pset1, pset0 и испит.
Ти всушност може да брзо и лесно да се направи ова
со преземање на gradebook, што е речникот кој има клучеви и вредности.
Најди ги сите на клучот е преку метод на dot клучеви тука,
и потоа користете го овој joinWithSeparator, кои потоа ќе ги преземе сите на клучеви
дека сме го внеле во, или pset1-- Жалам, pset0, pset1 и exam--
и ги concatenate заедно користење запирка и простор
да се создаде една долга низа.
Оваа операција се приклучат е само феноменално корисно во различни контексти.
И така тоа е овој joinWithSeparator.
>> И ова е едно нешто што е Свифт промени од 1 до 2 Свифт.
Има користи за да биде Пајтон style-- ако сте
запознаени со Python-- питон стил приклучат метод на жици.
Но, тоа не е повеќе случај во Свифт 2.
Сакате да го користите ова ако сакате да concatenate низа на работи
заедно со стринг.
>> Па можеби тогаш во нашата дискусија на просечната пред,
тоа го прави малку повеќе смисла за нас за да го поставите на просечната функција
за да биде опционално двојна а од само експлицитна двојно.
Бидејќи имавме дека непредвидени околности, каде што,
што ако gradebook всушност нема вредности во него?
Што треба просечниот принос?
>> Па можеби во C вас би го сторил нешто
како што се предвидени односно вредноста стража, како 0.0, или можеби негативен број,
или нешто само што претставува фактот дека имаше некои состојба на грешка
а вие можеби не, всушност треба способност да се пресмета дека просекот.
Па убавината на специфицирање на опционални тип ќе биде да го направите тоа.
И јас сум сега велејќи дека сите овие зборови, но ова всушност не користи optionals.
Но, ќе видиме дека во само минути, каде што може да се постави просек
да биде изборен тип на податоци, така што ако тоа всушност се враќа на некои податоци, а потоа
ние ќе ги врати тие податоци.
Во спротивно ние ќе се врати nil, велејќи дека овој
нема никаква поважна пресметка.
>> Ајде да се движи кон нешто друго.
Па од тука, ние сме биле во потрага по сите овие примери во наредбодавната линија.
Но, навистина она што се случува што треба да се занимаваат со е Xcode.
И една од убавите работи во врска Xcode е, а посебно кај Свифт,
е дека имаме овој нешто што се нарекува игралиште.
И игралиште е воопшто не е на iOS стан.
Но тоа ви овозможува да експериментирате со Свифт во многу лесен начин.
Можете да напишете сите на вашиот код.
Тоа е убаво синтакса нагласени овде.
Кога ќе го креирате нова датотека, тој ќе побара вас, ако сакате да се создаде игралиште.
Но убаво нешто за Игралиште е дека на десната страна од вашиот прозорец,
дали тоа всушност ви покаже излезот на вашиот код.
Значи, ако јас се движите надолу, може да се види она што на производство на различни линии на код
всушност, се случува да биде.
>> Значи во овој случај, ние ќе треба да менуваш насоките само малку
и да се зборува за нешто што е навистина важни за ова високо ниво начин
дека Свифт работи, и тоа е оваа идеја за затворање.
И веројатно сте го виделе ова малку во JavaScript.
За оние од вас кои се во CS50, куќишта
се многу популарни, многу добар начин да се направи високо ниво работите во современи јазици.
Но, тоа е, исто така, вид на тешко да се заврши вашата глава околу првпат.
Значи, ако сте во потрага на овој прв пат, тоа е во ред.
Само погледнете во изворниот код и да видиме ако може да го дознаам дома.
>> Значи во овој случај, да речеме дека ние сакате да се создаде голем број на експонати
со некои фиксна вредност.
Значи во овој случај можам да се создаде функција.
Одам да го наречеме моќта 2, чија единствена цел во животот
е да се земе некои влез и двокреветни тоа, и да се врати на таа вредност.
Забележите дека јас сум тука прифаќање на еден тип на податоци.
Тоа се случува да биде променлива наречена х.
Тоа е од типот Двојната Круна.
А јас ќе одам да се врати двапати овде.
И јас сум само ќе го направи многу, искрено, доста
наивен начин на удвојување на оваа вредност.
И јас ќе ви покажеме зошто ова корисно е за само една секунда.
>> Забележи дека тука го имаме овој опсег повторно. за нешто во 1, точка
точка точка, 2, што значи дека овој циклус ќе се одвива два пати.
Но, ова претставува бинарна променлива.
Тоа значи дека јас не сум навистина се случува да биде со користење на таа променлива никаде
во внатрешноста на овој циклус.
Јас само сакам оваа линија на код за да се кандидира двапати,
без потреба да се знае вредноста на тој опсег.
>> Значи во овој случај јас се кандидирам резултат пати по два пати, што во суштина
значи дека јас сум квадратура оваа вредност.
И ова се случува со работи како што би се очекувало.
Моќност од 2, донесување на вредноста на 2.0 ни дава моќност од 4.
3.2 дела за 10,24.
>> Сега можеме да се направи слична нешто за моќта на 3.
Но сега само промена на опсегот.
За бинарна променлива во 1 преку 3, помножи 3 пати,
и го прават истото.
>> Така што ова може да се чувствуваат малку измислена.
Но, има важна нешто тука што
е дека гледа во овие две функции, има
само едно нешто што е различно, која е оваа вредност во опсег.
Сè друго во врска со овие две функции, моќта на 3 и моќта на 2,
се, всушност, идентични, бидејќи тие работат на ист начин.
>> Па во овој момент, малку аларм треба да се случува надвор.
Се надевам дека она што си ти што зборуваш, знаете, тоа се чувствува малку
како удвојување на напорите.
Можеби постои начин на кој јас би да биде во можност да капсулирало сето ова
и да се обезбеди функција или создади функција што
го прави токму она што го сакате, без има потреба да ја напишете експлицитно.
И тоа е она што на моќта на затворање ни овозможува да се направи.
Па ајде да ги разгледаме во тоа.
А јас ќе поминете неколку минути за овој, затоа што овој
е прилично важно за Свифт.
Го гледаме ова цело време.
Ние ќе треба да се дефинира функција.
Тоа се случува да се нарече powerOf.
Тоа се случува да се прифати параметар наречен y од типот Инт.
Но да ги разгледаме во видот враќање.
Вид на враќање е, загради, Двоен Двојно стрелка.
Што значи дека на оваа функција, оваа функција powerOf,
се враќа во функција.
Што е прифаќање на двојното и враќајќи се двојно.
Така што би можело да звучи вид на луд, но ајде да дојдете долу малку
и гледам да видам што се случува.
Ние сме во внатрешноста на оваа функција powerOf.
Ние сме создавање на нова функција наречен exponentiator,
но тоа не е важно она што е.
>> Забележете дека ова има влезна вредност на x.
И дека ги презема во Двокреветна и враќајќи се двојно.
И ова е истиот код кои ги видовме погоре, освен тоа што вредноста на 2
или на вредноста на 3, кој горна граница на тоа ниво,
е заменет со оваа вредност на y, која
беше првичната параметар од нашите powerOf функција.
И во овој момент, ние врати exponentiator.
Ние сме да се врати на функцијата.
>> Тоа е вид на како мала феноменално.
Но, ајде да се замисли што ќе се случи кога ќе се јавам оваа функција powerOf
и да го положат во неа некои вредност, како и 2.
Што ова значи е дека Јас сега имаат вредност
2 за y, што значи дека оваа вредност y во овој exponentiator функција
ќе биде дека вредноста 2.
Но јас сум враќање на овој exponentiator функција.
>> Па види што Свифт вели јас направивме во овој случај.
нека плоштадот е дефиниција, тоа е функција која прифаќа Двоен
и се враќа двојно.
Имам креирано функција дека плоштадите нешто
со користење на овој механизам, токму тука.
И навистина она што се случува е дека тоа се враќа на оваа функција
exponentiator, но оваа вредност y е завиткано во него.
И така сега секој пат кога ќе го користите овој променлива или оваа постојана наречен
плоштад, тоа што се случува да се однесуваат како функција.
И така јас, тогаш може да се јавите дека променливата како би се јавите на функција,
и да помине во тоа голем број, како во овој случај 3.
И јас тогаш ќе се соочат на оваа вредност.
Па 3 квадрат ќе потоа стане 9, како што може да се види тука.
>> Навистина луди, но ова сега ми овозможува можност
да се создадат други функции powerOf.
Како што може да се каже, во ред, и сега сакам да се создаде нова функција, powerOf (3),
и чување на кои во постојана наречен коцка.
Коцка и сега се случува да се биде посебна функција која ќе потоа
преземат некои вредност како влез и коцка која вредност, како што можеме да видиме во крајна линија
овде.
коцка 2 ќе резултира со 8.
>> Се надевам дека прилично уредни работи.
Никогаш не сум видел тоа порано.
Ги охрабрувам да се погледне во куќишта и да го испита овој малку повеќе.
Тоа е навистина моќна работи можеме да видиме многу во вклучите Javascript-и некои други јазици.
Тоа е навистина од витално значење за разбирање на API-јата, како и
дека ние ќе дојдеме до во само една секунда.
Да?
>> ПУБЛИКАТА: Кога ќе го направите powerOf (2), загради, а потоа
друг заграда, друг input-- ти си во основа на местото на плоштадот.
ДАН AMRMENDARIZ: Па гледам во последен линија тука.
Тоа е, всушност, сосема е можно да се врзувањето направите тоа како што е предложено.
Па powerOf (5) значи дека ние ќе треба да имаат exponentiator од 5 до тука.
Па тоа е во суштина ќе биде истото што и 4 на петтиот моќ,
затоа што сме создале exponentiating функционира на петтиот моќ,
и ние сме поминува во кои функционираат на вредноста 4.
И да добиеме таа вредност кои ги очекуваме, 1024.
ПУБЛИКАТА: И тоа не е име, така што тоа го прави полесно
да се читаат, на плоштадот сеедно.
>> ДАН AMRMENDARIZ: Точно, точно.
Така пред да само да го стави во постојана тука, па
што го направи тоа лесно да го користи тоа име.
Да?
>> ПУБЛИКАТА: Во овој контекст powerOf, тоа е дел
на програмскиот јазик за разлика од начинот на кој што го
мислам на powerOf во [Беззвучен]?
ДАН AMRMENDARIZ: Значи во овој случај, powerOf
е само името на функција која јас дефинирани овде.
Па тоа не е вродено на тој јазик,
но наместо тоа, тоа е само функција која има
тоа име, бидејќи јас го даде тоа име.
Било какви други прашања?
Во ред.
>> Сега ова е одлично.
Но вие нема да ја видите многу функции кои затворање
се вака каде што се дефинираат, внатре од една функција, друга функција.
И можете да го стори тоа.
Но, тоа не е вид на навистина е потребно, нели?
Како и зошто да дефинирам овој функција наречена exponentiator
а веднаш потоа се врати.
Зошто не можам само веднаш се врати на оваа функција?
>> И всушност, ова е токму Идејата зад концептот наречен
Анонимен функции, доколку Анонимен функции не се всушност
да има име, бидејќи тие не треба да имаат еден.
И така во овој случај, во 7B, може да се најде токму тоа.
Тоа е за сите на истиот код, го прави токму истото,
но сега ние сме го смени малку па дека овој powerOf функција веднаш
се враќа во функција.
Се забележи дека по враќањето, тука е отворена малите загради.
Се очекува овој влез Брачен.
Се очекува дека производството Брачен.
А потоа и во клучен збор го дели кодот себе.
Значи ова е анонимен функција.
Тоа всушност не има име, а пред тоа беше наречен exponentiator.
Но, како што видовме, само навистина не се однесуваше на exponentiator
надвор од таа функција.
Па тоа не е важно.
Значи ова е анонимен функција т.н., бидејќи тоа е безимен,
но сè уште се користат во смисла на овој закон.
>> Следните неколку од нив сум се надевам дека ќе продолжи
дува вашиот ум малку.
Ние може да се поедностави оваа уште повеќе.
Бидејќи, како што беше лукаво претходно истакнато,
можеби ние всушност знаеме, од страна на inferring од овој законик, што
на излез од овој закон е и ќе биде.
И всушност, во овој анонимен функција, всушност можеме да заклучиме типови на податоци.
>> Така што во овој еден, ние веќе не треба експлицитно да се дефинира
видот на податоците и тоа е се влез и излез од оваа функција
за неколку причини.
Една од нив е дека ние сме се дефинирани, до на Прототипот на функцијата за приближување,
кој тип на податоци овој анонимен функција треба влез и излез.
А од друга страна, ние може да заклучиме од кодот
овде дека сме прифаќање внесување дека е од типот Двоен
и враќајќи се двојно.
>> Забележите дека овде не сме експлицитно дефинирани имињата на аргументи
дека оваа функција е прифаќање.
И така го гледаме ние може да се однесува оние параметри користејќи $ 0, $ 1,
така натаму и така натаму, во зависност од бројот на кој параметар се користи
во оваа функција.
>> Ова е нешто што ви се случува да се види многу е ова отворен малите загради
дефиниција проследено со $ 0, а потоа некои од работењето,
а потоа затворен малите загради.
Кој е анонимен функција која врши оваа операција.
Таа има овој параметар, каде што тоа е тип се заклучува.
Дека првиот параметар е $ 0.
А некои операција е случува на таа $ 0.
>> ПУБЛИКАТА: Значи знакот за долар значи параметар во основа,
и 0 значи првиот?
ДАН ARMENDARIZ: Тоа е точно.
Така знакот за долар во основа значи параметар, и 0 означува првата.
Но таа работи конкретно во овој случај каде што не сум по име
аргументите во мојата анонимни функција.
>> ПУБЛИКАТА: Дали Perl или нешто има овој знак за долар, долар 0 таму?
ДАН ARMENDARIZ: Дали кои, Жал ми е?
ПУБЛИКАТА: Дали Perl ова доларот 0, доларот 1--
ДАН ARMENDARIZ: Не сум премногу запознаен со Perl,
но она што ја дефинира PHP променливи врз основа на доларот знаци.
А може да има некои јазици кои имаат особини се допаѓа ова.
Всушност, Свифт позајмува број на функции се допаѓа ова
од голем број на други јазици.
Гледаме навестувања на Пајтон во неа.
Оваа дефиниција на тип чини дека доаѓа од OCaml.
А ние имаме само еден куп на работи од многу различни јазици.
Тоа е една од убавите работи во врска Свифт
е дека е потребно многу од најдобрите идеи од еден куп на јазиците
и на сите нив заедно shoehorns во една супер јазик.
Всушност, ако ми дозволите да продолжи дува вашиот ум,
па ние сме биле прави сето ова.
Можеби и ние може да се поедностави овој малку малку по свесен дека, се разбира,
Свифт има exponentiating функција изградена во.
Ако увезувам Дарвин, кој е само библиотека
се одликува оваа функција наречена Pow, сега Јас може да се поедностави мојата моќ на функцијата
да биде следново.
Тоа се случува да се врати овој анонимен функција.
>> Но погледнете како едноставно тоа е сега.
Ова е анонимен функција што е прифаќање на некои од типот на податоци,
и тоа се случува да биде една аргумент конкретно,
референцирани од $ 0, кој е од типот Двојната Круна.
Тоа се случува да се врати еден вид Брачен.
Но, изјавата на враќање сега е имплицитно.
>> И тоа е точно дека овој стил е многу, многу распространети кај Свифт,
сите над местото.
Ние ќе треба да се види ова цело време во Свифт.
Па јас сум покажува сето ова да се вие, бидејќи на оваа синтакса.
Ова е многу честа да се види, што тоа значи
е анонимен функција кој врши
некои операција на овие аргументи.
И постои имплицитна враќање.
Па тоа е апсолутно истото за нас да се каже ова, токму тука.
>> Бидејќи овој кадрава заградата е во функција,
ние сме ја извршите оваа операција на првиот аргумент.
Ние ќе треба да се врати тоа.
Но, ова е надворешниот враќање враќајќи се дека целата функција,
дека целата анонимни функција дека ние сме само замислен.
Било какви други прашања?
Добро, јас не знам дали вие момци се подготвени за тоа,
но можеме да одиме уште полуда со Свифт.
Дали сте подготвени?
Добро, ова е одлично.
>> Сега ние, всушност, имаат способност да, кај Свифт, бидејќи за тоа како модуларен
и како што е врз основа на протоколот, да се дефинираат сопствените freaking оператори.
Како во овој случај, ние немавме оператор за exponentiation-- добро,
за вршење на овластувањата на нешто.
Но, можам да, кај Свифт, дефинирање на нов оператор кој го прави токму тоа.
Значи во овој случај постои еден куп на синтаксата тука.
А јас ќе ви овозможи да се погледне во него, дома кога ќе се погледне на овој.
Но, ние се дефинира оваа инфикс оператор, **, која што тогаш ќе ни овозможи,
со дефинирање на она што функција ** всушност
не, да се прифати на левата рака, страна и десната страна,
а потоа да се вратат на експонент на таа левата страна на десната страна.
>> И така сега одеднаш јас создадоа нова броителот.
Па 2 ** 3 значи 2 до третата власт.
[Феноменално SOUND] Оваа страна себе треба да се направи да биде како,
Добро, завртка В. Одам Свифт на целиот пат.
Ова е супер.
Ова е прилично фантастично.
>> Иако ова е одличен пример.
Но никогаш не сум еднаш надвор на овој пример, всушност,
дефинирани моето оператор.
Но, сепак, тоа покажува Голем дел од моќта на Свифт
и зошто ова е всушност навистина многу кул.
Во ред, да?
ПУБЛИКАТА: Ако сте дефинирање на вашиот сопствен оператор,
како знаеш, да не случајно се обиде да креира оператор кој е
некаде во C, како скриени некаде во Свифт,
како една мрачна оној кој ви се може да не сте виделе порано.
>> ДАН ARMENDARIZ: Значи, ако сте се обидува да се дефинира свој оператори,
постои ризик на дефинирање еден преку постоечката оператор.
Што оди во нивото на детали кои Јас не мислам дека имаме време да се премине.
Но, тоа е ризик.
А тоа е всушност многу причина зошто Јас не го користат знакот за карет, која
кога сме пишување од власта, ние обично користете 4 мали карет 5 или нешто
како што, само кога сме Gchatting пријатели или whatever.
Но, во тој случај, кои, всушност, ќе предизвика судир.
И така јас тоа само затоа што се избегнува Јас се случи да се знае во овој случај
кои што би предизвикало тој судир.
>> Во ред.
Сега за жал, за последните седум минути,
Морам да продолжам дува вашите мисли малку.
Па, дозволете ми да ви покажеме некои други работи, како и.
>> Ние сме ви покажале оваа идеја на имаат овие анонимни функции,
овие куќишта кои ќе ви овозможи да се вид на функции помине околу.
Можете да ги врати.
Можете да манипулира со нив.
Можете да го направите сите видови на луди нешта.
>> Но, една друга работа што се случува да биде корисна
е способноста да се, што е спротивно да се враќаат тие функции
во функција, да се пренесат на функција како параметар за друга функција.
Може да се размислува и зошто на земјата јас би сакал да се направи такво нешто?
>> Па, ајде да кажам дека сакам да се земе овој оператор дека јас
работеле толку тешко да се создаде и да се примени тоа до еден куп на различни броеви
во низа.
Значи во овој случај имам низа integers-- 1, 4, 7, 2, 5, 10, 56.
И сакам да ги удвои.
На начинот на кој ние би обично го направите тоа е да се пишува
едноставен за јамка дека iterates над сите нив
и изведување на некои вид на квадратни операција над нив,
внесување на овие нови вредности во нов променлива, или подобро кажано, нова низа тука.
А вредноста на производството на Резултатот е тогаш сите оние низи,
односно сите оние елементи сега квадрат.
>> И ние би можеле да го направат истото нешто за тоа местење Рубикова коцка,
но малку аларм Треба да се оди надвор
велејќи дека можеби има на некој начин дека ќе
да биде во можност да се поедностави оваа малку.
И всушност постои.
Што ако ние би можеле да се создаде функција која ни овозможува
да се прифати, како предатор, на функција?
Значи во овој случај, може да донесе изгледа на овие аргументи.
Ние ќе треба да се прифати листа на двојки.
И тогаш ние ќе да прифати функција
во променлива наречена f кој се случува да се земе и да се врати двојно двојно.
И целиот излез на целата оваа функција
наречен Mapper ќе врати низа наречен двојно.
>> Што е ова, тогаш ќе ми дозволите да направите е да iterate во текот на таа листа
и го прават истото, но сега применуваат таа функција на секоја
на индивидуалните вредности во таа листа.
Па јас навистина не знам што f е.
Тоа не е важно за мене.
Но толку колку што е потребно во Двокреветна, врши некоја работа на неа,
а потоа се враќа Двојно, јас тогаш ќе биде
можност да на сајтот на таа функција во склопот секој елемент во листата.
>> И овој вид на програмирање наречен повисоки функции, со цел,
каде што ние сме поминува функции околу како параметри
и вршење на работите со функции.
Тоа е вид на како преземање на сите овие идеи дека сме научиле во CS50
а земајќи вид за да на следното ниво.
И тоа е сè CS51 стил работи.
И така ќе оди во длабочина повеќе во класи како што.
>> Но, ова е, исто така, важно, бидејќи ние тука
види голем број на функции кои се користат во Свифт
кои во суштина го прави тоа овој, каде што имаме
некои броеви, некои низа на броеви.
Ние ќе треба да мине низа во нашата Mapper.
И ние исто така ќе треба да поминат некои функција, која
ние сме веќе дефиниран овде.
Тоа се случува да биде квадратни.
И ние си оди за да потоа плоштад сите оние броеви
и чување на кои во овој резултат тука.
>> Па овој случај ние сме дефинирани нашите сопствена функција наречена Mapper.
Но ова точната работа е, всушност, се вградени во Свифт.
Постојат голем број на функции наречен мапата.
Има функција на сајтот, има намалување на функција,
и има функција на филтерот, со кои суштински се применуваат функции
на секој елемент во една листа за да ги измените, на некој начин.
>> ПУБЛИКАТА: Значи, бидејќи ви се трансформира податоците во друг формат
преку function--
ДАН ARMENDARIZ: Добро.
Да, па на функцијата дека ние сме прифаќање
е трансформирање на податоците на некој начин.
Во овој случај, ние беа или тоа квадратура, или сме биле тоа местење Рубикова коцка,
или навистина, би можеле да се изврши Нема работа за неа на сите.
>> Но, дозволете ми да ви покаже колку е тогаш ова ќе изгледа во пракса.
И повторно, јас сум водење на малку време. па не сум
ќе биде во можност да ги прегледа сите на изворниот код овде во детали.
Но, јас ве охрабруваме да го направите тоа.
Ние ќе го објавите во најкраток можно по овој разговор.
>> Но, ако се погледне на овој, претпоставиме дека имаме листа на броеви,
низа на броеви во оваа променлива наречена броеви.
Тогаш сакаме да се изврши оваа операција филтер на тие бројки.
Па филтер е повисока функција, така што
прифаќа низа и исто така функција.
И на секој елемент во таа низа, ја врши таа функција.
>> Ако таа функција се враќа вистина, тоа држи таа ставка.
Ако таа функција се враќа false, го фрла таа ставка.
А потоа го враќа листа тогаш тоа е составена сите
на оние предмети кои се филтрира.
>> Па во друга зборови, ова е истата идеја, gradebook.
Ние би можеле да имаат различни оценки во оваа вредност повикуваните броеви.
Би можело да биде 100, и 70, и 40, па натаму и така натаму.
Она што го прави овој филтер е најава дека ова е тоа што синтаксички шеќер
за анонимен функција.
Ова е анонимен функција велејќи дека параметарот дека сум прифаќање
ќе биде, ако тоа е поголем од 70,
тогаш ова ќе се врати вистина, што значи дека таа ставка ќе се чуваат во овој филтер.
Значи, да се биде малку поконкретни за ова.
Ако имам оваа низа на броеви и се состои од 100, 70, и 40,
Јас изведувам овој филтер операција на секој од нив.
Така што првиот е оваа вредност од 100.
100 е поголема или еднаква 70 Вистина е, што
значи дека 100 се чува во оваа нова копија од оваа низа.
70, исто така, поминува.
40 но не е така.
Значи она што се враќа во passingCount е низа на елементи 100 и 70--
100, запирка, 70.
Тие се единствените две предмети кои се чуваат.
И така причина јас брзо отиде преку многу од овие вид на висока цел
работите се бидејќи ова е дека заедничкиот Она што ќе го видите во Swift прилично
често, се врши некоја работа со користење на овој анонимен функција синтакса.
>> Има некои кул работи.
Прекинувачи се навистина моќна кај Свифт, Мислам само како луд, луд моќна.
Можете да го користите Switch, и вие всушност може да ги применуваат
да се движи, што е вид на луд, и направи фенси работи како што.
>> Но, во последните неколку минути, Јас да прескокнете многу далеку
и ќе покаже конкретен пример за тоа како може да се создаде во iOS стан користење Свифт.
Така, кога правите ова, ќе треба да ги преземат
а изгледа at-- на Apple документација, тие
имате голем број на навистина добри вежби за создавање на вашиот прв апликација.
И јас ве охрабруваме да се направи дека, бидејќи тие ќе се земе
низ сите чекори за тоа што точно да се кликнете на за да се создаде некоја апликација iOS.
>> Но, тука имаме оваа iOS стан.
И тоа е прилично едноставна стан навистина.
Ако јас се кандидира тоа, дозволете ми покаже вие како изгледа.
Сето тоа во суштина не е повлекува од интернет датотека JSON
дека сум се чуваат на серверот.
И дека JSON датотека дефинира слики кои дозволуваат
мене да потоа циклус преку, на мојот стан, слики од мојата веб сервер.
>> Па имам тука getNextImage.
Се вчитува слика од интернет, а потоа тоа го прикажува на екранот.
>> Така, тоа е прилично едноставна.
Но, целта е да се покаже вие како ние може да се комбинираат работи
од вториот неколку недели од CS50 во вистински iOS апликација.
Со други зборови, можеби една од работи што ќе сакате да направите,
е да се имаат некоја апликација iOS кои може да се повлече податоци од интернет
и да го покаже на корисник некои информации.
Кој е целосно точката на овој изворен код овде.
>> Значи, има многу да се каже за како да се направи вистински развој на iOS.
Постои многу луди синтакса дека сме сосема уште не се гледа
како класа, што, всушност, е класа.
Ние во голема мера може да се игнорира дека сега засега.
>> Не се забележи дека ние сме содржани во рамките на оваа различни нешта
што веќе видовме како функциите кои имаат специфични имиња.
И кога ќе се даде на оние функционира точни имиња
кои се очекува од страна на iOS, всушност тоа се чувствува малку магично.
Но, кога ќе се создаде iOS апликација, постојат
се специфични имиња на функции кои се нарекуваат со самиот телефон
како апликација се вчитува да се обиде да се создаде процес кој, всушност,
тече вашата апликација.
Значи, повторно, има многу работи кои јас треба да се замачкаат тука со цел за нас
да се зборува за ова конкретно.
Но, јас ве охрабруваме да ги погледне во можеби Од друга семинар iOS, но исто така и некои
на вежби онлајн, кој го направи многу подобра работа на опишување
на конкретни информации.
>> Но, можеме да видиме неколку работи кои се интересни од код овде.
Известување дека имаме ако извештаи.
Патем, една важна ако нешто во врска со изјавите
е дека загради околу Булова израз се опционални.
Но големите загради не се обврзувачки, без разлика колку малку или многу линии на код
имаш во ако соопштението.
Вие не може да има ако извештаи без големите загради во Свифт.
>> А тоа е, добро, нешто глупо.
Но, има историски причини за тоа.
Тоа би требало да ве спаси од себе.
Вака на пример, не можете да елиминирање на големите загради околу тоа
ако соопштението.
Тие се всушност е потребно.
Па јас ве охрабруваме да ги да ги разгледаме во тоа.
Но, има уште еден конструираат дека сакам
за да ви покаже дека околу Свифт е ново Свифт 2.0 споредба
со постарите верзии на Свифт, кој е следниот.
Да видиме од каде го ставив тука?
>> Значи во оваа функција наречена fetchJSON, оваа функција
е одговорен за влечење која JSON датотека од URL-то, што само така се случува
што треба да се работи на мојот CS50 ИРО.
Јас само што почнав Apache-то, ставам JSON датотека таму,
и јас сум во можност потоа да се повлече дека податоци од интернет со користење на
оваа функција и тоа рачно, кои се предвидени од страна на телефонот.
Тоа е предвидено од страна на библиотека со која ќе се користи кога
правиш некои развој iOS стан.
>> Забележите дека овде има оваа необична синтаксичката конструкција наречена стража.
И навистина сето тоа е во Свифт е начин на проверка
дека некои работи треба се исполнети пред да
продолжи со остатокот од функцијата.
Па јас би можеле да имаат, со користење на овој изборен тип,
Јас можев да се најде од страна на URL извршува оваа функција NSURL
и зачувување на таа во URL-то постојана, а потоа проверка
да се види дали рачно беше нула, затоа што требаше да се вратат изборен тип.
И ако тоа е нула, тогаш јас би печатење на грешка, а потоа се врати.
>> Но, наместо тоа, што им овозможува на стража ни направи е тоа нешто многу,
но се осигура дека тоа е всушност случај оваа адреса
е правилно поставен од NSURL.
И ако е така, тогаш тоа прескокнува ова, и тоа
ќе ви овозможи да се продолжи со URL биле правилно дефиниран.
Но, ако тоа е случај и дека URL-то не е правилно дефиниран,
ако оваа функција враќа грешка или некои други неочекувани работа
всушност се случува, ова стража конструкт ни овозможува да потоа и излез кој грешка
и да се врати веднаш.
Да?
>> ПУБЛИКАТА: Значи тоа е вид на како ако тогаш на друго место?
ДАН ARMENDARIZ: Тоа е вид на како и ако потоа друг, да,
освен дека овој URL е тогаш дефинирани за сè под ова.
Ако тој помине оваа стража, тогаш тоа всушност, ќе биде исполнет со податоци
и употребливи во останатите изворниот код во вашата функција.
Па се сомневам дека си оди за да почнете да ја видите оваа стража, како и.
И да бидат свесни за тоа.
>> Па само гледајќи во неколку други работи, ова е она што токму овде,
Што мислиш, само врз основа на она што ние се зборува за и пред тоа?
>> ПУБЛИКАТА: Мислам дека ќе се кандидира во листата?
>> ДАН ARMENDARIZ: Значи тоа е блиску.
Ова е функција која се дефинираат.
И ние сме внесување на таа функција како аргумент за оваа функција овде.
>> ПУБЛИКАТА: [Беззвучен] ако не нула.
Па не е во листата, нели?
>> ДАН ARMENDARIZ: Ако грешката не е нула, така што is-- па морам да се движите.
Па, ајде да видиме, јас навистина не може скролувајте до овде.
грешка е аргумент кој се предадена на овој анонимен функција.
Ова е анонимен функција.
Тоа нема име.
Но, ние сме прифаќање на овие три аргументи, податоци, одговор, и грешки.
И тоа се случува да се врати празен, па тоа не се случува да се врати ништо.
И ова е содржината на таа функција.
А потоа имаме пристап во внатрешноста, кои функцијата на секој од овие аргументи.
>> Така, тоа е виорот турнеја на јазикот.
Но се надевам дека со ова, се надевам дека штом ќе се земе
разгледаме во некои од вежбите специфични за iOS развој со Свифт,
особено ако се оди на Епл развивач на веб page--
тие имаат многу навистина добри вежби за да го започна.
Но се надевам дека само овој час на зборување за синтаксата има се дадени
ви е доволно за да започнете со тоа.
>> Ние ќе ги објави сите на овој извор кодот на веб-страницата на семинарот
што е можно побрзо, а исто така на слајдови па мора да биде референца за сите оние.
Но, со среќа со вашите проекти.
И сите многу Ви благодарам што дојдовте.
>> [Аплауз]