Даниел ARMENDARIZ: Здраво на сите, добредојде на iOS стан развој со брза. Јас сум Дан Armendariz. Јас сум precepter на компјутер науката тука на Факултетот за инженерство и применети науки. И Свифт е всушност вид на навистина уредни јазик. И јас имам некои планови за денес. Така, во текот на следните час или па ние ќе да се погледне во IOS стан развој на себе користење Xcode, а всушност создавање на некои многу основни, многу едноставни апликации. И да гледа во начинот на кој всушност се оние апликации, и да се изгради, а всушност ги стави на iOS уред. Некои од работите кои ние нема да се погледне во ќе вклучува работи како всушност земање апликација и тоа ставање на App Store. Има многу онлајн вежби кои ќе ви помогне со тоа аспект од неа. Но, исто така, затоа што дел од CS50, ќе добиете да се приклучат на развојот на Apple тим, стан развој тим CS50 е. Ако не сте го направиле тоа уште и што се поврзани со CS50, Јас ви препорачуваме да да го направи тоа, бидејќи тоа Така ќе бидете во можност да се создаде некои програми во Xcode, изградба на нив, а всушност се стави нив на некои од вашите iOS уреди ако навистина имаат физички iOS уред. Ако не имаат физичка iOS уред кој е повеќе од парична казна. Ти всушност може да се развие за iOS. И Xcode има симулатор кој ви овозможува за да ја видите вашата апликација во акција на вашиот компјутер. Но, тоа е вид на уредни нешто всушност да играат и да комуницирате со вашето барање на вистинскиот уред. Значи има неколку барања за всушност се направи сето ова развој. Една од нив е дека треба да имате Mac. Тоа мора да се работи 10.9.4 или подоцна со цел да се направи со брз развој. Можете да ги користите претходно верзија за да се развие со цел С за iOS и Mac. Но, јас препорачувам, и многу од примери кои ќе се види и денес, користат 10.10 Yosemite. Значи, ако се уште не сте се надградува, тоа е добар изговор за да го стори тоа. Сега Xcode 6.1 е најновата верзија на интегриран развој на животната средина кои ги обезбеди Apple за слободен дека може да го симнете надвор од App Store. И јас Ви препорачуваме да исто така, работи на најновата верзија. Ако се случи да се работи порано верзија, Xcode 5 и само под едноставно не го поддржуваат брз она. И бета верзии на шест, кои беа ослободени во текот на летото, симпатизер брза, но има бил огромен број на промени во јазикот, што е доволно така што кодот што сте ќе се погледне и дека може да се најдат на интернет не, всушност, ќе се состави правилно во овие претходни верзии на Xcode. Значи, повторно, ако се уште не имаат инвеститорот сметка, Јас Ви препорачуваме да одат на developer.apple.com. Регистрирај се на Facebook, се создаде инвеститорот сметка, и се приклучат на тимот CS50 стан развој. Тоа ќе Ви ја даде можност да ги собере на вашите апликации и ги стави на Вашиот уред. Добро, па ајде да започнете. Самиот првото нешто ние ќе треба да направите е да се за да всушност се создаде многу едноставен проект во Xcode кои ќе ви овозможи да се направи апликација. Значи, ако сеуште не ги имаат Xcode отворен, оди напред и да го отворите и да се создаде нов проект. Посебен поздравниот екран ќе се отвори и ќе ви даде некои опции за тоа што е тоа што сакаш да го направиш. Речеме дека сакате да се создаде нов проект, нова апликација. Овој прозорец ќе pop-up, под претпоставка дека сте со користење Xcode 6.1. Токму сега, и за Времетраењето на овој семинар, ние ќе треба да се користат еден поглед апликации, само вид на основна примена да Засукајте ги ракавите. И можете да филијала надвор на свој од таму. Кликнете на Next во овој момент. Сега тука има неколку работи кои можеби ќе сакате да се влезе. Името на производот е Името на вашиот проект. Во овој случај, јас сум само ќе го наречеме Seminar1 бидејќи тоа е нашиот прв пример. Името на организацијата, во овој случај е само моето име. Вие се разбира може да го промени на вашиот сопствено име, или да се CS50. Организација идентификатор, ако се случи да имате веб-сајт само се името на доменот обратна, com.yourname. а потоа името на производот треба да се појави автоматски после тоа како пакет идентификатор. Очигледно јазикот, дека ние сме ќе треба да се користи за денес е брзо. Можете да, се разбира, користете Цел C за тоа, но денес ќе биде брз. И ние ќе за сега велат универзална уреди, па дека таа работи на двете iPad и iPhone. И ние ќе го напушти јадрото податоци неконтролирано да се задржи проектот релативно едноставно засега. Па ајде да одиме напред и да кликнете на Next. И тоа се случува да ме праша каде што сакате да го зачувате. Јас само ќе го зачувате на мојот десктоп за сега. Добро, па сега тоа е она што ќе се случи кога ќе всушност отворен Xcode. И да се забележи дека Самиот првото нешто што гледате е ова извичник дека вели дека нема потпишување идентитетот кој се јавува. Јас намерно го направи ова на мојот компјутер и јас сум надевајќи се дека јас ќе одам да да биде во можност да всушност го поправам, затоа што сакам да се види како оваа всушност, ќе работат на вашата машина. Оди напред и да кликнете фикс прашање. Тоа ќе ве праша дали имате постоечките Apple програмери профил. Ова е местото каде се приклучи на CS50 стан развој тим е важно, така што вие не има само еден стан сметка, но вие исто така имаат способност да го потпише апликации и ги стави на вашиот iOS уред. Ова е not-- клик фикс прашање не е потребно ако сте само ќе изградба и развој на локално ниво, целосно во рамките на iOS симулатор. Но, за сега јас ќе одам да се развие и да ги стави на мојот iPad, кои ќе бидат можност да се емитува како и. Значи, јас сакам да всушност го додадете ова. И тоа се случува да прашам јас за мојта јаболко проект. Значи, тоа се случува да биде тоа. И морам да викнам мојот лозинка, што е повеќе од тука. Значи ми го даде само една секунда за да се најде дека, копија од тоа, и ставете го овде. Кликнете Add. Тоа се случува да ме прашаат кој тим Сакам да се приклучат. Одам да се направи Факултетот за инженерство. Кликнете Приклучи се. Whoops, тоа е погрешен. Да го направите ова. Се надеваме дека ќе работи. Тоа што сè уште не функционира. Ние сме истекува на добрите тука. Добро, ова треба да се работи. Сега се затвори таа. Сега ајде да го направите на училиште инженеринг, кликнете одберете. А сега се надевам дека по неколку секунди can-- ред, Јас ќе ја одземе и барање. О човек, тоа се случува да не работи. Добро, јас ќе се обидам на еден поинаков. Да го направите ова овде. Во живо демо ме неуспешна. Ние можеби ќе треба да се врати само изградба на целосно на локално ниво, но тоа ќе биде во ред во овој случај. Па еве, а тоа е, всушност, работа, она што ние ќе треба да направите е само создаде многу едноставна Hello World апликација. Значи ова е Xcode. И ако не сте го виделе сепак, тоа може да биде малку застрашувачки на прв. Има многу на стакла, има многу doodads во различни области. Но, само да сфатат дека постои навистина неколку главни компоненти на овој развој на животната средина. Од далеку левата страна се сите датотеки кои се однесуваат на вашата програма или на вашиот проект. Ќе се кликнување околу на некои од нив и ние ќе укажуваат на повеќето значење со текот на времето. На екстремната десница, ние има множество на атрибути. И сите овие атрибути, таму различни стакла за атрибути. На паноа ќе се промени во зависност од контекст на главна содржина, која се случува да биде во средината. Сега средината, всушност, може да се покаже вас на различни нешта, на пример кодот себе. Или вие всушност може да have-- кога кликнете на сценариото кое е, патем, само графички претставување на корисникот интерфејс за вашата application-- тогаш атрибути панелот на многу екстремната десница всушност, ќе се промени. Сега има уште неколку други работи кои сакам да истакнам. Можете вид на може да се истражуваат околу во средината на своја. Но, една од работите што е многу корисно е ова копче тука, горниот десен агол од прозорецот. Има ова копче што личи на екстремната го остави има став проследено со два кругови и вид на две стрелки кои посочуваа далеку едни од други. Ако се префрлате помеѓу стандарден едитор, кој е на многу лево еден, еден кој е избран од страна стандардно, и двете кружници преклопување едни со други, она што всушност се се двојно панелот поглед. И ова е, всушност, ќе бидат корисни за нас кога треба да се поврзе предмети во корисничкиот интерфејс на кодот. И ние ќе разговараме повеќе за дека во само еден миг. Но, да сфатат дека ако се дури и повеќе стакла, како таков, може да се поедностави вашиот поглед само малку со кликнување назад на вашиот еден уредник. Досега добро. Значи, во основа имаме кодот на по левата страна, атрибути на десната страна, и што и да е ние работиме овде во самиот центар. Па еве јас сум кликнал на главната сценариото. И сценариото, повторно, е начин на Xcode дека всушност можете да креирате корисник интерфејс со користење само drag and drop техники. И така за нашите многу прва примена на оваа е токму она што се случува да се направи. Ние ќе се спуштаме до многу далеку долниот десен дел на екранот, кој содржи различни корисници елементи кој можете да кликнете и влечете да креирате кориснички интерфејс. Сега сите овие елементи се нарекуваат пати бидејќи тие снабдување некој вид на гледање. Има еден поглед на слика, за пример, за да всушност покажуваат слика на кориснички интерфејс. Има еден табеларен преглед на всушност покажуваат маса. Така натаму и така натаму. Има широк спектар на ставови кои можете да изберете тука. Значи само за сега ние ќе за пребарување на етикета. Вие само може да се движите низ сите списоци тоа е таму. Но, има за пребарување лента на дното што го прави полесно да се идентификуваат одредени ставови што всушност сакате да се повлечете во вашиот кориснички интерфејс. Резултати од мојата етикета. Одам да го повлечете тука, директно на мојот примерок апликација. Право таму во средината изгледа добро. И јас одам да напишете "Здраво Светот!" Притиснете ентер. Сега имам етикета. Тоа не изгледа како тоа е центрирани сосема правилно. Па јас може да се обидете повторно да го центарот. За среќа тоа нуди овие водичи за да се направат нештата многу полесно. Одам да се обиде да го состави. Се надевам дека тоа, всушност, ќе работат тука. И ако тоа не се случи, во само еден миг тоа, всушност, ќе се појави на мојот iPad. Тоа е право тука. Ете го. ОК, значи тоа е тоа. Ние завршиш. Ние направивме нашите многу првата пријава. Сега очигледно тоа не се стори ништо. Тоа е само една етикета. Нема врска меѓу на корисничкиот интерфејс и кодот. Значи, ако ние всушност сакаа да се создаде врска со ова, ако ние всушност сакаа да имаат некој вид на комуникација помеѓу елементи кои постојат на екран и кодот кој ни овозможува да го контролирате овие елементи, тогаш ние, всушност, треба да погледнете го кодот себе. Значи ова е она што се нарекува ViewController.swift. И, особено за првите неколку програми, тоа се случува да биде еден вид на Најголемиот дел од кодот кој го enter-- ќе биде во овој документ овде. Има многу нешта тоа е во досега кај нас, нели? Има увоз адаптери комплет класа, надмини, [? фанк,?] сите овие различни нешта. И тоа не е сосема јасно што е тоа што значи сето ова. Значи, да преземе чекор назад далеку од Xcode за малку и се погледне на самиот јазик, брзо. Така е и со брзи, тоа беше во дизајн и развој во Apple за околу четири години моето разбирање. И има неколку карактеристики за тоа кои се навистина уредни. Прво на сите, тоа е компајлирана јазик, исто како и В. Значи прво мора да собере него, а потоа се пушта Пред да можете да всушност извршување на кодот кој резултира. Но, постои, за разлика Ц, интерактивен каже дека вие всушност може да работи и тип произволни команди во. И многу слично на вклучите Javascript-конзола, која може да биде запознаен со сега, тоа, всушност, ќе се оцени овие команди и да ви обезбеди излез. И тие дури и преземат дека на следното ниво и тие направивме нешто наречен игралишта во Xcode кои ви дозволуваат да визуелно работат со код. И ние, всушност, ќе видите некои примери за тоа во само малку. Тоа е врз основа В. С основата тоа, бидејќи сите компајлери создаде код од C и креира објектот код од него. Но, тоа навистина акции релативно малку синтакса. Тоа ќе изгледа прилично различни. Нема да има некои сличности. Но, таму се случува да биде неколку разлики во споредба со, да речеме, JavaScript или PHP. И ние ќе укаже на овие во само еден миг. Сега една од најголемите работи за брз што е убаво е дека, особено во споредба до C, тоа е со цел да се биде безбеден. Сè што во тоа е со цел да се биде многу силно отчукува во. Всушност тоа е речиси досадни во првиот, кога за прв пат почне да работи со брзи, колку колку наметнува видови насекаде. Нешто што е низа мора да остане стринг. Тоа е многу тешко да се најде на преобратен или тоа штетат во некоја друга форма. И повторно, ние ќе ви покаже примери за тоа. Но, на крајот сфати дека тоа е со цел да ве заштити, и од вас Мислам вашиот код, од паѓа во некои страшни пат кога имаш некој вид на несоодветен тип. И повторно, работи со него. Бидејќи тоа ќе биде фрустрирачки во прв како што се обидуваат да дознаам зошто токму ти си добивање на овој необичен грешки кои се занимаваат со видови. Но, тоа ќе биде достоен за тоа на крајот. Таа се занимава со автоматски управување со меморијата, па веќе не го правите треба да се занимаваат со работи Примерок како и бесплатни и сите на овие видови на нештата. И тоа е така дизајниран за generalities. Така, додека ние може да се користи за да се Xcode создаде iOS апликации и Mac апликации, ние, исто така, може само да го користите како јазик за скриптирање. И така можеме да го употребиме вид наместо на PHP или наместо на Пајтон за да всушност брзо да се интерпретира и процесот некои податоци што ги имаме на нашиот компјутер. Тој има широк спектар на современи карактеристики, опциите, променливост, генерика, куќишта, и многу од тоа на работи кои може или не може да се препознае. И тоа е само еден вид на несреќна дел од јазикот што некои од овие вид на футуристички, модерни елементи кои се содржани во рамките на елементи се толку длабоко вкоренет што, всушност, ќе мора да научат да CS50.5 малку. Ние мора да научат малку повеќе за некои карактеристики, со цел навистина да разбере што се случува натаму и така што ќе може да се погледне на кодот и не се чувствуваат целосно изгубени. И ќе видите што мислам од кои само една минута. Добро, така let's-- доволно на овој вид на теоретски нешта. Ајде да погледнеме кон нашите Уште првиот брза програма. Тоа е една линија код. Линија 14, токму тука, тоа вели печатење L n здраво CS50. Значи има неколку работи кои е многу различни за оваа споредба на нешта што може да биде се користи за да од C, на пример. Еден од нив е дека не постои intmain, нема да вклучува дел, има ништо од тоа дополнителни работи. На вклучуваат, како стандард I / O, како и библиотеки кои, всушност, се обезбеди стандардни карактеристики на јазикот, автоматски се вклучени како дел од стандардната библиотека е брзо и кои се увезуваат автоматски. Вие не треба да се направи дека увозот рачно. Intmain не постои, бидејќи главна влезна точка за код е, всушност, на почетокот на кодот. Така било код што треба почнувајќи од почетокот всушност, ќе биде извршена во почетокот. Значи, ова е навистина голема мера се поедноставува. Забележете исто така, дека нема запирка. Нема semicolons на овој јазик. Ќе се стави изјава на индивидуална линија а потоа на следната линија претставува друга изјава. Ако сакате да се стави mulitiple извештаи онлајн, тогаш мора да се подели го со semicolons. Но, во најголем дел, за добар стил, ние сме никогаш нема да види semicolons за целите на одвојување извештаи со нивно брзо. Па, како го прави ова всушност работат? Па многу како C ние всушност треба да се собере. И така можеме да го направите тоа со користење на брза в а потоа 1.swift. А потоа, по неколку минути ова ќе се собере а потоа можам да се кандидира една точка. И од тоа само ќе се каже "Здраво CS50." Прекрасно, па таму ќе одиме. Има нашиот прв Hello World програма. Ајде да се движат на број два. Сега во this-- тоа се смени малку, затоа што додека ти нормално do-- кои всушност и не треба да се состави брза апликација пред да всушност работат it-- еден од големите карактеристики што алудираше претходно беше дека брза, всушност, може да се користи во вид на псевдо-интерпретативни владата, е во фактот како преведувач. Но, она што ова ќе го направите е таму е, всушност, брза примена дека може да работи. Така на пример, ако само го пишувате брзо тука, она што ќе се случи е дека ќе добие брза. И можете да напишете ја вашата брза код, печати здраво, и да ја стартувате. И тоа, всушност, ќе print-- Па, тоа не се печати во овој случај бидејќи печатени да центрирани надвор, што не е видлива тука. Но, тоа е, всушност, може да функционира. И така, во овој случај, јас сум само случува да го користи ова како скрипта. И јас всушност може да се изврши овој код таму. Значи начинот на кој јас всушност работат тоа ќе биде малку поинаква, но ќе видиме дека во само еден миг. Сега, во овој случај е дека она што да направите е прво да се дефинира променлива. Значи ова е како ние го дефинираме променлива во брза, ние се користат нека клучни зборови, по што следи со името на променливата, а потоа ние обезбеди некои иницијализацијата на податоци по избор. Значи овој случај ние сме дефинирање постојана наречен име, и ние ќе го користи тоа во на излез од нашите печати линија на самото дно, здраво име. Сега забележите дека наместо користење на% s, можеме да капсулирало името на овој променлива во / () и да биде во можност да concatenate во содржината на овој стринг во овој стринг. Сега за разлика од C, стринг е Крај на вистински тип во брза. И така тоа седи рамо до рамо ints и заедно со удвојува многу лесно и природно споредба на некои од други јазици кои што сум го видел. Значи ова би всушност, функционираат исто како што би очекувале. Јас може да работи 2.swift. И можеме да видиме дека името ми е всушност, споени во "Здраво Дан". Добро, неверојатна. Премина на бројот три. Сега е малку на бела лага дека јас рече дека начинот на кој ние се изјасни променливи беше да се искористат нека клучен збор. Како и многу пати како што веројатно може да се направи сакате да го користите ајде, затоа што она што го прави е го дефинира константа. И кој му кажува дека може брзо оптимизирате брзината на вашата апликација затоа што знае дека променлива не е ќе се смени. Значи се оцени внимателно кога ќе одиш да се користи променлива за целите на менување. И, кога ќе одиш да создаде променлива само да се одржи некои податоци, а тоа е не, всушност, ќе се смени. Значи, овој концепт на непроменливост, тоа не е, всушност, ќе се смени, е важен, дури и далеку по што се дефинирање на променливи. Значи, тука сме дефинирано име, нека име, и во овој случај тоа е постојана, дека е од типот стринг, и тоа е еднакво на Дан. Така, додека во пред верзија, таа infers-- и со "неа" Мислам swift-- брзо infers на типот на податоци дека ние сме влегле во променлива. Во овој случај, можеме да бидеме експлицитни. Значи, да, тогаш името на овој променлива е име, а потоа на дебелото црево. И по две точки ние Определи го типот на податоци. Значи не е int име или Стринг име или нешто слично. Но, наместо да ги споделите етикета, ние сме дефинирање на тоа дали или не тоа е константна или променлива, проследено со името, по што следи од страна на тип евентуално. Значи во овој случај ние сме дефинирање ова име е стринг. Ние сме велејќи дека е Дан. И сега имам уште една променлива, во овој случај тоа се нарекува етикета. Но забележите дека тоа е со префикс на var клучен збор. На var клучен збор средства дека оваа променлива може да да се промени подоцна точка во време, некаде долу во кодот може да ние всушност тоа и го промени нема да ни даде некој посебен грешка. Ние можеме да правиме стандард concatenating оператор тука со симболот плус всушност да додадете на нашите името во овој стринг. И тогаш можеме да се печати како што видовме пред само еден миг. Сега да речеме дека сте сакате да се создаде променлива но вие не сакате да ја иницијализирам уште. Вие сè уште не сакаат да стави сите податоци во него. Па што треба да се каже брза она што тип на податоци ќе биде пред да може да всушност го дефинира правилно. Значи во овој случај, кога ние го дефинира променлива наречена одделение мораме да бидеме експлицитни за ваков тип, затоа што тоа не може да заклучиме само барате на иницијализира на податоци дека ќе им обезбеди на него. Тоа ќе ни даде грешка ако Само внеси var одделение, на пример, поради тоа што нема тип тоа. Значи градус = 100. Па дека 100 е цел број, тоа многу убаво се вклопува во тоа. Тоа ќе продолжи да функционира. Ние може да се види како тогаш ние може да concatenate ова. Сега може да се искушение, ако навистина сакаше да concatenate на одделение во друг текст стринг, во друга низа, која би само ја користат таа истата concatenating оператор. И тоа би требало да биде вистина. Но, брзи не ќе ви овозможи да имплицитно го смените типот на податоците. Значи во овој случај, тоа линија, 25, ќе пропадне затоа одделение е број и не стринг. И така постои несовпаѓање постави на типови. Значи мора да бидат експлицитни кога сакате да ги промените овие податоци, кога сакате да се присили ова податоци во еден поинаков вид и да каже, во ред, сакам да ја искористам ова одделение, кој е цел број, и да го претворите во низа. Па јас земам уште една главниот град на Стринг сите видови, ќе забележите, се капитализирани, Int, двокреветни, стрингови, па натаму и така натаму. Сите од нив се капитализирани само за да ги олесни работите. И ние ќе каже профитираат Стринг помине во тоа одделение. И тоа ќе се создаде низа од тој број. И тогаш можеме да concatenate две многу убаво. Сите прашања на овој материјал досега? Добро, ајде да ора до број четири. Сега ајде да зборуваме за некои понапредни структури, како низи и петелки. И за разлика од С, низи во брзата не се застапени совети. Покажувачи во брза, иако тие постојат, наречен како небезбедни или совети некој сличен тип како овој, тие не се изложени на нормално. Значи станува многу тешко за да манипулира меморија директно на вашиот компјутер. Така низите се само еден вид на податоци. И тие се референцирани со користење на овој вид од сега стандарден квадратни загради нотација дека не сум видел. Но, кога ќе се всушност сакаат да се дефинира видот на променлива како низа на некои конкретен тип, тогаш ќе стави тој тип во квадратни загради. Значи она што го велам овде е дека Јас сум создавање на променлива наречена оценки на тип int низа. И јас сум поставување што еднаква на некои иницијализира на податоци, кој во овој случај е 100, 0, 90, 85, која е само собирање на произволни оценки тука. Сега, во овој случај би можел, се сеќавам, отстранување на видот, и тоа ќе биде во можност да го заклучиме базирани на иницијализиран податоци. Но, ако јас се отстрани ова и Јас се потребни за да го постави подоцна, тогаш јас ќе мора да бидете сигурни дека дека имам видот таму. Добро, ајде да се движат заедно. Значи ние can-- низи ни ги доставувате на различни на методи преку кои точка нотација во вас се веројатно сега запознаени со. Значи grades.count, на пример, ни кажува токму број на елементите кои се содржани во оваа низа. Ако сакате да го додадете additional-- сега забележите дека ова е var и not-- ова е променлива и не е константа, што значи дека можам да ја смени содржината на оваа низа, можам да додадете објекти на него. Но, јас не само што може да се каже оценки а потоа во квадратни загради четири, бидејќи тоа ќе биде надвор од границите грешка во овој случај. Ако сакам да го променат големината на оваа низа, Морам да го користат методот точка припојување додадете нешто за да на самиот крај на тоа. Можам, сепак, промена индивидуалните индекси. Значи можам да ги искористам оценки а потоа квадратни загради нула да манипулира со оваа прва индекс и така натаму, како што нормално би се очекувало. И јас може да го стори истото, всушност, добиете податоци од тоа како добро. Сега таму е исто така еден вид на фенси метод да се направи ова, плус оценки еднаквите а потоа уште индекс, кој ќе append-- или не е друго index-- но уште еден список со кој ќе ги додаде таа листа на задниот дел оценки. И оценките ќе потоа содржи сето тоа. Но, тоа е вид на дополнителна работа дека јас сум само ви покажува за забава. Сега има за телефонска линија. И ова е почеток на тоа каде работите почнуваат да се промени малку. Информации како ова за телефонска линија е различен од на јамки во В. Сега јас ќе се забележи дека за петелки кај Свифт може да се направи да изгледа за петелки во C, но таму е многу повеќе корисни конструкции кои во суштина се елиминира потребата за да имаат за var i еднакво на 0 запирка јас е помалку од некои должина, така натаму и така натаму, нели? И оваа конструкција е само еден од нив. За индекс, индексот е ново променлива, во овој случај, во опсегот. И ова што го кажувам е дека постои опсег од 0 целиот пат до но не и вклучувајќи grades.count. Значи оваа точка точка помалку од знак претставува опсег на вредности, почнувајќи од нула сите на патот до grades.count минус 1. Постои посебна оператор што постои, што е точка точка точка, што би значи дека сакам опсег од нула да се смета оценки инклузивна. Но, во овој случај, бидејќи овие низи се нула индекс, ние се разбира не сакаат да одат на максималниот број на оценки. Јас може да се сумира оценките, како што може да Очекуваме, и излезни сите овие работи. Добро, се движат натаму. Сега ајде да зборуваме за функции. Со цел да се дефинира функција го користите фанк клучен збор. И повторно, во Свифт што треба да Бидете многу внимателни со видовите. Можете да ја обезбеди параметри со дефинирање, на пример, името на параметарот и потоа во Колин, видот на податоците кои се очекува дека параметар за да се прифати. Значи во овој случај имаме функција наречена печатење градус се брои. Таа прифаќа променлива наречена gradebook, или подобро кажано, параметар наречен gradebook. И ние очекуваме дека gradebook да се низа од цели броеви. Ако тоа gradebook е празна, ние ќе се печати една работа. Во спротивно, ние ќе се печати на бројот на оценките дека ова всушност има. Сега, ако сакаме да се вратат некои вредност, потоа начинот на дека ние менувате оваа дефиниција е всушност да ги користат стрелките на овој клучен збор, или да ја користите оваа стрелката симбол. Значи тука се случува да се дефинираат функција наречена просек. Ние ќе се прифати листа на броеви. И ние си оди за да се вратат двојно, која се надевам дека ќе биде просек од оваа низа. И со цел да го направат тоа, со цел за да всушност се пресмета овој просек, ние ќе ги сума, а ние ќе се на Се разбира сумира сите објекти во оваа низа. Забележете дека постои нов стил за јамка тука. Ние не треба да се експлицитни за процесирањето над секој елемент, но ние наместо да се каже за одделение и gradebook, значење дека за секој точка што ја имаме во ова, обезбеди таа ставка во ова променлива наречена одделение. И јас сакам да направам нешто со него. Па јас одам да се сумира сето ова податоци а всушност се вратат на двојна поделба. Сега забележите повторно тука, тука е концептот на поделба број кај Свифт. Ако сакате да се зголеми двојно поделба затоа што сакате децимали, тогаш ќе мора да бидат експлицитни, не само за една страна, бидејќи тоа не се случува да ви овозможи за да ја принудат податоци од двете страни на ова, што треба да се, всушност, се разбира двете страни во двојки, така што вие сте многу експлицитни за што си сигурен дека правиш двојна поделба. Ајде да се движат натаму. Значи, ако јас всушност сакаат да accept-- така што во овој конкретен пример, ова е уште една команда линија базирана апликација. И ние сме почнуваат да видите некои од ограничувањата на млади јазик во тоа што иако можеме да пристап до аргументите со користење на ова process.arguments, тоа е сепак не значи дека се најчистите нешто што некогаш сме виделе. Но, во основа јас ве охрабруваме да вид на се погледне на овој код и да се обиде да дознаам што точно се случува. Во суштина она што се случува е дека ние сме земајќи листа на аргументи и беа ги присили во цели броеви, а потоа ние сме случува да го користите дека како начин за печатење од просекот на сите наши оценки. Премина. Сега има уште еден тип на data-- друг тип на податоци, наместо низи наречен речници, кои се многу слични на хаш маси или хаш мапи и се слични, исто така, да се Асоцијативни низи PHP е. Значи тие имаат поим на клучеви и вредности. И тие се дефинирани и со овој плоштад заградата нотација, но разликата е во дека речници имаат во внатрешноста на плоштадот заграда, на дебелото црево. И на дебелото црево одвојува податоци тип кој е клучот и вредност. Значи во овој случај, јас ќе одам да се создаде речник да прифатат некој оценки. И тоа се случува да биде од типот стринг: int, што значи дека сите од копчињата се случува да бидат жици, и сите вредности на оние копчињата се случува да бидат цели броеви. Што ова значи дека можам тогаш повикување на конкретни податоци што сакам да користите овие клучеви а отколку со користење нумерички индекси како да сум ќе има за стандарден низа. Сега да видиме, има една важна работа дека јас исто така, сакаат да не зборуваме за овој одредена секвенца од код. А тоа е дека има друг тип на податоци, или подобро кажано, постои овој Идејата на податоци кои се содржани во рамките Свифт наречен опциите. И што значи тоа е опциите дека тоа го признава фактот дека понекогаш нема да добие податоците кои ги очекуваат. И така, она што мислам со тоа is-- ајде да погледнам во оваа низа на код кој iterates во текот на сите аргументи кои беа донесени на овој код и се обидува да ги конвертирате, обиди да се подели во различни жици, бидејќи ја прифаќа многу одреден тип на аргумент. И тогаш се случува да се обиде да ги принуди конците кои ги претставуваат броеви во цели броеви кои се оценките, дека јас тогаш може да се пресмета. Значи, во основа, ќе одам да го користите овој расцеп функција која постои во рамките на Свифт стандардната библиотека. Одам да се помине во него стринг што сакам да се подели. И тогаш во користење на овој вид на фанки синтакса, коишто Јас не знам дали ние ќе стигне до, но можеби, ние всушност, ќе утврдат точните карактер, што ние сакаме да се подели во. Па што значи тоа всушност изгледа? Ајде да ги разгледаме во всушност работи ова код. Така на пример, да речеме дека имам квиз и добив 50 за тоа. И имам еден PSETs и Добив сто на тоа. И јас got-- има уште еден квиз и добив 40 за тоа. Јас притиснете ентер, и на крајот она што ќе се случи е дека она што таа го прави е преземањето на овие параметри, разделување конците на овие две точки, признавајќи дека има два елементи во секоја од нив, и тоа е во суштина следење на секоја од нив. Значи имам во мојот речник квиз, чија вредност е претставена со број 50, Имам PSET кој има вредност од 100, и квиз еден кој има вредност од 40. Потоа подоцна во кодот јас всушност, во просек на сите оние вредности и листа на сите од клучевите на таа речник. Но, ова е важно така што ќе може да се забележи што се случува, е дека она што сакате да направите е да ја искористам оваа низа и тоа се подели на овој лик, што можеме да го направиме повторно со овој расцеп функција со користење на овој вид на Интересно синтакса која постои овде. Само за сега се претпостави дека тоа е во ред. Ние ќе се погледне повеќе во оваа во само малку време. Но сега постои еден интересен аспект дека ние, всушност, сакате да се обидете да ја претвори оваа стринг во цел број. Но, во други јазици она што може да се случи е дека веројатно ќе се обидат да го направите и двете се вратам некој вид на стража вредност како негативен или можеби нула или нешто слично. Или можеби само ќе предизвика грешки. И ние ќе треба да се потоа се фати дека грешка и потоа обидете се да се направи нешто врз основа на фактот дека оваа реализација цел број успеа. Тоа е каде што оваа идеја на опциите доаѓа во. Ти всушност може да се создаде еден вид на податоци кои е int прашалник, на пример. Тоа значи дека овој број е, всушност, се опционални. И што ќе се случи е дека тоа може содржат број, или можеби не. Таа може, всушност, да биде поинаков Идејата, целосно се нарекува nill. Во која тоа значи дека има нема никаква вредност за она што во ова. Тоа не е дури и нула, има само нема вредност. Нема апсолутно никаква вредност претставена. И тоа е она што оваа линија 71 се прави. Е дека тој е велејќи дека сум сакате да се обидете да го поставите на вредност, променлива наречена одделение, еднаква на конверзија на овој стринг во цел број. Па јас сум преземат овој стринг, оваа прва компоненти, или подобро кажано, втората компоненти, бидејќи ова е нула индексирани, на овој стринг што сум ги подели. И јас сакам да го конвертирате дека во цел број. Но, тоа не секогаш може да продолжи нормално, бидејќи се замисли што ќе се случи ако, наместо тип број, јас вид на се разбира како asdf. Тоа се случува да пропадне. Тоа не е, всушност, ќе биде во можност да го конвертирате дека на цел број како што би се очекувало. Така, наместо да започне некој вид на грешка, имаме идејата за задолжително. А тоа значи дека со користење на овој прашалник можам да кажам, Добро, можно е дека може да се земе тоа, претвора во цел број, и го стави во една променлива, кој исто така ќе биде цел број. Ако е така, тогаш тоа значи дека тоа е успешна и овој прв дел од блок може да продолжи. Во спротивно, тоа не успеа. Не постои вредност во grade-- или а не постои вредност во постојните, и јас всушност треба да се обиде да се справи со оваа грешка состојба. Ти си оди за да ја видите оваа прашалник за сето време кај Свифт и во примерот код за Свифт. И во фактот што nill оператор, овој вид на прашалник, на опциите дел, ќе биде веројатно еден од потешките работи да се вид на заврши вашата глава околу како што всушност се работи со него. Тоа може да има смисла сега. И всушност, кога бев пишување примерок кодот за ова, сигурно го разбрав она што се случува, но сепак ме фатени од страна на изненадување секој толку често кога ќе најде дека некои податоци, всушност, на нула верзија, изборен верзија на податоците што јас очекував. Па само да сфатат дека ако имаат изборен верзија што треба да се отпакува дека Податоците од ова поле. Така, тоа е вид на како I-- замислете ако имаме кутија и тоа содржи нешто. И она што треба да направите е да се постави прашањето, дали е можно дека на ова поле, всушност, содржи податоци што сум го барате? Ако е така, тогаш се повлече надвор и дека податоците стави го во оваа променлива постоечките. Ако не, тогаш јас само треба да непочитување на содржината на ова поле заедно затоа што тоа содржи буквално ништо. Било какви прашања за тоа? Добро, ајде да се движат подалеку од ова вид на командната линија базирана на работа и да почне да гледа во некои од технологија дека Xcode обезбедува со нас во форма на игралишта. Значи има многу способност тука со Свифт. И ако се отвори Xcode и ве праша што сакате да го направите, може да се отвори игралиштето и само се позанимавам со голем број на различни структури и аспекти на јазикот дури и пред да почне да се допира на iOS пакети или Mac пакети. Значи овој случај, ајде да речеме дека јас have-- Јас имам еден релативно измислена пример тука, но носат со мене како што вид на работа преку овој пример. Да речеме дека ние треба да се направи многу на експонати со фиксна вредност, како што знаеме, дека ние сме случува да треба да направи многу квадратни сили, на пример. Значи ние сме случува да се земе некои вредност x, ние ќе треба да се соочат, ние сме случува да се земе некои вредност y и ние ќе треба да се соочат. Така натаму и така натаму. Сега ние може да всушност само се создаде Моќта на 2 функцијата за ова, нели? Значи ние ќе се создаде енергија од 2 функција. Ние ќе го прифати двојно. Ќе output-- или ќе врати двоен тип. Ние ќе земеме овој резултат а потоа и за два пати она што ние всушност ги резултатите, кои беше иницијализиран на вредноста на една, и множете се од х. Значи, во суштина имаме x пати по овде. И така тогаш јас да потоа, како што ние би можеле да Очекуваме, ја искористам оваа, работи моќта на 2, да го обезбеди некои податоци, ми се допаѓа 2.0. И ние се да се види резултатите тука 4.0. Стартувај моќ од 2 на 3,2, а ние за да ја видите нашата резултат на тоа, 10,24. Досега добро, нели? Сега ние сме размислување, добро, во ред. Сега јас всушност треба да направи многу на овластувањата на 3. Затоа јас ќе копирање и поставување на сите на овој законик, промена на името на функцијата од Моќта на 2 до моќ од 3, и сè ќе биде ист со исклучок на оваа вредност тука, овој опсег, 1 ... 2. Така, наместо да се повторува овој циклус двапати, Сакам да го повтори овој циклус три пати. Па јас само промена на таа вредност од 1 до 3-- или подобро од 2 до 3. Значи, повторно, на истиот код, тоа е само промена. Сега, ова исто така работи. Моќта на 3 предвидени во некои вредност на 2. Ние се 8. Значи, 2 коцки. И 3.2 коцки е 32,768. И досега толку добро, нели? Но, се надевам дека ова е малку малку црвено знаме за вас во кои ние сега имаме некои дуплирање на кодот освен за некои многу мали се менуваат од една до друга. Па има ли некој начин дека ние би можеле да се поедностави овој проблем, каде што можеме, всушност, во рок време, дознаам некои, ни ги доставувате на некоја функција која има Токму моќта на тоа што сакаме. И таму е оваа идеја на затворачи, што е навистина, навистина важно во контекст на Свифт, и во многу други јазици, како и. Но, веројатно ќе видите што се користи повеќе, па во Свифт затоа што тоа се вградени во рамките на јазик отколку што ќе во други модерни јазици. Значи идејата за затворање е ова, е дека ние може да има функција која има за цел да биде генеричка функција, генерички моќ на функцијата. И оваа функција ќе се прифати овој експонент дека ние, всушност, сакате да се создаде. Така на пример, првиот На пример, сакавме со моќност од 2. Значи ние ќе обезбеди енергија на а потоа во заграда 2. И сега се забележи она што ова всушност се враќа. За ова е потребно внесување на еден буквар наречен y дека е цел број, и тој се враќа оваа луда гледа работа во parentheses-- загради двојно а потоа arrow двојно. Што ова значи дека јас сум случува да се врати во функција. Јас не сум се враќаат друг тип на податоци, јас сум всушност враќање на функцијата која има овој параметар, кој прифаќа двојно како влез и излези на двојно враќање вредност. И како резултат на тоа, бидејќи сега сум го нарекува моќ, поминува во некоја вредност за y, и јас сум со создавање на оваа другите function-- известување дека има друга функција која е креирана внатрешноста на this-- она ​​што го правам е јас тогаш може да се промени таа вредност, дека еден вредност што ја имав промени од 2 до 3, јас сега го прават тоа год. И ова постои. Значи, секој пат кога ќе се јавам на енергија на, во суштина она што се случува е тоа што јас се врати во функција. Забележете дека овде сум дефинирани нова променлива наречена плоштад. Сум го постави еднаква на моќта на, доколку оваа вредност 2 на моќта на. И она што оваа е вратен на функцијата. Значи квадратни, променливата квадратни, сега е од типот функција кој има this-- Упс, дојдете до малку bit-- која ја има оваа потпис, прифати двокреветни и излез двојно. Па сега она што го направив е јас сум во суштина создаде функција наречена квадратен дека прифаќа било каква вредност и ќе го плоштад. Ние може да се види она што се случува овде. Плоштад 3 на пример, значи ќе одам да се земе вредноста 3 и квадрат тоа. Па како точно функционира тоа? Кога ќе помине моќта на 2-- кога јас поминат 2 во оваа моќ на функција, оваа променлива y е населени со таа вредност 2. И тоа е вид на одржани во меморијата. Тоа е вид на како што се одржа во државни некаде во компјутер, ние навистина не се грижат како или каде што во овој момент. Но, да се вратам на оваа функција наречен exponentiate. И повторно, тоа не е навистина важно, она што оваа функција се нарекува, навистина можеме да го наречеме ништо, дека прифаќа двојно и се враќа двојно, но ја користи оваа вредност y во него. Па дури и ако тоа е на оваа функција, ова exponentiater функција која е биле вратени назад во мојот променлива која се јавив на плоштад, тоа е содржана во рамките на тоа овој поим за тоа што Y е. И тоа се сеќава на тоа. Значи, секој пат кога ќе се јавам дека функцијата што сега се нарекува плоштад, тоа го користи тоа. Но, тоа исто така значи дека можам се создаде уште една променлива користење различна моќ на. Значи можам да се создаде една коцка променлива, за На пример, за да се обезбеди дека моќта на 3. Сега коцка, всушност, ќе биде потребно извесно вредност и коцката што и да се врати. Значи, можеме да видиме дека можам да добијам односно вредноста 8 од тоа. Но, тоа не мора вредност y промени, бидејќи тие се се одржа во вид на независни променливи. Тие се вид на се одржа во независни простори во меморијата. Значи коцка секогаш ќе има x на моќта на 3. И квадратни секогаш ќе има x на моќта на 2, која значи дека секогаш ќе квадратни квадратни броеви, како што се очекува. И коцка секогаш ќе коцки броеви, како што се очекува. Ова исто така значи дека понекогаш може да се добие некој вид на фанки гледа синтакса каде што ќе имаат моќ на самиот дното на екранот тука, моќта на 5. И ти помине во резултатот. Ти се јавам таа функција, тоа е беа вратени со број 4. И така, она што во суштина ова е 4 до петтиот моќ, можеме да ги видиме резултатите таму. Со мене досега? Значи оваа идеја се нарекува затворање, затоа што она што ние сме во основа прави е ние сме концизирајќи некои податоци into-- вид за приближување на овие податоци во функција и ние сме да биде во можност да повторна употреба на оваа функција. Сега оваа синтакса иако всушност може да да се поедностави голема сума. И има многу можности кај Свифт за овој поедноставување. И тоа е она што вид на последователни оние всушност се погледне. Значи во 7б на пример, ние искористам оваа иста код. Но сега, наместо всушност се дефинира функција во внатрешноста на оваа власт на функционираат и го даде името, а потоа се врати името на таа функција, која потоа се користи како дел од ова затворање, наместо тоа, ние сме само ќе го поедностави. Ние не треба оваа функција да остане анонимен. Значи ова е концептот на анонимен функција, каде што може да потоа прифати како влез во загради тука, променлива x која е од видот двојно. Ние ќе се врати видот двојно. И тогаш клучни зборови, n, е На почетокот на оваа функција. Значи забележите дека сето ова е во рамките на брановидни загради и ние сме дефинирање на анонимен функција овде. Само еден поедноставен начин на дефинирање на иста работа. Во ред? Но се одржи на, Свифт, всушност, ни овозможува да се оди понатаму и да се поедностави уште повеќе, бидејќи навистина ние не се грижи дека овој параметар е именувана некоја посебна работа. Тоа навистина може да се нарече ништо и ние се уште може да се користи дека првиот параметар. Така, всушност, постои оваа специјална тип на податоци во анонимна функции, има оваа специјална името променливи во анонимна функции што почнуваат со знак за долар и претставуваат параметарот броеви, нула индексираат, за оваа функција. Значи има неколку работи се случува. Еве јас ќе одам да се вратат, а потоа кадрави голема заграда претставува функција, нели? Забележете дека јас не ги дефинираа параметар видови или тип на враќање. Тоа, всушност, може да се заклучи бидејќи на потписот на овој оригинален функција. Значи, можеме да го намалиме дека како можност. Но, јас, исто така, можат да го користат знакот за долар нула до Во овој дел од првиот параметар кој е донесен во овој анонимен функција. Па тоа поедноставување дури и повеќе. Во ред? Досега, толку добар? Сега тоа е тоа што го правите type-- се сеќавам ова знакот за долар нула што сме го виделе во оваа кадрава голема заграда што сме го виделе само малку пред во оваа Свифт шест пример? Тоа беше во право тука. Забележете дека е точно она што го барате, е тоа што ние го положиле во овој расцеп функција анонимен функција што проверки на првиот параметар да се види дали таа е еднаква на симболот дебелото црево. И тоа е точно она што е случува, е дека сите ние сме doing-- враќање клучниот збор се подразбира во оваа case-- ние сме враќање оваа вредност, каде што ние сме споредување првиот параметар против овој лик дебелото црево. И така тој вид на демистифицира ова. И си оди за да ја видите оваа конструкција многу во Свифт синтакса, затоа направете го задржи дека на ум кога сте Гледано во ова. Сега можеме да се симне шините малку и оди навистина фенси дека емисии дури и некои повеќе моќ Свифт е. Може дури и да видите некои на овие во примерокот кодови. Значи тоа е зошто јас одам да се покаже ова за вас. Во суштина она што можеме да направиме е дека, прво на сите, тоа беше вид на непотребно за мене да се спроведе сето тоа моќта на кодот затоа што ако ви увоз на Дарвин библиотека, тоа всушност вклучува функција наречен Pow која го прави ова за вас. Значи можеме да се поедностави уште повеќе и имаме моќност до функција сега само биде прекрасен една лагер каде што ние едноставно вратете го овој анонимен функција што прифаќа знакот за долар 0 како свое база и y како нејзин експонент. Но, ние може да се добие навистина, навистина фенси кога ние сфатат дека Свифт има многу моќ под хаубата. Многу оператори кои ние сме се занимаваат со тоа, плус знаци и симболи и поделба сите овие работи што ќе ти нормално работат со со податочни типови во програмскиот јазик, се всушност растеглива кај Свифт. Па што значи тоа во што ние можат да се дефинираат нашите оператори. Па сега јас сум уморен од пишување во сето ова Pow, а потоа и загради, а потоа на база. Не сакам да го направите тоа. Јас навистина сакаат да имаат оператор кој ми дозволува да го направите тоа. Значи, можам да кажам дека сакам Свифт да се создаде оператор, ѕвезда star-- од начинот на кој јас не може да ги користат каратно бидејќи карат е оператор кој прави нешто друго во целост. Па јас не сакате да го решите на судираат со тоа. И така она што го гледате во различни на јазици, вклучувајќи Пајтон, е како ѕвезда ѕвезда оператор да претставуваат експонати. Значи тоа е единствената причина зошто јас го направив тоа. И тоа се случува да биде оператор инфикс тип. И морам да се обезбеди за да го некои информации за предност на овој оператор, така што е лево асоцијативен. Тоа е како релативно висок приоритет споредба до сума или множење. Тоа е повисок приоритет од сите нив. Така натаму и така натаму. И тогаш се дефинираат функција која, всушност, диктира што го прави овој оператор. Значи под претпоставка дека имам левата страна и десната страна, кој ќе биде можеби подобро променлива име за ова. Левата страна и десната страна. Тогаш можам да ја искористам оваа моќ на левата страна на десната страна и да се врати на таа вредност. Па сега тоа е супер слатки. Сите ние треба да направите е ѕвезда 2 ѕвезди 3 и дека е 2 до третиот моќ, и ние се добие вредност од 8. 2 ѕвезда ѕвезда 10 е 2 на 10. моќ, ќе го добиеме 1.024. Па сега нашата моќ на функцијата, што повторно е различна, затоа што целата идеја зад ова е дека ние имаме една функција што секогаш ги зема некои вредност и умножува it-- или подобро кажано, зема експонент на истата моќ. Па сега тоа е уште поедноставно. Па сега тоа е само долар 0 потпише ѕвезда ѕвезда год. Ние дури и не мора да ја користи Pow повеќе. Добро, кој губи? Дали правиме во ред? Било какви прашања за овој материјал? Да? ПУБЛИКАТА: Кога you-- [нечујни] на фанк моќ на y двојно. Значи, кога сте се враќаат во функција. Даниел ARMENDARIZ: Фанк моќ на y двојно. Oh yeah, јас не знам што Y броеви се. Жал ми е за тоа. ПУБЛИКАТА: Зошто се враќаат функција [нечујни] комплет. Не е долар нула ѕвезда ѕвезда y [нечујни] најдете дека операторот со тоа враќање двојно [нечујни] двојно? Даниел ARMENDARIZ: Па ајде ми одговори на вашето прашање како што јас го разбирам и можете да ми кажете ако јас не разбирам вашето прашање. Значи оваа конструкција, кадрава голема заграда знак за долар нула ѕвезда ѕвезда y, е функција. И тоа го прифаќа параметар кој е претставен со оваа знакот за долар нула. Враќањето на клучни зборови е имплицирана во ова многу кратко, анонимен функција синтакса. Што значи дека во суштина што е ова велејќи е дека јас сум дефинирање на function-- а потоа јас ќе само го нарекуваат something-- каде што имаат некоја вредност год. Јас те има, што е двојно повеќе. И јас сум се врати двојно. И имам во враќањето y-- жал, Не требаше да го нарече овој y-- х. О драга, о драга, о драга. X-- nope-- ѕвезда ѕвезда год. Значи ова е само еден поедноставена верзија на ова. И така од причина што имам долар Пријавете се нула е дека со користење на овој комплет значи дека јас повеќе не мораат да напишеш Pow, или повеќе не се направи Јас треба да направите нешто како 3-ѕвезда ѕвезда 2. Јас само може да има еден функција наречена квадратен дека секогаш ќе се некои вредност како влез а всушност се вратат на плоштадот на тоа. Значи целата целта на затворањето е само вид на капсулирало фактот дека јас секогаш сакате да го користите секогаш кога Y Јас го нарекувам таа функција како сила при земањето на овој експонент. Значи враќаат тогаш, функција која прифаќа двојно, што е основа, и враќање резултат на тоа експонент е клучот овде. И тоа е голема разлика. Имаше само малку процветаат. Ова не е било поинаку во споредба со претходната примери, но тоа беше само малку процветаат може да се, всушност, создаде оператор во Свифт и всушност, се работи со него, кој е вид на кул работа. Никако не можев да одговорам на вашето прашање? Слатко. Нешто друго, пред да преминеме на? OK. Сега овој вид на моли на Прашањето е that-- и ред, Сега имаме можност за функции да бидат вратени. Ние, исто така, може да помине функционира како податоци или како параметри на други функции? И во фактот што можеме. Па да речеме дека имаме сите на истиот код. Имаме плоштадот променлива дека ќе се соочат овој код. И ние имаме коцка променлива кои ќе коцка некои податоци. И ние, всушност, сакаат да аплицираат на широк спектар на броеви. Значи она што ние би можеле да бидат доведени во искушение да се направи, се разбира, што е секако важи, е да iterate во текот на оваа листа на броеви и да ги применуваат мојот функции квадратни и коцка и да добијат две нови листи како резултати кои се овој оригинален листа на квадрат и на коцки, соодветно. Сосема прифатливи. Но она што е она што гледаме овде е што ги имаме, повторно, дуплирање на нашиот код. И таму е можеби една можност за нас да се поедностави оваа малку. Што ако имало начин за нас да всушност секогаш iterate во текот на некои листа и само да се пренесат и на овој магичен функционира променлива која претставува атом на функција дека ние сакаме да се применуваат до секоја точка во оваа листа. Ова доведува до концептот на она што се нарекуваат повисок ред функции. И тоа е во суштина она што овој е, е дека ние може да се создаде во функција. И во овој случај тоа се нарекува Mapper, само да го даде името, само мапирање над секој ставка во листата. Каде јас земам уште една листа и јас земам уште една функција. И таа функција, се разбира, има одредени потпис. Таа прифаќа како параметар двојно и тоа ќе излез е двојно. И целата резултат на оваа функција се случува да биде нова листа која е од типот двојно. Во ред? И она што јас ќе одам да направите е да ја применуваат оваа функција f за секој елемент во мојата листа. И reply-- и наместо да се врати оваа нова листа, како резултат на тоа, што е навистина кул. Сега може да помине низ функции. И оваа идеја од повисок ред функции е навистина важно. И ова Mapper е навистина само имплементација на лош на функцијата на која е изградена во Свифт повика на сајтот. И тоа го прави токму тоа, можеби дури и малку подобро. Ова е само еден вид на генерички, поедноставена верзија дека ни овозможува да ја видите концепт кој е применлив и тука. Сега гледам на начинот на кој јас всушност, може да се примени мојот плоштад и мојот коцка функции на оваа листа на броеви. Трчам мојот Mapper. Јас им обезбеди на тоа мојата листа на броеви. Се обезбеди да го прават тоа на функција што се случува да се примени за секој од тие индекси. И тоа се случува да биде производство, како резултат. И јас ќе добиете за да се види дека јас сум квадрат и на коцки мои броеви, како резултат. И, се разбира Mapper ќе се било вид на анонимен функција. Ние дури и може да се види дека сум создадена нова функција која анонимни само зема некои параметар и го дели со 2. И ние може да се види дека јас сум, всушност, поделени мојата листа за 2, наместо. Кул? Досега, толку добар? Добро, сега ајде се врати на оваа идеја. Ајде да се спроведе оваа назад во контекст на gradebook. И ако го направам тоа, можеме да видиме дека можам примена на широк спектар на овие options-- или широк спектар на овие повисок ред функции за да всушност се поедностави мојата способност да се направи различни нешта на листата на броеви. Така на пример, ако јас земе листа на броеви, еден од повисок ред функции што постои се нарекува намали. Што се намали, а не од мапата, се намалува волја се земе два елементи во листата, ќе биде потребно извесно функција која споредува два елементи листата, и тоа, тогаш ќе вид на output-- на излез на таа функција ќе биде уште еден елемент кој тогаш се споредуваат со другите. Значи, можете да го користите ова за да всушност Збирот на броевите во вашата листа. На пример, ако сте имале листа на 1, 2, 3, 4, 5, ќе ги преземе во првите елементи, 1 и 2. Може да се применува за да го прави тоа функција која ги зема овие два елементи и плука по една од тие елементи, кој ќе биде вредноста 3. Тогаш ние се земе дека вредноста 3 со следниот елемент од листата, сумира овие две, а потоа продолжи да оди надолу во листата. Ние сме намалување на листа за да една вредност. И тоа само така се случува, дека симболот плус е оператор, исто како што го видоа. Овој оператор е всушност, функција што има токму оваа листа, која ние би сакал, а овие својства дека ние би сакале. Затоа, јас ве охрабруваме да ги да ги разгледаме во тоа. Сакам да се најде на потег на од некои на овој код така што ние, всушност, може да се погледне во некои вистински, реални, вистински Свифт во Xcode, во iOS развој. Но да ги разгледаме во ова и види дали може да анализирам преку она што се случува со некои од овие повисок ред функции, вклучувајќи филтер, намали, и ќе и види некаде тука на сајтот, како и. Тоа е право тука. Каде ќе се низа на оценки и тоа, всушност, ќе планирам да ги користите прекинувачот конструкција, која може да се препознае од C, но всушност тоа е многу повеќе помоќни од прекинувачот конструкција што ја имаме во В. И ние ќе го применат тоа да секој елемент во листата а всушност се обезбеди писмото одделение на секој на оние оценки користење на сите овие концепти дека ние сме само разговаравме за пред. Сега ајде да го обиколи за само минута и се зборува за structs. И така structs се чека во C дека ние беа во можност да се дефинира нов тип на податоци. Structs постои во рамките Свифт. И така направи многу други конструкции наречен enums и класи, кои навистина искористам оваа идеја до целата различно ниво. И во основа тоа е само начин на дефинирање на нов тип на податоци. Значи, ако сте get-- ако дојде низ цела класа или structs или enums, Не се збунети од тоа. Тоа е само начинот на дефинирање на некои нови одреден тип на податоци. И ова е навистина важно кога ние зборуваме за iOS стан развој бидејќи сето она што постои во рамките на IOS стан е суштински објект на некој вид. И на објектот е во основа на класа или enum или негова struct. Значи во овој случај јас сум дефинирање на нов тип на податоци дека јас сум повикувајќи проценка Тоа е некои својства, вклучувајќи ги име и низа на оценки. Значи еден вид на оценување кои би можел да се има во предвид ќе биде квизови, на пример. Јас би сакал да има проценка, која беше квиз и дека имаше различни оценки поврзани со тоа, за еден квиз, квиз два, па натаму и така натаму. Или би можел да има различен тип на оценката за проблемот комплети. И можам да се прават работите. Јас всушност може да има функции во рамките на овој тип на податоци, која сега се нарекува методи. Значи, ако некогаш ќе го видите Зборот метод, тоа навистина е само функција која се однесува на многу специфична класа, или да се многу специфичен тип на податоци. Таа ни овозможува да се сменат податоците во неа. Значи со други зборови, ако сакам да додадете градус се во мојата проценка, тогаш сите што треба да направите е да се се додаде на резултатот, кој беше влезен на оваа функција да моето внатрешно сопственост. Има уште една уредни изградба тука кај Свифт, која е оваа точка точка точка оператор, што значи дека голем број може сега се прифати било кој број на цели броеви. И поени ќе биде низа од цели броеви кои биле префрлени во мојата функција, која значи дека можам да направам нешто како ова. Јас може да се додаде оценки и само се обезбеди произволен број на цели броеви во неа а всушност се предвидени низа на тие вредности во мојата функција или во мојот метод, како што е случај. Сега ова е важно затоа се што е во Xcode, сè во iOS, е всушност еден објект. Значи задржи дека во умот кога ќе биста отворен Xcode и прескокнете надвор iOS верзии два и три а всушност одат за да верзија четири. И повторно, сето ова ќе се биде објавена на семинарот страница. iOS четири е вид на целосно разнесени имплементација на многу основни стан. И она што овој стан не е тоа вчитува адаптери, кој изгледа вака. Повторно, ако кликнете на сценариото можеме да види дека ова е она што изгледа како. Ова е графичката околина. Таа има насловот на самиот врв. Сум го нарекува веб галеријата. Во средината има еден елемент наречен поглед адаптери сликата. И на дното има лентата со алатки со едно копче што има еластичен простори кои го дозволи тоа да центар во средината на оваа лента со алатки. И што се случува е дека кога ова товари презема JSON датотека тоа е кои се наоѓаат на серверот на друго место, парсира дека JSON датотека, и JSON датотека изгледа малку како ова. На JSON датотеката изгледа вака. Ете го. Таа има име на албум и тоа има низа на фотографии. Секоја од овие слики има име и, исто така, URL-то самите себе си, претставуваат JPEG верзија на таа индивидуа слика. Значи она што се случи е дека кога оваа програма товари, тоа преземања на JSON датотека, парсира тоа, ги става сето ова во еквивалент на низа во iOS стан развој, што е nsarray. И тогаш јас тогаш може да се бутира овие податоци во некоја апликација и ставете ја на мојот екран. Постои слика што бил натоварен со копчето на дното. Ако јас кликнете на Get Следна, тогаш повлекува дека сликата од интернет и го заменува со таа слика во поглед адаптери сликата. Така можете да го симнете овој, а всушност погледнете го на вашиот компјутер. И тоа, всушност, се изгради и состави тоа на вашиот уред. Но, во суштина е процес тоа, се создаде storyboard-- или подобро кажано, не create-- но изберете сценариото. И всушност we'll-- ако не mind-- ние ќе се земе само неколку секунди всушност да ви покаже како тоа е направено. Само така што колку што можеме, всушност, постигне ова е направен малку повеќе очигледна. Еден поглед апликација, јас сум ќе се јавите на овој семинар четири претставува ова одреден број. Зачувај го на работната површина. Добро, ќе кликнете на сценариото. И она што јас ќе одам да направите е да се најде мојата слика поглед, повлечете ја кон моето корисничко интерфејс и центар за неа. Сега само тоа центрирање за жал не се случува да се направи многу, со исклучок на екранот што е ова точната големина. Значи можеме да се убедиме себе си од тоа од страна на кликнување на ова двојно круг работа, Спуштање овој pop up менито тука и менување да ја прегледате, каде што ќе всушност добие шанса да ги видиш како ова, всушност, ќе се погледне на други уреди. Како што можеме да видиме, ние дури и не да ја видите на овој конкретен случај. Па јас одам да го затвори ова за сега. И јас одам да го изберете Оваа икона одредување на самиот долниот дел од екранот. Таа вели дека се Разреши Авто Распоред прашања. За жал, тоа е отсечен на дното. Но, ако јас кликнете на неа, она што можам се добие овој pop up-- да исчезне. Она што го добиваме е овој pop-up дека ми дозволува да додадете исчезнати ограничувања. И со тоа што тогаш ќе вид на го заклучите во центарот дел од екран како што би очекувале. Сега, со цел да го добивате ова копче на Згора на тоа, јас треба да одам до уредникот. Оди да го вградите и кликнете Навигација контролор. Она што ќе го направите е тоа што ќе додадете Целата оваа друга компонента на него, но тоа всушност ќе се поврзе назад во мојата оригинална адаптери. И детали, повторно, ние не навистина треба да се грижи за сега. Но, јас не сакаат да имаат лентата со алатки на дното. Затоа јас ќе се провери Покажува Toolbar-от. И тоа обезбедува во рамките на мојот поглед, кој сега е на некое друго место, може да се види тоа е поврзано овде. Тоа сега обезбедува алатникот на дното од моите адаптери. Па сега, наместо да ја избираат слика поглед, може да се најде етикета, или поточно toolbar-- ајде да видиме, каде што е тоа? Што е тоа вика? А button-- точка bar-- item-- sorry-- бар копчето точка. Паднала дека постојат и се применуваат неколку на флексибилни простори на двете страни всушност да центрирате тоа. Па сега сум создадена ми адаптери, во основа. И можам да го даде името од страна на двоен клик на самиот врв тука и велејќи веб галерија и така натаму. Сега повторно, овие се елементи кои постојат сами по себе. И морам да се поврзете да ми код кој Што можам да направам со повторно доведување до овој двоен круг икона, менува од прегледот. Која, патем, сега можеме да видиме е убаво центрирани и ќе изгледа добро на различни уреди. Префрли се автоматски, кој ќе донесе до ViewController код. И сега овој дел е важен. За да можете да се поврзете овие два елементи, кодот на графичката околина, изберете ставка која сакате да се поврзете. Значи во овој случај, всушност сакаат да се кодираат промена на сликата, кој е содржан во рамките на овој адаптери слика поглед. Значи, ако кликнете контролира од на прегледот на сликата и повлечете, ќе забележите дека ви се добие малку бар, кога ќе се прости од сето ова поп up ќе се случи. Таа вели дека ние ќе се создаде поврзување. И од тука сакам да го даде име, нешто како галерија. Притиснете ентер. И ова всушност обезбедува променлива наречена галерија дека јас тогаш може да повикување во мојот код да ја смените сликата, на пример. Па како не тој код всушност барате? Па, повторно, јас не сакам да поминуваат премногу време за тоа. И јас ве охрабруваме да ги да го преземете и да ги разгледаме. Но, еден од најпознатите важен аспект е кодот кои, всушност достигнува сликата. Значи во овој случај сакам да се добие во рок од моите слики низа, кој е содржан во мојата класа. Сакам да дефинирате името и URL-то и тоа е се разложени од оваа JSON. Всушност побара уредот за да се добие URL-то, да достигне цена од URL-то од ова, а потоа однесам на податоците од содржината на таа адреса. Потоа го конвертирате дека податоците во една слика со минување во адаптери сликата. Значи, повторно, тие се сите различни видови на предмети, различни видови на класи. И тогаш јас тогаш може да се постави мојот gallery.image еднаква на податоците. И тоа е вид на месо за тоа што всушност е тогаш можност за промена на податоците from-- промени сликата од една до друга. Значи, повторно, се надевам сега многу на конструкции ќе се направи малку повеќе смисла. Забележете дека има некои фантастичен поени тука. На фантастичен поени се суштински поврзани со опциите. Она што јас во основа велејќи дека е дека дури и без проверка да се види дали има податоци во рамките на оваа опција, Одам да се оди напред и да се претпостави дека постои и се одвитка тоа. Запомнете дека ние се користи аналогијата на вид на пакет за опциите и ние треба да се одвитка пакет и се повлече на податоци надвор. На извичник сили кои, всушност, се случи. Но, знам дека ова е безбедно, бидејќи јас проверив да се види дали сликата податоци е еднаква до нула, јас сум всушност се провери да се види дали таа опција беше, всушност, не успеа. Ако е тоа, навистина, не веќе. И така јас сум сигурен дека некогаш стигнам до оваа точка јас безбедно може да се одвитка податоците. Вие исто така може да ги види во форма на прашалник. Значи, ако ние дојдете до местото каде што треба да всушност се интерпретира на податоци. Затоа не треба да се стави надвор од овие вид на долги имиња. Може да се најдат на Apple инвеститорот сајт многу на референци на сите објекти и сите процеси кои, всушност, направи ова е можно. Но забележите дека ова е суштински функција, каде што треба да го давате некои податоци. И јас се вратам некој вид на податоци. И јас треба да го користи ова како клучни зборови за да да го претворите во овој nsdictionary? Кој е повторно, опционални nsdictionary. Кои Јас тогаш треба да провери да се види дали таа постои. Па јас да го користите дека ако нека успешно еднаква на парсира, тогаш знам дека опција всушност содржи некои податоци. Или она што го направив тука беше да само да се претпостави дека ако има Немаше грешки што тоа е всушност безбедно. Добро, сакам да се заблагодарам сите многу што доаѓаат. Знам дека ова беше многу, но тоа беше само еден час да се зборува за некои прилично напредни работи. И така се надевам дека ќе се добие можност да ја преземете сите го кодот и да преземат подобар, повеќе темелно погледне во него. Вид на се убедат на сите од работите што се случува. И јас сакам да ви се заблагодарам сите, повторно, за кои доаѓаат. И со среќа со вашата конечна проекти. Имаат голем ден.