>> [Мусиц плаиинг]
>> Дан АМРМЕНДАРИЗ: Свако, велцоме то тхе ЦС50 семинара,
иОС апликација развој са Свифт.
Ја сам Дан Армендариз, а ја сам прецептор рачунарских наука овде на Харварду.
>> И наредних сат времена ће бити вихор обилазак онолико ствари
о овој теми као што може да стане.
Ја ћу писати све изворног кода да ћете видети данас на мрежи.
Можда нећемо бити у стању да заправо ићи преко свега
да сам да сам приказује се у овом часу.
Али бар надам се кроз Коментари изворног кода,
моћи ћете да покуша да схвати шта управо се дешава за оне ствари
да не разумем да.
>> Свему, структура Данашњи разговор ће бити као што следи.
Почећемо од неких основних ради синтакса са Свифт језику,
иде у неки од напреднијих Синтакса Свифт језика.
Због језика је заиста модеран и то
има много високог нивоа особине, ствари које нисмо
види у Ц током ЦС50, или Чак и неки други језици
да смо почели користите у ЦС50 као ПХП
па ћу морати да покуша да увести и неке теме које
се односе на језицима вишег нивоа да можда нећете видети у дубину у ЦС50,
али видећете касније Цомпутер Сциенце класе.
Тако да ће бити добро упакована сат.
И будите слободни да ме пусти ако имате било каквих питања.
Дакле, ако сте заинтересовани радећи развој
са Свифт, или стварно свака иОС апликација развој,
постоји неколико услова.
Пре свега, морате да користите Мац, трчање у примерима
да ћемо користити данас, релативно нова верзија ОС
Кс. У том случају, ја водим Кс 10.5.
Можете се ради 10.11 ако желите.
Али све што ћеш види се укључује Ксцоде 7 и касније,
која има најновију верзију СВИФТ-а, што је Свифт 2.0.
Ово је заправо прилично важна разлика.
Много синтаксе има променио доста битно
у неким случајевима из Свифт 1.0, који је објављен прошле године,
да Свифт 2.0, која Управо је изашао ове јесени.
Тако ћемо показати Свифт 2.0.
Много ствари које тражите на мрежи
када покушавате да се додатно информације о разним стварима,
можда ћете желети да експлицитно сеарцх фор Свифт 2
него само обичан стари Свифт да сигурни да сте добили синтаксу исправно.
>> У ствари, ово је генерално важи.
Постоји брз количина развоја дешавало у Свифт језику
Од тада Аппле је објавио, мислим оно, што је мало више од годину дана
Сада.
А ствари су се промениле драматично у то време.
И тако не буде фрустриран ако, када гледате около
за теме о Свифт или како да оствари Нешто користећи неке примере кода
или нешто што се то не догоди заправо раде на Свифт 2.0.
Уверите се да сте у потрази специјално за ту верзију
покушати да минимизира ефекте другачије верзије и оне врсте ствари.
>> Покушаћу да истакнем само неке ствари који су другачији од старијих верзија.
Али, то је нешто што се пази.
То је вероватно ће бити један од највећих главобоља
да ћете имати са СВИФТ је проналажење примјер код који је старији, чак и само
од неколико месеци, покушава да користи је у вашој више модерном пројекту.
И то једноставно не ради.
Добићеш компајлер грешке, синтакса грешке, све врсте луде ствари.
Дакле, само будите стрпљиви са да, и надамо се да ће
имају прилично лепо искуство са Свифт генералном пласману.
>> Сада можете јоин-- и надам ми заправо још увек имају ову овај Иеар--
ЦС 50 је Аппле Апп развојни тим, који
ће вам омогућити да инсталирате све апликације који сте креирали на својим иОС уређајима.
Дакле, погледајте овај УРЛ ако сте заинтересовани за то.
>> Дакле, само неколико ствари о себи Свифт.
То је саставио језика.
Али видећете да су неки од карактеристика које користимо
оставите га да се може користити иу мало Лике Ан тумачити тако као добро.
>> Много синтаксе је позајмљен од Ц. То је заснована и написано у Ц.
И тако ћемо видети да има доста Такеаваис
из свог постојећег знања из Ц да можемо порта да Свифт.
>> Али постоје ствари које чине га разликује од Ц.
То је веома снажно откуца.
Постоји аутоматска управљање меморијом.
Нећеш морати користити маллоц или слободно било где.
То је дизајниран за општости.
Другим речима, можете га користити у све врсте контекста, из Аппле Ватцх
за иПхоне скроз до ОС Кс, и чак и неки сервери, чак и неке скрипт.
Али видећемо да је Подршка за скриптовање
није баш тамо још као то је у другим језицима.
Дакле, највероватније ћете бити користећи ово искључиво за развој
на вашем Мац или ваш иПхоне.
>> И има много савремених функција.
И много од ових ствари су ствари које ћемо покушати да се обрати данас,
али и наше теме које искрено, можемо посветити целе курсеве.
У ствари, ЦС 51, што је понудио следећи семестар,
фокусира много о овим темама који су описани у даљем тексту.
Тако можете провести цео семестар се разумевање ове ствари.
Али ми ћемо покушати да се кроз њих
бар довољно да вас може да разуме шта је
дешава када погледате на програму Свифт
и бити у стању да хацк свој пут кроз њега за завршни пројекат.
>> Сада је један од најбољих начина да можете добити додатне информације о томе
је искрено само кроз Аппле-ов под условом документацију за Свифт.
Има доста АПИ да су доступни.
И то је добра база за вас да траже, специфичне ствари које сте
желите да урадите са АПИ укључује иОС.
Ако желите да користите фотоапарат пример, можете да почнете да у потрази овде,
а такође користе Гоогле и Стацк Поплаве као и обично.
>> Има ли питања о овоме пре него што смо у праву скок у?
U redu.
Idemo dalje.
>> Дакле, прво, имам број фајлова пример.
И ја ћу покушати да појача кроз њих релативно брзо.
Ово је Здраво свете фајл за Свифт.
То је врло једноставно.
Постоји много више коментара него постоје стварни број.
Обратите пажњу на стварни број је у на дну он лине 14.
Каже принт.
А онда је позив функције.
Пролазимо у њу а гудачки зове Хелло ЦС50.
Обратите пажњу да нема зарезом.
Обратите пажњу да нема маин.
Има ниједан од цруфт да смо имали са Ц.
Када користимо Свифт на овај начин, који је управо пише у текстуалну датотеку
и чувају на мом компјутеру, затим Могу да компајлирати и покренути га.
>> Обратите пажњу да овде сам не користите ЦС50 ИДЕ.
То претпоставља да сам ја ради и да сам на ОС Кс,
и да сам Ксцоде већ инсталирана на овој машини како би за то
да функционишу.
Али ово је само нормална текстуални фајл да онда можемо саставити и измена.
Дакле, хајде да видимо како се то заправо ради.
Шта ако желим да га саставе?
свифтц 1.свифт.
После тренутак или два, то Видећете да сада имамо
саставио овај у датотеку са називом 1.
И сада смо штампани нашу ЦС50, наша Здраво свете апликација прилично.
>> Обратите пажњу на још једну ствар као добро је да по дефаулту,
нисмо имали да улаз А / Н да одштампате нову линију.
По дефаулту, штампани функције у Свифт ће одштампати нову линију за вас.
Можете проћи опциони додатни параметар да исприча да то не учини.
Али Гоогле за више информација о томе.
По дефаулту, то ће учинити линију за штампање.
>> У реду, идемо даље затим неких других ствари.
Дакле, како можемо заправо дефинишемо променљиве?
Можемо да урадимо то је помоћу један од два начина.
И онај који желим да ти кажем о Први је ова дефиниција лет.
И ово је важно јер ефикасно
оно што ми радимо је дефинисање константу.
Ми ћемо да створимо променљиву, односно константно зове име,
пружају на то неки дата-- у овај случај, стринг Ден.
Али, користећи ову Лет кључна реч, ми говоримо
да је ово вариабле-- или поново позвао цонстант--
Име никада неће бити промењен.
То ће бити непроменљив током трајање овог програма
или током трајање контекста
да је променљива је доступан.
>> Ово је веома важно да када имате неке податке које није
ће се променити у програму, и видећете мноштво примера
о томе када желимо да користимо нека односу на друге синтаксе,
важно је да користите пустити где год је могуће, јер овом обавештава
језик који је неће бити промењена,
и то је заправо може обављати доста оптимизација
за побољшање брзине и безбедност вашег програма.
И сигурношћу, мислим не дај то судар са лудим грешкама
да можемо бити навикли да видимо у Ц.
>> Онда можемо користити стринг интерполација да обухвати ово у низу.
Тако можемо видети у ово штампање линија, принт Хелло,
а затим помоћу бацксласх отворене паренс, и онда име моје променљиве,
у овом случају константа, затворити заграде.
Ја сам у суштини онда стављањем Садржај ове променљиве се зове именом
унутар низа и онда штампање резултат тамо.
>> Постоји још једна промена у овом фајлу а то је да сам, на самом врху,
ставити у ствар линије, што у основи само прецизира
да желите да користите Свифт преводилац, који
значи да више не морам да саставити овај посебан програм.
Могу само да га покренете као сопственом сценарију.
Али то је, у овом случају, иза сцене које се саставља, а затим
што бежи.
То је само невидљива за нас.
>> У реду, идемо даље.
Тако да је мало превара да се десило раније.
Показао сам вам да сам може да дефинише константу.
И може да обезбеди неке податке да се то уради.
Али у овом случају, приметићете да нисам заправо одредити врсту података
da je.
А то је зато што је преводилац, Свифт могу
закључити врсту података само на основу на подацима које сам ставио у њу.
Зато што зна да је ово вредновање променљива овде, ово право податке
овде, зна да је стринг.
И тако то стално име је стога Биће стринг као добро.
>> Али исто тако може бити експлицитан о врсти која је
ми ћемо користити за константе или променљиве
коришћењем овог синтаксу инстеад-- нека Име дебелог стринг једнако
Дан што у овом случају значи да смо ће дефинисати константан под називом име.
То ће бити типа Стринг.
А вредност ће бити Ден.
Сада други начин да можемо створити вариаблес--
а то су променљиве варијабле, која значи да смо, у ствари, иде
да понекад мењају садржај у трајању контекста
да је променљива дефинед-- смо користити вар кључну реч уместо пустити.
Али опет, по дефаулту, осим ако знате да је потребно да манипулишу тим подацима,
покушајте да користите пустити за побољшања перформанси.
>> У овом случају, онда сам могу одредити врсту података
да очекујемо да ћемо бити унутар Ова нова променљива зове ознака.
То ће бити стринг.
И ми ћемо онда спојите две жице заједно, стринг здраво,
а стринг представља од стране променљива, односно константа име.
>> Дакле, ово је лепо, јер ово је донекле ПХП као у које смо
имају веома лако стринг конкатенацију.
Ми не морамо да се аутоматски користити било какву управљање меморијом
да се повећа величину и раде свака врста смешних ствари тамо.
Ово функционише као што би заправо очекивали.
>> Добро, има ли питања о овоме?
>> Сада други разлог који морамо имате могућност
бити у стању да дефинишу шта Тип варијабли података су
је зато што понекад не Желим да се покрене варијабле
са неким подацима на тачка дефиниције.
Дакле, у овом случају, рецимо да желим да почнете унос
неки разреди у једну књигу. разред
Па, знам да је један од варијабле које желим да будем
ће бити променљиво разред.
И ми такође знамо да Желим да то буде цео број.
Али можда нећемо још има да разред на располагању.
>> У Свифт, морате да дефинишу врсту података
која је повезана са променљива или нека константа
пре него што заправо можете користите ту променљиву.
Зато што је снажно откуца, морате да повежете тип
са ових варијабли.
>> Дакле, у овом случају, ако нисам правилно инитиализед први са неком вредношћу,
онда морам да кажем шта Свифт Очекујем тип података да буде.
И то ће остати тај исти тип података
кроз историју овог програма.
>> Сада можете бити у искушењу чим Ја сам створио ову граде променљиву
и под условом да се број од 100, сада ако И
желе да пробају да спојите стринг са тим цео број,
може бити у искушењу да још увек користи да оператер низ спајање
као да смо само неколико редова раније.
Ali na nesreću, ово ће заиста не
раде, јер сте у суштини перформинг
операцију на два различита типа.
>> Ово је веома разликује од других језици као ПХП који су заиста
Лоосеи Гоосеи са својим врстом типова.
Они се само воле, да, како год, није ме брига.
Само ми дај једну врсту, и можда ћу урадити праву ствар.
>> У том случају, Свифт је изузетно строги о врсти
да се баве.
Ова сума оператер или спајање оператер
има у сутини неколико различите могућих опција.
То можете учинити сумирање са целих, или вас
може да уради стринг Спајање и можда неке друге ствари као добро.
Али, ако то оператер не признаје шта је са обе стране зида,
односно комбинације оних који две врсте, није оно што је очекује,
онда ће то изазвати квар.
>> Дакле, у овом случају, шта то значи да има низ плус цео број?
Дакле у контексту ово, вероватно желе
да уради низ надовезивања операцију.
Али наравно рачунар нема ту врсту контекста.
И тако треба да обезбеде да додатне информације
пустити да знам шта је је да желимо да урадимо.
>> Дакле, другим речима, чињеница да Свифт је снажно откуца
значи да морате да урадите мало додатног рада
да се управљати начин на који бисте желели.
Али као резултат, то је сигурније.
А када имате узети у обзир оне врсте,
ствари једноставно искрено старт да ради прилично добро.
>> Дакле, у овом случају, онда би обавља стринг конкатенацију
експлицитно цастинг целобројна у стринг
што ћете га уметнути у томе капитал с стринг функција,
а затим помоћу стринг конкатенацију оператер да измени нашу етикету променљиву,
а затим га одштампати.
>> Zasada je dobro?
У реду, идемо даље.
>> Сада постоје разне података Врсте које можемо да користимо у Свифт.
Као што сте навикли да, можемо створити Променљиви низ.
И то само низ могу садрже једну тип.
>> Дакле, у овом случају, ми ћемо да створимо а променљиво низови природних бројева, који
ми ћемо позвати оцене, и ми ћемо бити у стању да сачувате да у овом квадратном носач
формата као што сте навикли у различитим других језика.
Али приметити да овде смо дефинисање пар ствари.
разреда је променљиво вариабле-- ми не користимо ЛЕТ кључну реч.
Значи онда можемо изменити садржај овог низа.
Она је типа Арраи Инт, и можемо рећи да
На основу ових заградама овде.
>> Сада једна од лепих ствари о томе је да смо
имају приступ многим Dodatne Informacije
о низу користећи само нека једноставна тачка нотација.
Тако на пример, градес.цоунт даје нам
број предмета који постоје у томе Арраи, који онда могу да приступе прилично
лако једноставно користите тај дот запис.
>> Ако желите да додате додатне ставки у овом низу,
не можете урадити ПХП стил где баш експлицитно дефинисати,
у датом индексу, нека вредност који желите да убаците.
Уместо тога, користите аппенд метода у типу арраи
да додате ту ставку, 95, на овој листи.
>> И сада овај низ има следеће цонтентс-- 100, 0, 90, 85.
И сада смо у прилогу 95 и на то.
>> Постоје и други начини можемо додати ствари.
Можете заправо користити оператор сума,
који ће се тумачити као низ Аппенд операција.
И тада можете додати још Арраи, чији садржаји су 70 и 80,
у том низу.
Тако да сада имамо Садржај у ове променљиве
градес-- 100, 0, 90, 85, 95, 70, и 80.
Ово је само лепо мало синтактичка шећер који Свифт даје нам.
>> Дакле, ако желимо да сумирамо оцене, ми смо можда
хтети да поновити преко сваке ставке у овој петљи.
И ми немамо, у Свифт, појам од фор петљу као што бисте очекивали.
Али начин на који указујемо опсег је нешто другачија.
Дакле, у овом случају, то Укратко све, ми ћемо
ће да се створи привремени променљива зове сума како за нас
да задржи ову тачку.
>> И приметио нашу за петља изградња овде.
За индекса у 0 .. <граде.цоунт.
Дакле, ова конструкција, 0 .. <градес.цоунт је низ операција где смо
каже да ћемо да створимо низ целих бројева од 0 уп
да али искључујући градес.цоунт.
Тако ће ово бити 0, 1, 2, 3, 4, 5, до колико год један
пре градес.цоунт.
>> Дакле, ово је другачије него како смо би типично се користи за петље
где би имао неку индекс променљива, то једнак 0 постављена на почетку,
а затим интегрисати да до неке вредност мања од бројања предмета
у том низу.
>> Тако да је модификација ово, заправо,
што нам омогућава да веома лако сет различитих врста креће.
Ако промените ову линију у три тачке, 0 ... граде.цоунт,
ово представља опсег 0 да градес.цоунт закључно,
што значи да је тај број и потом укључују у том опсегу.
>> Али ово је врло згодан за ове тачне ствари,
када морамо да обављају итерација преко петље
јер су ти индекси су индексирани нула, као што смо видели на другим језицима
kao.
Сва питања на овоме петље?
>> Тако да је имплицитна дефиниција овог индекса променљиве,
чија је вриједност почиње у 0, и наставља на сваком петље итерација
да се повећа за 1 до тачке која је једнака градес.цоунт,
У том тренутку, петља прекида.
>> Приметите да у нашем низу интерполација овде,
ми заправо може обављати нека једноставна манипулације до тих вредности.
Дакле, индекс, плус 1 ће заправо извршити сумирање тог вредности
јер је индекс је, у овај случај, цео број.
И у том тренутку, то ће затим може бити конвертован у стринг
и интерполирају у овом стринг овде, и штампати као што смо очекивали. .
>> А добра ствар о низовима овде
да такође смо у могућности да имају Згодна вредности и одређивање вредности
користећи квадратни носач запис као Видели смо у другим језицима.
>> У реду, тако да одавде, сада израчунати нашу збир свих наших разреда.
Сада некако следећи логичан корак би био
да уради операцију дивисион да пронађу од просека тих разреда.
Али нешто важно овде се дешава који
је да је ова сума је можда цео број.
Али морамо да обављају неке врста двоструког поделе.
И то ће бити изузетно важно када
желимо да изврши ову операцију, јер оно што говорите
је да морамо да стварно врши поделу на две дублу.
И опет, јер Свифт је веома снажно откуца,
ми изричито да подесите све од ставки у дублу пре него што смо заправо
обавља ту операцију.
>> Дакле, да би нас обавља двоструку поделу,
то није довољно за само један тих ставки да буде дупло.
Обе морају бити дупло како би Свифт
како би били сигурни да је ово је оно што желимо да радимо.
Онда смо се експлицитно типецаст износ који смо изнад израчунати
и кол разреда у дублу, и затим извршите ту операцију и продавницу
да у овом новом променљиве, односно Ова нова стална зове просеку,
која ће имати шта тип, ли замислити?
Дупли, да.
Дакле, у овом случају, не морају да га навести
јер се може закључити из рад који тип просека података
biće.
И Свифт је углавном прилично добро о могућности да закључимо врсте.
>> Да ли желите да видите ово рун, или могу даље?
Желим да наставим.
Сва питања на све ово?
Veliki.
>> Сада ћемо да почне да се добри стуфф-- Дефинисање функција,
и неколико других врста које су јединствена за Свифт да нема
види на другим језицима до ове тачке,
али оне су присутне у другим језици који можете наћи касније.
Дакле, прво, ако желите дефинисати функцију,
га дефинисати са функи речи функција, а затим име функције,
и онда у загради, аргументи да ли желите да функција да прихвати.
Аргументи такође морају да специфи-- генералли--
Такође мора одредити врсту података који јесу, осим ако се може закључити на.
И ми ћемо да видимо мало упозорење у само мало.
>> Тако да смо у овом случају имају функција названа принтГрадеЦоунт.
Ми ћемо прихватити вариабле-- односно у овом случају,
цонстант-- зове градебоок.
И то ће бити типе низ целих бројева.
Сада има нешто то је заиста важно овде
да желим да схватите.
То је да по дефаулту, ови аргументи да су улази на ту функцију су
дефинисано са имплицитне ЛЕТ кључне речи, што значи да не може да измени ово
Градебоок променљива овде.
И то на неки начин има смисла, јер сте пролазу податке у.
А ви можда не желе да се мења под тобом.
Могуће је помиње експлицитно да је ово променљива стављајући
ВАР кључна реч овде.
Али то је Капирам да смо Приметили су људи урадили у прошлости
је да претпоставља да иде да буде варијаблу када, у ствари,
је константа.
>> У реду, па ево онда, у овом случају, ми не прецизирајући било коју врсту повратка.
Ми ћемо вам показати како да то урадите само који тренутак.
Али приметити да овде имамо само једноставно да стању.
Ако је градебоок празан, која у овом случају
је само имовина овог интегер Арраи, онда одштампајте нешто.
Иначе радимо нешто друго.
>> Прилично једноставан сада мислим.
Али, заустави ме ако имате било каквих питања.
>> Ова функција, просек, такође узима неки аргументи, односно један аргумент,
која је градебоок, а овај пут ће вратити двоструку тип.
Зато што је цомпутинг просечна и то је
ће заправо вратити да израчуната просечна до долазног позива.
>> У овом случају, ми наведете повратни тип након стрелом.
И то може осећати некако чудно на први поглед.
Ви сте навикли на постављање повратак
типе испред назива функције.
Али ако мислите о овоме у смислу математике,
Као кад имаш математику да дефинишемо функцију,
имате функцију са неким улаза, а то ствара излаз.
А то је управо оно што ово је требало да имитирају.
А ту је и неколико других језика који имају сличну синтаксу, као,
али вероватно нико да сте видели у ЦС50.
Али ипак немојте бити збуњени њега.
Стрелица значи шта се дешава да се врате у овом случају.
У реду, па како ћемо да се израчуна просјек?
Па, ако градебоок је празна, па онда смо
ће да се врати 0, што можда разуман начин да се лечи.
Не знам, хајде да дође вратити за који мало.
То не може стварно бити разуман начин
израчунати у просеку ако имамо празан градебоок.
>> Онда ћу обављати нашу сумирање.
Приметите да овде заправо имају алтернативну верзију
за петље, што нам омогућава да поновити преко сваког ставку у низу
и поставите сваки елемент у свом променљиве.
Одређивањем за разред Градебоок, шта ми говоримо
јесте да ћемо имплицитно створити нову константу која се зове
разред који ће представљати свака уникат у градебоок
сваки пут када фор петље итерацију.
Тако је први пут да то рун, разред ће
бити прва тачка у градебоок.
Други пут ће бити Друга тачка, и тако даље и тако даље
до градебоок има исцрпљени се елемената.
Тада ћемо моћи да закључимо да разред у нашу сумативна променљиве
и врати Наш просечан као што смо раније видели.
У реду, има ли питања?
Да?
ПУБЛИКА: Имам два питања.
Број један, хипотетички, могу покренете цео број на овоме?
Не мора да буде дупло, је ли тако?
Дан АМРМЕНДАРИЗ: Можете ли поновите питање?
ПУБЛИКА: Могу ли цео као просек?
Дан АМРМЕНДАРИЗ: Можете ли уради цео број као просек?
Дакле, вратити цео број Просечна уместо дупло?
>> ПУБЛИКА: Ретурн-- вас имају то право сада испод.
Дан АМРМЕНДАРИЗ: Овде, врати 0.0?
ПУБЛИКА: Да, само се врати 0.
Тако да ће бити или 80 или 85, али не 85.2.
>> Дан АМРМЕНДАРИЗ: Дакле, у том случају, тако да је неколико различитих начина
да одговорим на то питање.
Дозволите ми да одговорим их у ред.
Дакле, ако сам само да овај повратак 0, а 0 је цео број вредност.
И тако да ће изазвати Тип грешка у овом случају
јер се очекује дупли али се потом се враћају цео број.
Ако желите да се вратите цео број, могу.
Ја могу поставити повратни тип на инт, ретурн 0 овде,
а не врши двоструку поделу.
Али онда ћемо бити ради цео број подела.
И тако онда не би добити Просечна да ћемо можда очекивали.
Али, да можемо изменити типови на тај начин.
>> ПУБЛИКА: А друго, те имају један брачни на врху.
Али доле, те када урадите врати Доубле Доубле,
То је већ аутоматски повратак Доубле формат.
Зашто тек треба да се дефинише са стрелицом на врху са двоструким?
>> Дан АМРМЕНДАРИЗ: Па у случају, ово је део
од који-- тако да поновите питање, зато што је имплицитно од повратка
Врсте овде, шта то заправо тип је, морамо бити експлицитна са Свифт
о томе шта желимо да врате из ове функције
тако да када он обавља типе провере, може да се уверите
да је оно што смо заправо написали доле заправо у складу са тим.
Дакле, то је нека врста провере са собом врста ситуације.
Али постоји су-
>> ПУБЛИКА: [неразумљиво] арров?
>> Дан АМРМЕНДАРИЗ: Постоје случајеви када можемо навести да смо имплицитно могу
поставите повратни тип.
Али у овом случају, не знам Мислим да би радили.
Ту је неки други синтакса да ћемо видети касније.
>> У реду, тако да овај извор код је мало другачије
јер ово парсес аргументе из функција коју зовете.
Дозволите ми да вам покажем како то ради Пре него што пређемо на ствари
до неких занимљивих ствари да се дешава у Свифт.
>> Дакле, у овом случају, ако сам покренути ово код, приметићете да оно што ради
је-- док, некако даје ми чудан грешку.
Морам да га прође неколико цели бројеви као аргумент командне линије.
Па да видимо, 150 и 80, и притисните Ентер да сазнате шта то заправо ради.
То је прихватање сваког од ове вредности као цели бројеви.
Их је унос у градебоок.
И онда је обављање да је просјечна обрачун
и излаза да као што смо очекивали.
>> Али очигледно постоји нешто дешава са овом одбија нешто
нешто као цео број.
Као што се сећате од кад смо били која се бави аргументе командне линије
у Ц и другим језицима, први 0-ог ставка у том командне линије аргумента
Листа је име команде да заправо погубљен.
Дакле, у овом случају, ја само петље над свим аргументе командне линије у.
Али ја не радим било какву фанци проверите да прескочим први.
Ја сам само експлицитно или имплицитно Ја сам провера које од ових типова
су цели бројеви пре него што сам заправо обављање ове рачунања.
>> И то је у суштини шта се дешава овде.
За сваки аргумент у аргументи у процесу је,
Идем да изврши неку проверу.
И у овом случају, ја ћу покушати да први претворити
тај аргумент у цео број од обавља експлицитан типецаст,
јер је, на улазу, стринг а не у ствари цео број.
>> Али ово је чудно синтаксе, ако дозволите разреда износи Инт (аргумент).
Шта се заправо дешава Овде је изузетно
важно да ваше користећи Свифт.
Ово користи оно што је назива опциони тип.
>> Дакле, ова функција Инт (аргумент), враћа не само цео број, али се враћа
оно што се зове изборни цео број.
И то је некако тип на врху типа.
Ти си некако могу да замислим као то се враћа као пакет.
И када отворите да пакет, или
има цео број, који је резултат, или има у томе апсолутно ништа.
А то је корисно као провера грешке механизам, јер у овом случају
можемо сазнати, ово је Тип конверзије успешна?
Ако јесте, онда је, у ствари, ће имати унутра цео број.
У супротном ће то имати неке вредност да ћемо звати Нил, који
је представник нема цео број уопште.
То је стварно представник ништа.
>> И то ако конструкција омогућава нам да размотати тај пакет,
да опционо обавезујући.
И ако смо у стању да размотати да пакују и наћи цео унутра,
онда оно што говорите Овде је да смо тада це
дозволити да вредност да се постави у ова стална зове разред.
И овај део ако изјаве, горњем делу иф изјаве
ће радити, јер то размотати био успешан.
>> Ако је тако дешава да можда је била грешка
У овом експлицитне тип конверзије од низа на цео број, можда
то је вредност АБЦ, на пример.
И то је, заправо, не иде претворити у цео број.
Онда ће се вратити Нил, што није цео број.
И то ако изјава и онда пропадне.
оцјена неће постојати, јер нема интегер садржај.
И то ће покренути ову друго блок уместо тога.
Да?
>> ПУБЛИКА Нил је Н-И-Л?
Дан АМРМЕНДАРИЗ: Нил је Н-И-Л, да.
>> Дакле, ово је можда једна од најтеже ствари у вези Свифт,
посебно када сте у коров на иОС апликације на
а ви заправо покушавате да мало развој тамо.
То ће бити виче на вама опција.
То ће бити за вас упитници и ускличници.
Али када схватите оут-- ако вас посвети мало времена да смисли
шта се дешава са опционим врстама, ћете себи уштедети много главобоље
као што покушавате да напише апликацију у Свифт.
>> То је заправо веома моћна особина.
И ви цете морати да веруј ми на реч за то за сада.
Али видећемо ову конструкцију и још неки лике ит
у неким другог изворног кода који ми ћемо вам показати у само мало.
>> Има ли овде неких почетних питања?
Дакле, важно је да је понети опционо тип је нека врста метатипе.
Он или има неку вредност, а ако се то деси, онда је
ће можда имати ту вредност повезану са њим, или је нема никакву вредност,
и то је представљена нули.
Остатак је ово можда као што бисте очекивали.
>> Дакле, хајде да појача тешкоћа опет.
И овај пут, хајде да погледамо неке друге врсте података који заправо постоје.
Један од њих је речници, која је веома сличан Питхон речника.
То је донекле слична хеш табели у Ц. То је у суштини мапирање тастера
где кључеви могу бити низови.
А када погледате горе те кључеве, ти тастери ће имати вредност.
Дакле, то није баш низ, али уместо тога, више уско повезан
на карти хеш или хеш табели.
>> Хајде да видимо како ово треба да стварно раде пре него што
иду у изворни код самог.
Ако сам покренути ово, ништа стварно дешава.
То ме говори да сам очекивао неки параметри наредном типа.
Зато ћу да обезбеде то неки проблем поставити имена,
тако псет0, можда имам 100.
И псет1, имам 5.
А онда на испиту, ја да ли заиста добро и добио 30.
И упс, ударио сам простор овде.
>> Када сам ударио Ентер, можете видети обавља неке рачунања.
Пише градебоок је три оцене, псет1, псет0, испит.
И градебоок има ова специфична просек.
Дакле, опет радимо са овом идејом градебоок,
али ћемо да наставимо итератинг са сложености наше функције.
>> Дакле, на самом почетку, ми смо само да створи функцију која
је одговоран за штампање употребу.
А ту је излаз функција која ће само
присилно напустила апликацију.
То није нешто што ћете користити у иОС апп.
Ово је само, у овом случају, са командне линије аргумента.
Даље ћемо почети креће ка Ксцоде.
Али ово је специфична за команду линија стил програм у Свифт.
>> Хајде да погледамо неке од интересантних ствари овде.
Да видимо, само неколико интересантне ствари да можда поменути
је да је у мом функцији штампање броја разреда,
можда се сећате да сам имао тај списак од итемс-- псет1, псет0, и испит.
Можете заправо брзо и лако урадити
тако што ће Градебоок, што је рјечник који има кључеве и вредности.
Пронађи све кључа је кроз метод овде дот кључеви,
и онда користите ову јоинВитхСепаратор, који ће онда предузети све кључеве
да смо укуцали, или псет1-- Жао ми је, псет0, псет1 и екам--
и спојите их заједно коришћењем зарез и простор
да створи један дуг низ.
Ово се придруже операција је само феноменално корисна у различитим контекстима.
И тако је то јоинВитхСепаратор.
>> И то је једна ствар која је променио од 1 до Свифт Свифт 2.
Ту је некада био Питон стиле-- ако сте
упознат са Питхон-- питон стил придружи метод на жицама.
Али, то више није случај у Свифт 2.
Ви желите да користите ово ако желите да спојите низ ствари
заједно са низом.
>> Па, можда онда у нашем расправа о просјеку пре,
чини мало више смисла за нас да подесите функцију просечну
да буде опциона двогуба прилично него само експлицитног доубле.
Зато што смо имали необично стање у којем,
шта ако стварно градебоок нема вредности унутар ње?
Шта би требало да просечна повратак?
>> Па, можда у Ц ти би урадио нешто
као обезбедила сентинел вредност, као и 0.0, или можда негативан број,
или нешто једноставно представља чињеница да је било грешка услов
а ви можда не заправо имају способност да израчуна тог просека.
Па лепота навођења опционо тип би било да то уради.
И сада говорим све ове речи, али ово заправо не користи Оптионалс.
Али видећемо да је за само минута где можемо поставити просек
буде изборни Тип података тако да ако је стварно врати неке податке, затим
ми ћемо вратити те податке.
У супротном ћемо се вратити нула, рекавши да је овај
нема смислену прорачун.
>> Идемо на нешто друго.
Дакле, одавде, ми смо гледали Сви ови примери у командној линији.
Али стварно шта ћеш да се бави је Ксцоде.
А једна од лепих ствари о Ксцоде је, а посебно у Свифт,
је да имамо ово ствар се зове Плаигроунд.
И Игралиште је није нимало иОС апп.
Али вам омогућава да експериментишу са Свифт на веома једноставан начин.
Можете унети све кода.
То је лепо синтакси истакао овде.
Када креирате нову датотеку, она ће питати ти ако желите да креирате Плаигроунд.
Али добра ствар у вези Плаигроунд је да на десној страни прозора,
да ли ти стварно показати излаз из кода.
Дакле, ако сам спустите, можемо видети шта излаз различитих линија кода
заправо дешава да буде.
>> Дакле, у овом случају, идемо у мењају правце само мало
и причати о нечему што је стварно важно да овај високом нивоу начин
да Свифт делује, и то је ова идеја затварања.
И вероватно сте видели ово мало у ЈаваСцрипт.
За оне од вас који у ЦС50, затварачи
су веома популарни, веома добар начин да то урадите Висок ниво ствари у модерним језицима.
Али то је такође врста тешко замотати главу око први пут.
Дакле, ако гледаш ово Први пут, то је у реду.
Само погледајте изворни код и видјети ако могу да схватим код куће.
>> Дакле, у овом случају, рецимо да смо желе да створе много експоненти
са неким фиксну вредност.
Дакле, у овом случају може да створи функцију.
Идем да га зовем снага 2 чија је једина сврха у животу
је да се неки улаз и двоструко да, и врати ту вредност.
Приметите да сам овде прихватајући једну врсту података.
То ће бити променљива под називом х.
То је типа Доубле.
И ја ћу да се вратим А Доубле овде.
И само ћу да урадим јако, искрено, прилично
наивна начин удвостручује ову вредност.
А ја ћу вам показати зашто ово је користан за секунд.
>> Приметите да овде имамо ову линију Опет. нешто у 1, дот
Дот, 2, што значи да Ова петља ће радити два пута.
Али ово представља лажну променљиву.
То значи да нисам стварно да користити тај променљиву нигде
унутар ове петље.
Ја само желим ову линију кода за покретање два пута,
без потребе да зна вредност тог распона.
>> Дакле, у овом случају трчим резултат пута к пута, који у суштини
значи да сам квадратура ову вредност.
И ово се дешава раде као што бисмо очекивали.
Снага 2, пролазећи вредност 2.0 нам даје снагу од 4.
3.2 радови за 10.24.
>> Сада можемо да урадимо је слична ствар за снагу 3.
Али сада променити само опсег.
За вештачка варијабла у 1 до 3, помножите 3 пута,
и уради исту ствар.
>> Дакле, ово може осећати мало неприродно.
Али постоји важна ствар овде која
је да гледа ово две функције, ту је
само једна ствар која је другачија, што је ова вредност у опсегу.
Све остало у вези ова два функције, снага и моћ 3 2,
су, у ствари, идентично јер раде на исти начин.
>> Дакле, у овом тренутку, мало звоно за узбуну треба да се иде ван.
Надам се шта говориш, знате, ово изгледа мало
као дуплирања напора.
Можда постоји начин на који бих бити у стању да енкапсулација све ово
и обезбедити функцију или отворите функцију која
ради управо оно што желим, без потребе да га откуцати експлицитно.
И то је оно што власт од затварања омогућава нам да радимо.
Дакле, хајде да погледамо ово.
А ја ћу провести пар записник о ово, јер је ово
је врло важно за Свифт.
Све време видимо ово.
Ми ћемо дефинисати функцију.
То ће бити позвани повероф.
То ће прихватити параметар се зове и типа Инт.
Али да погледамо повратног типа.
Тип повратак је, заграде, Дупли арров Доубле.
Што значи да ове функције, Ова функција повероф,
се враћа функцију.
То је прихватање А Доубле и враћа дупло.
Тако да можда звучи сулудо, али хајде да спустите мало
и погледали шта се дешава.
Ми смо унутар ове функције повероф.
Ми правите нову функцију зове екпонентиатор,
али то није битно шта је то.
>> Обратите пажњу да ово има улазни вредност к.
И то изводи у Доубле и враћа дупло.
И то је исти број који смо видио, осим што је вредност од 2
или вредност од 3, то горње границе у том опсегу,
је замењено са ова вредност и, која
био иницијална параметар наше повероф функције.
И у овом тренутку, ми врати екпонентиатор.
Ми се враћамо функцију.
>> То је као мало Минд Бловинг.
Али, хајде да замислимо шта се догађа кад зовем ову функцију повероф
и прође у њега неку вредност као 2.
То значи да Ја сада имам вредност
2 за и, што значи да ове вредности и у овом екпонентиатор функцији
ће бити та вредност 2.
Али ја ово враћа екпонентиатор функција.
>> Дакле, обратите пажњу шта Свифт каже да створили су у овом случају.
нека квадрат је дефиниција, то је функција која прихвата Доубле
и враћа дупло.
Ја сам створио функцију да квадрата нешто
користећи овај механизам овде.
И заиста шта се дешава је да се враћа ову функцију
екпонентиатор, али ова вредност и је обавијен унутра.
И сада сваки пут кад користим ово променљива или константа зове ова
квадрат, то иде да се понаша као функција.
И тако сам онда може назвати променљиву као што бих назвао функцију,
и прође у њега број, као у овом случају 3.
И онда ће квадратни ову вредност.
Дакле, 3 квадрат ће онда постају 9, као што можете видети овде.
>> Стварно лудо, али ово сада омогућава ми прилику
да створи друге повероф функције.
Као што могу да кажем, у реду, али сада желим да створи нову функцију, повероф (3),
и чувајте је у један константа зове коцка.
И сада коцка ће бити посебна функција која ће тада
узети неку вредност као улаз и коцки које вредност као што можемо видети у доњем реду
овде.
коцка 2 ће резултирати 8.
>> Надам се прилично уредан ствари.
Никад ниси видео ово раније.
Позивам вас да погледате у затварање и истражује ово мало више.
То је стварно моћна ствар видимо доста у ЈаваСцрипт и неким другим језицима.
То је заиста од виталног значаја за разумевање АПИ као и
да ћемо добити у само секунди.
Да?
>> ПУБЛИКА: Када радите повероф (2), заграда, а затим
друга заграда, други инпут-- ви сте у основи замене квадрат.
Дан АМРМЕНДАРИЗ: Зато погледајте у последњем реду овде.
То је заправо потпуно могуће то везивање као што сте предложили.
Дакле, повероф (5) значи да идемо да има екпонентиатор од 5 до овде.
Дакле, ово је у суштини ће бити исто као 4 до петог власт,
јер смо створили екпонентиатинг функционишу у пети власт,
и ми пролазимо у који функционишу вредност 4.
И добијамо да је вредност да очекујемо, 1024.
ПУБЛИКА: И то није име, тако да олакшава
да чита, трг без обзира.
>> Дан АМРМЕНДАРИЗ: Да, управо тако.
Дакле, пре него што сам га ставити у стална овде тако
да је било лако да користи тај назив.
Да?
>> ПУБЛИКА: У овом контексту повероф, то је део
од програмског језика за разлику од вас који начин
мислим на повероф у [неразумљиво]?
Дан АМРМЕНДАРИЗ: Па у овом случају, повероф
је једноставно име од функција да дефинише овде.
Дакле, то није својствено самом језика,
али уместо тога, то је само функција која има
то име јер сам му дати то име.
Има ли још питања?
U redu.
>> Ово је сјајно.
Али ти нећеш видети Пуно затварања функција које
су овако гдје да дефинишете, унутра једне функције, другу функцију.
И ти то можеш.
Али то није врста заиста потребно, зар не?
Као зашто сам ово дефинисати функција названа екпонентиатор
и онда одмах га вратити.
Зашто не могу сам одмах вратите ову функцију?
>> И у ствари, то је управо Идеја која стоји иза концепта под називом
анонимни функције, где анонимни функције заправо не
има име, јер су не треба да има.
И тако у овом случају, у 7Б, можемо прецизно да пронађу.
Све је исто код, ради потпуно исту ствар,
али сада смо га променили нешто тако да је ова функција повероф одмах
враћа функцију.
Обратите пажњу да је након повратка, ту је отворена коврџава заграда.
То је очекивао то улаз Доубле.
То је очекује да излаз Доубле.
И онда је у кључна реч одваја самог кода.
Дакле, ово је анонимна функција.
То не заправо имају име, док пре него што је позвао екпонентиатор.
Али, као што смо видели, само стварно није се односе на екпонентиатор
изван те функције.
Дакле, то није битно.
Дакле, ово анонимно функција такозвана јер је безимен,
али још увек користи у контексту овог законика.
>> Наредних пар оних сам ће се надам се наставити
пуше ваш ум мало.
Можемо поједноставити ово још више.
Јер, као што је проницљиво истакао раније,
Можда ми заправо знамо, од закључујете из овог кода, што
излаз овог кодекса ће бити.
И у ствари, у овом анонимном функцији, можемо у ствари закључити врсте података.
>> Дакле, у овом једном, више не треба да експлицитно дефинисати
тип података који је био улаз и излаз из ове функције
за неколико разлога.
Једна је да смо дефинисан, горе у прототип прихватног функције,
који тип података ове анонимних функција треба да улаз и излаз.
А од другог, ми може се закључити из кода
овде да прихватамо улаз који је типа Доубле
и враћа дупло.
>> Приметите да овде немамо изричито дефинисане имена аргумената
да је ова функција прихвата.
И тако видимо да се може односити на ти параметри користе $ 0, $ 1,
тако даље и тако даље, зависно од број тог параметра користи
у овој функцији.
>> То је нешто што идете да видим доста је ово отворено коврџава заграда
Дефиниција потом до $ 0, а онда неки рад,
а затим затворени коврџава заграда.
То је анонимна функција да обавља ову операцију.
То је овај параметар где то је тип је закључити.
Тај први параметар је $ 0.
А неки операција догађа на то $ 0.
>> ПУБЛИКА: Тако је знак долар значи параметар основи,
и 0 означава први?
Дан Армендариз: То је тачно.
Тако је знак долар у суштини значи параметар, а 0 значи први.
Али то конкретно ради у овај случај где нисам именовао
аргументи у мојој анонимног функцији.
>> ПУБЛИКА: Да ли Перл или нешто има ово знак долара, долар 0 тамо?
Дан Армендариз: Да ли која, жао ми је?
ПУБЛИКА: Да ли Перл има ово долар 0, долар 1--
ДАН Армендариз: Нисам превише упознат са Перл,
али оно што дефинише ПХП-променљиве на основу зараду.
И можда постоји неки језици који имају функције као што је овај.
У ствари, Свифт позајмљује доста функција као што је ова
од многих других језика.
Видимо наговештаје Питхон у њој.
Ова дефиниција типа Изгледа да долази из ОЦамл.
И имамо само гомилу ствари из много различитих језика.
То је један од лепо ствари о Свифт
је да је потребно доста најбољи идеје из гомиле језика
и схоехорнс их све заједно у једну супер језику.
У ствари, ако ми дозволите да наставити пуше свој ум,
тако да смо радили све ово.
Ми можда можемо поједноставити ово мало мало по схватајући то, наравно,
Свифт има екпонентиатинг Функција изграђен.
Ако увоз Дарвин, која је само да библиотека
има ову функцију зове бум, сада Ја могу поједноставити своју моћ функције
да буде следеће.
То ће се вратити ово анонимно функција.
>> Али погледајте како је једноставно ово је сада.
Ово је анонимна функција која прихвата неку врсту података,
и то ће бити један Аргумент конкретно,
референца на $ 0 да је типа Доубле.
То ће вратити Двоструко.
Али, та изјава повратак сада је имплицитно.
>> И то је то тачан стил који је веома, веома распрострањена у Свифт,
svuda.
Идемо да видимо ово све време у Свифт.
Тако сам показује све ово ти због овог синтаксе.
Ово је веома честа да видимо, што значи да је
је анонимна функција који се обавља
неки рад на овим аргументима.
И ту је имплицитно повратак.
Дакле, то је апсолутно иста ствар за нас да кажем, овде.
>> Због овог коврџавом носач је функција,
ми смо обавили ову операцију на први аргумент.
Идемо да се врати то.
Али ово спољни повратак је враћа ту целу функцију,
цео тај анонимни функција да смо управо креирали.
Има ли још питања?
У реду, ја не знам да ли ви сте спремни за то,
али можемо да идемо још луђа са Свифт.
Ste spremni?
ОК, ово је сјајно.
>> Сада ми имамо способност да, у Свифт, јер како модуларни
и како заснована протокола је, да се дефинише своје проклети оператере.
Као у овом случају, нисмо имали оператор за екпонентиатион-- добро,
за обављање овлашћења нешто.
Али могу, у Свифт, дефинишу нови оператер који ради управо то.
Дакле, у овом случају нема гомила синтаксе овде.
А ја ћу вам омогућити да гледате код куће кад погледате ово.
Али ми се дефинишу ову Инфик оператер, **, што ће онда нам дозволи,
кроз дефинисање шта је то Функција ** ствари
не, да прихвати леву руку страни и десна страна,
а затим да врати експонент који лева страна на десној страни.
>> И сада одједном И су створили нову бројник.
Дакле, 2 ** 3 значи 2 на треће силе.
[Минд Бловинг Соунд] Ово стране Сама би требало да вас буде као,
У реду, завртањ Ц Идем Свифт скроз.
Ovo je super.
Ово је прилично фантастично.
>> Иако је ово сјајан пример.
Али ја никада нисам једном изван овог примера стварно
дефинисан свој оператера.
Али, ипак показује Много снаге Свифт
и зашто је то, заправо Заиста веома кул.
У реду, зар не?
ПУБЛИКА: Ако сте дефинисање свој оператера,
Како знаш да не случајно покушати да створе оператера који је
негдје у Ц, као и скривена негде у Свифт,
као опскурне онај који вас можда није видела.
>> Дан Армендариз: Дакле, ако покушавате да дефинише своје оператере,
постоји ризик дефинисања један преко постојеће оператера.
То иде у нивоу детаља који Ја не мислим да имамо времена да одем.
Али то је ризик.
И то је, у ствари, веома разлог Нисам користити ЦАРЕТ симбол који
када смо куцањем моћ, обично користе 4 мало ЦАРЕТ 5 или тако нешто
тако, само кад смо Гцхаттинг пријатеље или било шта друго.
Али у том случају, који заправо би изазвао судар.
И тако сам га избегавао само зато Мени се десило да знам у овом случају
да ће то довести до тог судара.
>> U redu.
Сада, нажалост, за последњих седам минута,
Морам да наставим да пуше Ваше мисли мало.
Дакле, дозволите ми да вам покажем неке друге ствари као добро.
>> Ми смо показао ову идеју да те анонимне функције,
ови затварачи који вам омогућавају да врста прође око функције.
Можете их вратити.
Можете их манипулише.
То можете учинити све врсте луде ствари.
>> Али једна друга ствар која је случајно корисни
јесте способност, насупрот повратку те функције
у функцији, да прође функцију као параметар за неку другу функцију.
Можда се добро размишљање зашто на Земљи бих желео да урадим тако нешто?
>> Па, рецимо да желим да се овај оператор који сам
трудили да креирају и примењују да се гомилом различитих бројева
у низу.
Дакле, у овом случају имам низ интегерс-- 1, 4, 7, 2, 5, 10, 56.
И желим да их све удвостручити.
Начин на који смо обично би урадите је да само пишем
једноставан за петљу да Примењује преко свих њих
и врши неку врсту квадрат операција над њима,
унос те нове вредности у нову променљива, односно, нови низ овде.
А вредност излаза Резултат је тада све те низове,
односно сви они Елементи сада квадрат.
>> И то смо могли урадити исто ствар за то цубинг,
али мало звоно за узбуну Требало би да кренем са
рекавши да можда постоји неки начин да бисмо
бити у стању да поједноставимо мало.
А у ствари, постоји.
Шта ако смо могли да створимо функција која нам омогућава
да прихвати, као предатор, у функцији?
Дакле, у овом случају, узмите погледај ових аргумената.
Ми ћемо прихватити попис дублу.
И онда идемо да прихвати функцију
у променљивој по имену Ф која ће да узимајте дуплу и вратити дупло.
И цео излаз целог ове функције
зове маппер ће врати низ се зове двоструко.
>> Шта то онда би ми дозволили да урадите је да поновити преко тог списка
и уради исту ствар, али сада примењују ту функцију на сваком
појединачних вредности у тој листи.
Тако да ја не знам шта је ф.
Није ми важно.
Али докле год је потребно у Доубле, обавља неку операцију на њој,
и онда враца Дупли, ја бих онда био
у стању да мап ту функцију преко сваки елемент у листи.
>> И овај тип програма је тзв више функција реда,
где ми пролази функције око као параметре
и раде ствари са функцијама.
То је врста Као узимање свих ових идеје које смо научили у ЦС50
и узимајући их на неки од на следећи ниво.
И то је све цс51 стилу ствари.
И тако ћемо ићи у дубину више класе као што је то.
>> Али ово је такође важно јер смо
види доста функција који се користе у Свифт
то у суштини ради ово, где имамо
неки бројеви, нека низ бројева.
Ми ћемо проћи да Арраи у наш маппер.
И ми ћемо такође пасс неку функцију, која
већ смо је дефинисано овде.
То ће бити квадрат.
И ми ћемо онда скуаре све оне бројева
и чувајте је у овом резултату овде.
>> Дакле, овај случај смо дефинише наше властити функција названа маппер.
Али ово тачна ствар је, у ствари, уграђена Свифт.
Постоји разне функције зове карту.
Ту је карта на функцију, ту је смањио функцију,
и ту је функција филтера, који у суштини важи функције
на сваки елемент у Листа да их мењате на неки начин.
>> ПУБЛИКА: Дакле, с обзиром да се трансформише податке у други формат
кроз фунцтион--
Дан Армендариз: Тако је.
Да, тако је функција да смо прихватањем
трансформише податке на неки начин.
У том случају, било били квадратуре га, или смо га цубинг,
или заиста, можемо обављати Нема операције на њему.
>> Али дозволите ми да вам покажем како се то онда ће изгледати у пракси.
И опет, ја водим мало времена. па нисам
ће бити у стању да иде преко свега изворног кода овде у детаље.
Али ја вам и да то урадите.
Ми ћемо писати чим могуће после овог разговора.
>> Али ако погледамо ово, Претпостављам да имамо списак бројева,
низ бројева у ово променљиве бираних бројева.
Онда желите да обавите ово Филтер рад на оним бројевима.
Тако филтер је виша Функција нареди да
прихвата низ али и функцију.
И на сваки елемент у томе Арраи, обавља ту функцију.
>> Ако је то функција враћа Истина, држи ту ставку.
Ако је функција враћа фалсе, да баци ту ставку.
А онда се враћа листу који се затим састоји алл
од оних ствари које су филтриране.
>> Дакле, другим речима, ово је иста идеја, градебоок.
Можда имамо различите разреда у Та вредност, звана бројева.
Могао би бити 100, и 70, и 40, тако даље и тако даље.
Шта овај филтер ради је обавештење да је тај синтактичка шећер
за анонимног функцију.
Ово је анонимна функција говори да је параметар који сам прихватање
ће бити, ако је већи од 70,
онда ће то ретурн труе, што значи да та ставка ће се чувати у овом филтеру.
Зато будимо мало конкретнији о томе.
Ако имам овај низ бројева а састоји се од 100, 70, и 40,
Ја обављају овај филтер Операција на свакој од њих.
Тако да Први је ова вредност од 100.
100 већу или једнаку до 70 је истина, која
значи да је 100 се чува у ова нова копија овог низа.
70 такође пролази.
Али 40 не.
Дакле, шта се враћа у пассингЦоунт је низ елемената 100 и 70--
100, зарез, 70.
То су једина два предмети који су држани.
И тако је разлог што сам брзо прошао доста оваквих високог реда
ствари су јер је то уобичајено да Оно што ћете видети у прилично Свифт
често се обавља неке операције Коришћењем овог анонимног функцију синтаксу.
>> Има неких кул.
Прекидачи су заиста моћни у Свифт, Мислим баш као луди, луди моћан.
Можете користити прекидач, и заправо можете их применити
да се креће, што је сулудо, и да ли фенси такве ствари.
>> Али, у последњих неколико минута, Желим да прескочите напред доста далеко
и показаћу вам конкретан пример како можемо створити у иОС апп помоћу Свифт.
Дакле, када радите ово, мораћете да
А Лоок ат-- на Апплеов документације, они
има много добрих туторијала стварно за стварање своју прву апликацију.
И Позивам вас да урадите зато што су те
кроз све кораке шта тачно да кликните на стварање иОС апликацију.
>> Али овде имамо овај иОС апликација.
И то је заправо прилично једноставна апликација.
Ако сам покренути ово, да ти покажем ви како изгледа.
Све што у суштини ради је то повлачи са Интернета ЈСОН фајл
да сам чувају на серверу.
И то ЈСОН фајл дефинише слике које омогућавају
ја онда циклус кроз, на мој Апп, слике из мог веб сервера.
>> Зато сам овде гетНектИмаге имам.
То учитава слике са интернета, а затим га приказује на екрану.
>> Дакле, то је прилично једноставно.
Али циљ је да покажемо ви како да комбинујете ствари
из каснијих неколико недеља ЦС50 у стварном иОС апликације.
Другим речима, можда један од ствари које ћете желети да урадите
је да има иОС апликацију која може да извуче податке са интернета
и показати кориснику неке информације.
То је потпуно поента овог изворног кода овде.
>> Дакле, има много да се каже о како се то стварно иОС развој.
Постоји много лудог синтаксе да нисмо видели баш увек
као класе, шта је класа је заправо.
Ми углавном можемо да игноришемо да за сада.
>> Али приметите да смо садрже у оквиру ове разне ствари
да смо већ видели као функције које имају конкретна имена.
А када дајемо онима Функционише исправне имена
које очекују се ИОС, у ствари ово изгледа мало магичан.
Али кад створи иОС апликација, ту
су конкретна имена функција која су позвани од стране самог телефона
док апликација учитава да покуша да створи процес који заправо
води своју пријаву.
Дакле, опет, има много ствари које сам морају да занемаре овде, како би нас
да причам о томе конкретно.
Али ја вам и да погледате можда друга иПхоне семинара, али и неке
у упутствима онлајн која раде много бољи посао описујући
специфичне информације.
>> Али можемо да видимо неколико ствари које су занимљиви из кода овде.
Обратите пажњу да имамо ако изјаве.
Узгред, један важан ствар ако изјавама
је да су заграде око Логички израз су опциони.
Али великих заграда нису опција, без обзира колико мало или много линија кода
имате у иф.
Не можете имати ако изјава без заграда у Свифт.
>> И ово је, добро, некако глупо.
Али има историјске разлоге за то.
Требало би да те спаси од себе.
Овако, на пример, не можете елиминисати витичасте око које
ако изјава.
Они су у ствари обавезна.
Зато сам вам и да погледај ово.
Али постоји још један изгради које желим
да вам покажем о Свифт да је ново за Свифт 2.0 поређењу
на старије верзије Свифт, што је следећи.
Да видимо где сам га ставио овде?
>> Дакле, у овој функцији зове фетцхЈСОН, ова функција
је одговоран за повлачење тог ЈСОН филе са УРЛ који Десило се
да се ради на мом ЦС50 ИДЕ.
Управо сам почео Апацхе, ставио тамо мој ЈСОН фајл,
и ја сам у стању да затим повуците да података са Интернета помоћу
ова функција и овај УРЛ, која је обезбеђена од стране телефона.
То је обезбеђен од стране библиотека да користите када
радиш нешто иОС апп развој.
>> Приметимо да је ова необична Синтактичка конструкт назива стражу.
И заиста све је то у Свифт је начин провере
да неке ствари морају испуњени пред вама
наставим са остатком функције.
Тако сам могао, користећи ово опционо тип,
Могао сам пронашао УРЛ би руннинг ову функцију НСУРЛ
и складиштења да у УРЛ константа, затим провера
да видим да ли је УРЛ адреса нула, јер је требало да се врати опциони тип.
И ако је нула, онда бих одштампати грешку, а онда се врати.
>> Али, уместо тога, оно стражар летс нас урадите јесте да врло ствар,
али осигурати да је стварно случај да урл
је правилно постављена од стране НСУРЛ.
А ако јесте, онда је прескаче ово, и то
ће вам омогућити да наставите са урл пошто је дефинисана.
Али, ако је случај да УРЛ адреса није правилно дефинисана,
Ако ова функција враћа грешку или неки други неочекивано ствар
заиста дође, тај стражар конструкт нам омогућава да онда излаз ту грешку
и врати одмах.
Да?
>> ПУБЛИКА: Тако некако Као иф онда друго?
Дан Армендариз: Мало је Лике Ан ако онда друго, да,
осим да је ово урл је тада дефинисан за све испод тога.
Ако прође овај стражу, а затим га ће заправо бити испуњен подацима
употребљиви у преосталих изворни код у своју функцију.
Дакле, претпостављам да ћеш старт то сее тхис стражара као добро.
И будите свесни тога.
>> Дакле, само гледајући у неколико других ствари, ово овде је шта,
Шта мислиш, само на основу чега смо причали раније?
>> ПУБЛИКА: Мислиш да ће покренути на листи?
>> Дан Армендариз: То је близу.
Ово је функција да смо дефинисање.
И ми смо ту функцију уноса као аргумент за ту функцију овде.
>> ПУБЛИКА: [неразумљиво] ако не нула.
Дакле, то је у реду, зар не?
>> Дан Армендариз: Ако грешка није нула, тако да је-- тако да морам да се крећете.
Па, хајде да видимо, не могу стварно дођите на десно овде.
Грешка је аргумент који се прошло овом анонимном функцију.
Ово је анонимна функција.
Она нема име.
Али ми прихватамо ово троје аргументи, подаци, одговор, и грешка.
И то ће да се врате неважећим, тако то неће ништа да се врате.
А ово је садржај за ту функцију.
И онда имамо приступ унутар које функција за сваки од ових аргумената.
>> Дакле, то је вихор Обилазак језика.
Али надам се са овим, надам се како сте се
поглед на неке од туторијала специфични за иОС развој са Свифт,
Посебно ако одете на Аппле Девелопер Веб паге--
они имају доста стварно добар Упутства за почетак.
Али надам се само овај час говори о синтакси сама дала
сте довољно да почнете са тим.
>> Ми ћемо постављати све ове извора Код на сајту семинара
у најкраћем могућем року, а такође и слајдова тако да имате референцу за све оне.
Али сретно са својим пројектима.
И хвала вам свима што сте дошли.
>> [АППЛАУСЕ]