[Music kucheza] DAN AMRMENDARIZ: Kila mtu, kuwakaribisha kwa CS50 semina hiyo, iOS App Maendeleo na Swift. Mimi nina Dan Armendáriz, na mimi nina preceptor ya sayansi ya kompyuta hapa katika Harvard. Na saa ijayo ni kwenda kuwa ziara kimbunga cha mambo mengi kuhusu mada hii kama tunaweza fit. Nami baada yote ya chanzo kanuni kwamba utaona leo online. Tunaweza kuwa na uwezo wa kweli kwenda juu ya kila kitu kwamba mimi nina kwamba mimi nina kuonyesha katika saa hii. Lakini angalau hopefully kupitia maoni ya chanzo kanuni, wewe utakuwa na uwezo wa kujaribu kufikiri nini hasa kinachotokea kwa mambo hayo kwamba hatuna kabisa kupata. Kwa ujumla, muundo wa Majadiliano ya leo itakuwa kama ifuatavyo. Tutaweza kuanza nje kufanya baadhi ya msingi syntax kwa lugha Swift, kwenda katika baadhi ya juu zaidi syntax ya lugha Swift. Kwa sababu lugha ni kweli kisasa na ina mengi ya ngazi ya juu makala, mambo ambayo tuna si kuonekana katika C katika CS50, au hata baadhi ya lugha nyingine kwamba tumekuwa kuanza kutumia katika CS50 kama PHP, hivyo mimi ni kwenda kuwa na kujaribu kuanzisha pia baadhi ya mada ambazo ni kuhusiana na lugha ngazi za juu kwamba unaweza kuona katika kina katika CS50, lakini utaona katika baadaye sayansi ya kompyuta madarasa. Hivyo ni kwenda kuwa lenye msongamano mkubwa saa. Na tafadhali jisikie huru basi mimi kujua kama una maswali yoyote. Hivyo kama wewe ni nia kwa kufanya maendeleo pamoja Swift, au kweli yoyote iOS programu ya maendeleo, kuna wanandoa wa mahitaji. Awali ya yote, una kutumia Mac, mbio katika mifano kwamba sisi ni kwenda kuwa na kutumia leo, toleo la kipya cha OS X. Katika kesi hiyo, mimi nina mbio X 10.5. Unaweza kuwa mbio 10.11 kama unataka. Lakini kila kitu ambacho wewe ni kwenda ona ni kuwashirikisha Xcode 7 na baadaye, ambayo ina toleo la karibuni ya Swift, ambayo ni Mwepesi 2.0. Hii ni kweli pretty muhimu tofauti. Mengi ya syntax ina iliyopita pretty kiasi kikubwa katika baadhi ya kesi kutoka Swift 1.0, ambayo ilitolewa mwaka jana, kwa Swift 2.0, ambayo tu akatoka hii kuanguka. Hivyo sisi ni kwenda kuonyesha Swift 2.0. Mambo mengi ambayo wewe kutafuta online wakati wewe ni kujaribu kupata nyongeza taarifa kuhusu aina ya mambo, unaweza kutaka kupanga kutafuta Swift 2 badala ya wazi tu umri wa Swift kufanya uhakika kwamba kupata syntax sahihi. Kwa kweli, hii ni kwa ujumla kweli. Kuna kiasi ya haraka ya maendeleo kinachotokea katika lugha Swift tangu wakati huo Apple iliyotolewa yake, nadhani nini, imekuwa ni kidogo zaidi ya mwaka sasa. Na mambo yamebadilika kasi wakati huo. Na hivyo si kuwa frustrated kama, wakati wewe ni kuangalia kuzunguka kwa mada juu ya Swift au jinsi ya kutekeleza kitu kwa kutumia baadhi mfano kificho au kitu ambacho hana kweli kazi juu ya Swift 2.0. Kuhakikisha wewe ni kuangalia mahsusi kwa ajili ya toleo kwamba kujaribu kupunguza madhara ya tofauti matoleo na wale aina ya mambo. Nitajaribu kumweka nje baadhi tu ya mambo ambayo ni tofauti na matoleo ya zamani. Lakini ni kitu cha kuangalia nje kwa. Hiyo pengine ni kwenda kuwa moja ya maumivu ya kichwa kubwa kwamba utakuwa na kwa Swift ni kutafuta mfano kificho kwamba ni wakubwa, hata tu na miezi michache, kujaribu kutumia hivyo katika zaidi ya kisasa ya mradi wako. Na ni haki tu haifanyi kazi. Wewe ni kupata makosa compiler, syntax makosa, kila aina ya mambo mambo. Hivyo tu kuwa na subira na hiyo, na wewe hopefully wana uzoefu mzuri nzuri kwa ujumla Swift. Sasa unaweza kweli join-- na natumaini sisi kweli bado wana hii year-- hii CS 50 ya Apple programu timu ya maendeleo, ambayo itawawezesha kufunga programu yoyote ambayo wewe kujenga juu yako iOS. Hivyo kuchukua kuangalia URL hii ikiwa una nia ya kufanya hivyo. Hivyo michache tu ya mambo kuhusu Swift yenyewe. Ni lugha ulioandaliwa. Lakini utaona kwamba baadhi ya sifa ya kuwa sisi kutumia kuruhusu ni kutumika pia katika kidogo kama kufasiriwa kwa njia vilevile. Mengi ya syntax ni alikopa kutoka C. Ni msingi na kuandikwa katika C. Na hivyo tutaona kwamba kuna mengi ya takeaways kutokana na elimu yako zilizopo kutoka C kwamba tunaweza bandari ya Swift. Lakini kuna mambo ambayo kufanya hivyo tofauti sana na C. Ni nguvu sana typed. Kuna usimamizi wa kumbukumbu moja kwa moja. Wewe si kwenda na kutumia malloc au bure mahali popote. Ni iliyoundwa kwa ajili ujumla. Hivyo kwa maneno mengine, unaweza kutumia katika kila aina ya mazingira, kutoka Apple Watch kwa iPhone njia yote hadi OS X, na hata baadhi ya watumishi, hata baadhi ya scripting. Lakini tutaweza kuona kwamba msaada kwa ajili ya scripting sio kabisa huko bado kama ni katika lugha nyingine. Hivyo uwezekano mkubwa wewe utakuwa na kutumia hii kwa ajili tu ya maendeleo juu ya Mac yako au iPhone yako. Na ina mengi ya makala kisasa. Na mengi ya mambo haya ni mambo ambayo tunakwenda kujaribu kushughulikia leo, lakini pia mada yetu kwamba kusema ukweli, tunaweza kujishughulisha kozi nzima. Kwa kweli, CS 51, ambayo ni inayotolewa muhula ujao, inalenga mengi juu ya mada hizi kwamba ni ilivyoelezwa hapo chini. Hivyo unaweza kutumia muhula mzima kuelewa mambo haya. Lakini sisi ni kwenda kujaribu kupata njia yao angalau kutosha kwamba anaweza kuelewa nini kinachoendelea wakati ukiangalia katika mpango Swift na kuwa na uwezo wa hack njia yako kwa njia hiyo kwa mradi wa mwisho. Sasa moja ya njia bora kwamba unaweza kupata maelezo ya ziada juu ya hili ni kusema ukweli tu kupitia Apple zinazotolewa nyaraka kwa ajili ya Swift. Kuna mengi ya APIs ambayo inapatikana. Na hii ni nzuri nyumbani msingi kwa ajili yenu kwa kuangalia, mambo maalum kwamba wanataka kufanya na API kuwashirikisha iOS. Kama unataka kutumia kamera kwa mfano, unaweza kuanza kuangalia hapa, na pia kutumia Google na Stack Kufurika kama wewe ungekuwa kawaida. Maswali yoyote juu ya hii kabla ya sisi kuruka haki katika? Sawa. Hebu hoja juu. Hivyo kwanza, nina idadi ya mafaili mfano. Na mimi nina kwenda kujaribu hatua njia yao kiasi haraka. Faili hili Hello World kwa Swift. Ni rahisi sana. Kuna maoni njia zaidi kuliko kuna kanuni halisi. Taarifa kificho halisi ni katika chini sana kwenye mstari 14. Inasema magazeti. Na kisha ni kazi ya wito. Sisi ni kupita ndani yake string kuitwa Habari cs50. Taarifa kwamba hakuna semicolons. Taarifa kwamba hakuna int kuu. Kuna hakuna wa cruft kwamba tulikuwa na C. Wakati sisi ni kutumia Swift kwa njia hii, ambayo imeandikwa tu katika faili maandishi na kuhifadhiwa kwenye kompyuta yangu, kisha Siwezi kukusanya ni na kukimbia nayo. Taarifa kwamba hapa mimi nina si kwa kutumia CS50 IDE. Hii akubali kwamba mimi ni mbio na kwamba mimi nina juu ya OS X, na kwamba mimi Xcode tayari imewekwa juu ya mashine hii ili kwa hili kwa kweli kazi. Lakini hii ni kawaida ya maandishi ya faili tuweze kisha kukusanya na hariri. Basi hebu angalia jinsi hii kweli kazi. Nini kama nataka kukusanya ni? swiftc 1.swift. Baada ya muda au mbili, ni utaona kwamba tuna sasa ulioandaliwa hii katika faili inayoitwa 1. Na sasa tuna kuchapishwa CS50 yetu, Hello World yetu maombi badala. Taarifa ya jambo moja nyingine kama vizuri ni kwamba by default, hatukuwa na pembejeo a / n na magazeti mstari mpya. By default, magazeti kazi katika Swift magazeti mstari mpya kwa ajili yenu. Unaweza kupita hiari ziada parameter kuwaambia kuwa si kufanya hivyo. Lakini Google kwa maelezo zaidi juu ya hilo. By default, itakuwa kufanya mstari magazeti. Haki wote, hivyo hebu hoja juu ya kisha kwa baadhi ya mambo mengine. Hivyo ni jinsi gani sisi kweli kufafanua vigezo? Tunaweza kufanya hivyo kwa kutumia moja ya njia mbili. Na moja kwamba mimi nataka kukuambia kuhusu kwanza ni huu ufafanuzi let. Na hii ni muhimu kwa sababu kwa ufanisi nini sisi ni kufanya ni kufafanua mara kwa mara. Tunaenda kuunda kutofautiana, au tuseme mara kwa mara kuitwa jina, kutoa yake baadhi data-- katika kesi hiyo, kamba Dan. Lakini kwa kutumia let hii keyword, tunasema kwamba hii kutofautiana au tena constant-- aitwaye jina ni kamwe kwenda kubadilishwa. Ni kwenda kuwa hayabadiliki katika muda wa mpango huu au katika muda wa mazingira kuwa kwamba kutofautiana inapatikana. Hii ni kweli ni muhimu kwamba wakati una baadhi ya takwimu ambazo siyo kwenda na mabadiliko katika mpango wako, na utaona aina ya mifano kuhusu wakati tunataka kutumia basi dhidi syntax mengine, ni muhimu kwamba wewe kutumia basi popote iwezekanavyo kwa sababu notifies hii lugha kuwa ni si kwenda kubadilishwa, na ni kweli anaweza kufanya mengi ya optimizations kuboresha kasi na usalama wa programu yako. Na kwa usalama, I mean, si lazima ni ajali na mambo makosa ili tuweze kuwa wamezoea kuona katika C. Basi tunaweza kutumia kamba nyongeza katika kitabu kurejelea hii ndani ya kamba. Ili tuweze kuona katika hii magazeti line, magazeti hodi, na kisha kwa kutumia backslash wazi parens, na kisha jina la kutofautiana yangu, katika hii mara kwa mara kesi, karibu mabano. Mimi kimsingi kisha kuweka yaliyomo ya hii jina kutofautiana kuitwa ndani ya kamba na kisha uchapishaji matokeo huko. Kuna moja mabadiliko mengine na faili hili ambayo ni kwamba mimi, juu sana, kuweka katika mstari shebang, ambayo kimsingi tu bayana kwamba mimi nataka kutumia Swift mkalimani, ambayo maana yake ni kwamba mimi tena kuwa na kukusanya mpango huu hasa. Siwezi kukimbia tu ni kama Muswada yake mwenyewe. Lakini hii ni, katika kesi hii, nyuma ya pazia kuwa ulioandaliwa na kisha kuwa kukimbia. Ni tu asiyeonekana kwetu. Haki wote, hivyo hebu kuondoka. Hivyo kuna kidogo ya hila kwamba ilitokea tu kabla. Mimi ilionyesha kuwa mimi aliweza kuainisha mara kwa mara. Na mimi naweza kutoa baadhi data ya kufanya hivyo. Lakini katika kesi hii, taarifa kwamba sikuwa kweli bayana aina ya data kuwa ni. Na hiyo ndiyo sababu compiler, Swift Unaweza kudai aina ya data kwa kuzingatia tu juu ya data kwamba mimi kuweka ndani yake. Kwa sababu anajua kwamba kwa kufanya tathmini ya hii kutofautiana haki hapa, hii haki data hapa, ni anajua kwamba ni kamba. Na hivyo jina hili mara kwa mara ni kwa hiyo kwenda kuwa kamba vilevile. Lakini tunaweza pia kuwa wazi kuhusu aina hiyo ni sisi ni kwenda kutumia kwa constants au vigezo kwa kutumia syntax hii instead-- basi jina matumbo Kamba sawa na Dan, ambayo katika kesi hii ina maana tuko kwenda kufafanua mara kwa mara kuitwa jina. Ni kwenda kuwa ya aina Kamba. Na thamani ni kwenda kuwa Dan. Sasa njia nyingine ambazo tunaweza kujenga variables-- na hizi ni vigezo mutable, ambayo ina maana kwamba sisi ni, kwa kweli, kwenda kubadili yaliyomo yao wakati mwingine katika muda wa mazingira kwamba kuwa kutofautiana ni defined-- sisi kutumia var keyword badala ya basi. Lakini tena, kwa default, isipokuwa wewe kujua kwamba unahitaji kuendesha data kwamba, kujaribu kutumia basi kwa utendaji maboresho. Katika kesi hiyo, naweza kisha kutaja aina ya data kwamba tunatarajia kuwa ndani ya kutofautiana hii mpya iitwayo studio. Ni kwenda kuwa kamba. Na tunakwenda kisha concatenate masharti mawili kwa pamoja, kamba hodi, na kamba inawakilishwa na kutofautiana, au tuseme jina mara kwa mara. Hivyo hii ni nzuri kwa sababu hii ni kiasi fulani PHP kama katika kwamba sisi kuwa rahisi sana kamba concatenation. Hatuna moja kwa moja kutumia aina yoyote ya usimamizi wa kumbukumbu kuongeza ukubwa na kufanya aina yoyote ya mambo funny huko. Hii kazi kama tunataka kweli kutarajia. Haki zote, maswali yoyote juu ya hili? Sasa sababu nyingine ambazo tunahitaji una uwezo kuwa na uwezo wa kufafanua nini aina ya data vigezo ni ni kwa sababu wakati mwingine hatuna wanataka initialize vigezo pamoja na baadhi ya data katika hatua ya ufafanuzi. Hivyo katika kesi hii, hebu sema kuwa nataka kuanza inputting baadhi darasa katika kitabu daraja. Naam Najua kwamba moja ya vigezo kwamba mimi nataka kuwa ni kwenda kuwa daraja mutable. Na tunajua pia kwamba sisi unataka kuwa integer. Lakini labda tunafanya bado na kwamba daraja kutosha. Katika Swift, una kufafanua aina ya data kwamba ni kuhusishwa na kutofautiana au basi mara kwa mara kabla unaweza kweli kutumia kwamba kutofautiana. Kwa sababu ni nguvu typed, una kujiunga aina na vigezo hivi. Hivyo katika kesi hii, kama nimekuwa vizuri initialized kwanza kwa baadhi ya thamani, kisha mimi haja ya kuwaambia nini Swift Natarajia aina data kuwa. Na itakuja kubakia takwimu ambazo aina moja kipindi chote cha historia ya mpango huu. Sasa unaweza kujaribiwa kwa haraka kama I have umba hii kutofautiana daraja na zinazotolewa ni integer ya 100, sasa kama mimi wanataka kujaribu concatenate kamba na kwamba integer, kujaribiwa bado kutumia kwamba kamba concatenation operator kama tulivyofanya mistari michache tu kabla. Lakini kwa bahati mbaya, hii itakuwa kweli si kazi, kwa sababu wewe ni kimsingi kufanya operesheni juu ya aina mbili tofauti. Sasa hii ni tofauti sana na wengine lugha kama PHP ambayo ni kweli loosey goosey na aina yao ya aina. Wao ni tu kama, yeah, chochote, Sijali. Nipe tu aina moja, na labda mimi itabidi kufanya jambo sahihi. Katika kesi hiyo, Swift ni kali sana kuhusu aina kwamba wewe ni kushughulika na. Alama hii summation au concatenation operator ina kimsingi michache ya chaguzi mbalimbali iwezekanavyo. Unaweza kufanya summation kwa integers, au wewe anaweza kufanya kamba concatenation, na labda baadhi ya mambo mengine pia. Lakini kama hiyo operator haitambui kile ni upande wake, au tuseme mchanganyiko wa wale aina mbili, ni si nini ni tegemeo, kisha itakuja kusababisha kushindwa. Hivyo katika kesi hii, ni nini maana kuwa na kamba pamoja na integer? Vizuri katika mazingira ya hili, sisi pengine wanataka kufanya operesheni kamba concatenation. Lakini bila shaka kompyuta hana kwamba aina ya mazingira. Na hivyo tunahitaji kutoa habari kwamba ziada basi ni kujua nini ni kwamba tunataka kufanya. Hivyo kwa maneno mengine, ukweli kwamba Swift sana typed ina maana una kufanya kidogo ya kazi ya ziada kupata kazi njia ambayo wewe unataka. Lakini matokeo yake, ni salama. Na mara moja una kuchukua maanani wale aina, mambo kusema ukweli tu kuanza kufanya kazi pretty vizuri. Hivyo katika kesi hii, sisi kisha ingekuwa kufanya kamba concatenation na waziwazi akitoa integer kwa kamba kwa wrapping katika hii mji mkuu S Kamba kazi, na kisha kwa kutumia kamba concatenation operator kurekebisha studio yetu kutofautiana, na kisha magazeti ya nje. Hadi sasa, hivyo nzuri? Sawa, hebu kuondoka. Sasa kuna aina ya data aina kwamba tunaweza kutumia katika Swift. Kama wewe kuwa desturi ya, tunaweza kujenga safu mutable. Na kwamba safu Unaweza tu vyenye aina moja. Hivyo katika kesi hii, sisi ni kwenda kujenga arrays mutable ya integers, ambayo sisi kuwaita darasa, na sisi kuwa na uwezo kuhifadhi kwamba katika mabano mraba huu muundo kama umefanya mzima wamezoea kwa katika aina mbalimbali za lugha nyingine. Lakini taarifa kwamba hapa tuko kufafanua mambo kadhaa. darasa ni kutofautiana mutable sisi si kutumia let Keyword. Hivyo kwamba maana tunaweza kisha kurekebisha yaliyomo ya safu hii. Ni ya aina Array Int, na tunaweza kujua kwamba kulingana na haya mabano mraba hapa. Sasa ni moja ya mambo mazuri kuhusu hili ni kwamba sisi wanapata mengi ya Taarifa za ziada kuhusu safu kwa kutumia tu baadhi rahisi dot nukuu. Hivyo kwa mfano, grades.count hutoa kwetu idadi ya vitu ambazo zipo katika kwamba safu, ambayo tunaweza kisha kupata pretty urahisi tu kwa kutumia kwamba dot nukuu. Kama unataka kuongeza ziada vitu na safu hii, huwezi kufanya PHP style ambapo wewe tu wazi kufafanua, katika ripoti iliyotolewa, baadhi thamani kuwa unataka kuingiza. Badala yake, matumizi append Njia katika aina safu append kwamba bidhaa, 95, kwa orodha hii. Hivyo sasa safu hii ina zifuatazo contents-- 100, 0, 90, 85. Na sasa tumekuwa umeongezewa 95 kwa kuwa vilevile. Kuna njia nyingine tunaweza append mambo. Unaweza kweli kutumia summation operator, ambayo itakuwa kutafsiriwa kama safu append operesheni. Na unaweza kisha append nyingine safu, ambayo ina maandishi ni 70 na 80, kwa kuwa safu. Hivyo basi, tuna yaliyomo katika kutofautiana hii grades-- 100, 0, 90, 85, 95, 70, na 80. Hii ni nzuri tu kisintaksia kidogo sukari kwamba Swift hutoa kwetu. Hivyo kama tunataka kwa jumla darasa, tuko labda atataka iterate juu ya kila kitu katika kitanzi hii. Na hatuwezi kuwa, katika Swift, dhana ya kwa kitanzi kama ungependa kutarajia. Lakini njia hiyo sisi zinaonyesha mbalimbali ni tofauti kidogo. Hivyo katika kesi hii, kwa kuhitimisha kila kitu, tutaweza kwenda kujenga muda kutofautiana kuitwa kiasi ili na sisi kudumisha hesabu hii. Na taarifa kwa wetu kitanzi ujenzi hapa. Kwa ripoti katika 0 ..