[MUZIKO Ludante] DAN AMRMENDARIZ: Everyone, bonvenigi al la CS50 seminario, iOS App Disvolviĝo kun Swift. Mi estas Dan Armendáriz, kaj mi estas preceptor de komputiko tie en Harvard. Kaj la sekva horo tuj estos ventego turneo de tanta havajxoj pri tiu temo kiel ni povas persvadi. Mi afiŝos ĉiujn la fontkodo ke vi vidos hodiaŭ rete. Ni eble ne povos fakte transiru ĉio ke mi estas, ke mi estas montrante vin en tiu horo. Sed almenaŭ espereble tra la komentoj de la fontkodo, vi povos provi elkompreni ĝuste okazas por tiuj aferoj ke ni ne tute atingi. Totala, la strukturo de hodiaŭa diskuto estos kiel sekvas. Ni komencos ekstere faranta kelkajn bazajn sintakso kun la Swift lingvo, iro en iuj de la pli progresintaj sintakso de la Swift lingvo. Pro la lingvo estas vere moderna kaj ĝi havas multajn alta nivelo trajtoj, aĵoj kiujn ni havas ne vidita en C laŭlonge CS50, aŭ eĉ kelkaj la aliaj lingvoj ke ni komencis uzante en CS50 kiel PHP, Do mi estas iranta devi provi enkonduki ankaŭ iuj temoj kiuj rilatas al pli alta nivelo lingvoj ke vi ne vidos en profundo en CS50, sed vi vidos en postaj komputiko klasoj. Do ĝi estas tuj estos pakitaj horo. Kaj bonvolu permesi min scii se vi havas demandojn. Do se vi estas interesata farinte disvolviĝo kun Swift, aŭ vere ajna IOS app disvolviĝo, ekzistas kelkaj postuloj. Unue, vi devas esti uzanta Mac, kurante en la ekzemploj ke ni tuj estos uzante hodiaŭ, relative nova versio de VIN X. En tiu kazo, Mi kuras X 10.5. Vi povas kuri 10.11 se vi volas. Sed cxion vi tuj vidi estas engaĝante Xcode 7 kaj poste, kiu havas la lastan version de Swift, kiu estas Swift 2.0. Tiu estas fakte bela grava distingo. Multa la sintakso havas ŝanĝis bela signife en iuj kazoj de Swift 1.0, kiu estis liberigita lastan jaron, Swift 2.0, kiu nur elvenis tiu falo. Do ni tuj montros Swift 2.0. Multa la aferoj vi serĉi rete kiam vi provas akiri aldonan informoj pri vario de aferoj, vi eble volas eksplicite serĉi Swift 2 anstataŭ nura klara malnova Swift fari certe ke vi akiras la sintakso korekta. Fakte, ĉi tiu estas ĝenerale vera. Ekzistas rapida kvanto de evoluo okazanta en la Swift lingvo ekde Apple liberigis ĝin, mi pensas kion, jam pasis iom pli ol jaro nun. Kaj aĵoj ŝanĝis drame en tiu tempo. Kaj do ne estos frustrita se, kiam vi serĉas ĉirkaŭe por temoj sur Swift aŭ kiel plenumi io uzante iuj ekzemplo kodo aŭ ion ke ĝi ne reale labori sur Swift 2.0. Certiĝu vi serĉas specife por tiu versio provi minimumigi efikojn de malsamaj versioj kaj tiuj specoj de aferoj. Mi provos atentigi nur iuj aferoj ke estas malsamaj al la malnovaj versioj. Sed estas io rigardi ekstere por. Ke estas probable tuj estos unu el la plej grandaj kapdoloroj ke vi havos kun Swift estas trovanta Ekzemple kodo kiu estas pli malnova, eĉ ĵus de kelkaj monatoj, klopodante uzi ĝin en viaj pli moderna projekto. Kaj ĝi tutsimple ne funkcias. Vi fariĝas kompililo eraroj, sintakso eraroj, ĉiaj frenezaj aĵoj. Do simple estu pacienca kun ke, kaj vi espereble havi sufiĉe bela sperto kun Swift entute. Nun vi povas reale join-- kaj mi esperas ni fakte ankoraŭ havas ĉi tiun year-- CS 50 Apple app disvolviĝo teamo, kiu permesos instali ajna apps kiun vi kreas en via iOS aparatoj. Do rigardu ĉi URL se vi interesas fari tion. Do nur kelkaj aferojn pri Swift mem. Estas kompilita lingvo. Sed vi vidos ke iu de la trajtoj kiujn ni uzas permesas uzi ankaŭ en iom kiel interpretita vojo ankaŭ. Multa la sintakso estas pruntita de C. Ĝi estas bazita kaj skribita en C. Kaj do ni vidos ke ekzistas multe de takeaways de via ekzistanta scio de C ke ni povas haveno Swift. Sed estas aĵoj kiuj fari ĝin tre malsama de C. Ĝi estas tre forte tajpita. Ekzistas aŭtomatan prizorgadon de memoro. Vi ne tuj devas uzi malloc aŭ libera ie. Ĝi estas desegnita por ĝeneraleco. Do alivorte, vi povas uzi ĝin en ĉiaj kuntekstoj, de Apple Watch por iPhone tuta vojo supren al OS X, kaj eĉ kelkaj serviloj, eĉ iuj scripting. Sed ni vidos, ke la subteno por scripting ne estas tre tie ankoraŭ kiel ĝi estas en aliaj lingvoj. Do plej verŝajna vi estos uzanta ĉi ekskluzive por disvolviĝo sur via Mac aŭ via iPhone. Kaj ĝi havas multajn modernajn trajtojn. Kaj multe da tiuj aferoj estas aĵoj ke ni tuj provos alparoli hodiaŭ, sed ankaŭ niaj topikoj kiuj sincere, ni povas dediĉi tutan kursoj. Fakte, CS 51, kio estas proponis sekva semestro, centras tre sur ĉi tiuj temoj kiu estas priskribitaj sube. Do vi povas elspezi tutan semestro kompreni tion. Sed ni tuj provos akiri tra ili almenaŭ sufiĉe ke vi povas kompreni kio estas daŭriganta kiam vi rigardas ĉe Swift programo kaj povos pirati vian vojon tra ĝi por la fina projekto. Nun unu el la plej bonaj manieroj kiuj vi povas ricevi aldonan informon sur ĉi estas sincere ĵus tra Apple provizis dokumentadon por Swift. Ekzistas multe de APIs ke estas haveblaj. Kaj tiu estas bona hejmbazo por vi serĉi, specifaj aferoj, ke vi volas fari kun API engaĝante iOS. Se vi volas uzi la ĉambron por Ekzemple, vi povas komenci rigardante tien, kaj ankaŭ uzi Google kaj Stack Overflow kiel vi farus normale. Demandojn sur tiu antaŭ ni salti bone? Bone. Ni movi sur. Do unue, mi havas numeron de ekzemplo dosieroj. Kaj mi tuj provi paŝi tra ili relative rapide. Jen la Hello World dosiero por Swift. Ĝi estas tre simpla. Tie estas vojo pli komentoj ol ekzistas fakta kodo. Rimarku la reala kodo estas ĉe la tre fundo sur linio 14. Ĝi diras presaĵo. Kaj tiam ĝi estas funkcio alvokon. Ni pasante en ĝin ŝnuro nomita Saluton CS50. Rimarku ke estas neniu punktokomojn. Rimarku ke ne estas int main. Ekzistas neniu el la cruft ke ni havis kun C. Kiam ni uzas Swift tiamaniere, kiu estas ĝuste skribita en teksta dosiero kaj stokita sur mia komputilo, tiam Mi povas kompili ĝin kaj ruli ĝin. Rimarku, ke ĉi tie mi estas ne uzante la CS50 IDE. Tiu supozas ke mi estas kurante kaj ke mi estas sur OS X, kaj ke mi Xcode jam instalita sur tiu maŝino en ordo por tiu efektive funkcio. Sed tio estas nur normala teksto dosiero ke ni povas tiam kompili kaj redakti. Do ni vidu kiel ĉi efektive funkcias. Kio se mi volas kompili ĝin? swiftc 1.swift. Post unu du momentoj, ĝi vidos, ke ni havas nun kompilis ĉi en dosieron nomitan 1. Kaj nun ni presita nia CS50, niaj Saluton Mondo apliko prefere. Rimarku unu alia aĵo kiel bone estas ke defaŭlte, ni ne devis enigo a / n presi novan linion. Defaŭlte, la presita funkcio en Swift presos nova linio por vi. Vi povas pasi laŭvola aldonan parametro sciigi ne fari tion. Sed Google por pli informo sur tio. Defaŭlte, ĝi faros la presaĵo linio. Bone, do ni pluiru tiam al iuj aliaj aferoj. Do kiel ni povas fakte difini variablojn? Ni povas fari ke estas uzanta unu el du metodoj. Kaj kiu mi volas rakonti al vi pri unua estas ĉi let difino. Kaj tio estas grava ĉar efike kion ni faras estas difinanta konstanta. Ni iras al krei variablon, aŭ prefere konstanta nomita nomo, havigi al ĝi iun data-- en Tiam la ŝnuro Dan. Sed uzante tiun let ŝlosilvorto, ni diras ke ĉi variable-- aŭ denove constant-- vokis nomo neniam tuj estos ŝanĝitaj. Ĝi okazas esti neŝanĝeblaj ĉie la daŭro de tiu ĉi programo aŭ tra la daŭro de la kunteksto ke tiu variablo estas havebla. Tiu estas vere grava ke kiam vi havas iujn datumojn kiuj ne tuj ŝanĝos en via programo, kaj vi vidos diversajn ekzemplojn pri kiam ni volas uzi lasu kontre la alia sintakso, ĝi estas grava ke vi uzas lasu laŭeble ĉar tiu novaĵo la lingvo kiu ĝi estas Ne tuj estos ŝanĝita, kaj ĝi efektive povas elfari multajn optimizations plibonigi la rapidon kaj la sekureco de via programo. Kaj apud sekureco, mi diras tion, ne lasu ĝi kraŝo kun freneza eraroj ke ni estu kutimis vidi en C. Tiam ni povas uzi kordoj interpolo encapsular ĉi ene ŝnuro. Do ni povas vidi en ĉi print line, presi saluton, kaj tiam uzanta backslash malfermita parens, kaj tiam la nomo de mia variablo, tiukaze konstanto, fermi la parentezoj. Mi esence tiam metante la enhavo de ĉi tiu variablo nomita nomon ene de la kordo kaj tiam presi la rezulton tie. Ekzistas unu alia ŝanĝo al la dosiero kiu estas kiu havas, ĉe la plejsupro, metis en shebang linion, kiu resume nur precizigas ke mi volas uzi la Swift interpretisto, kiu signifas ke mi ne plu devas kompili ĉi aparta programo. Mi povas nur kuri ĝin kiel lia propra skripto. Sed tio estas, en tiu kazo, malantaŭ la scenoj estanta kompilita kaj tiam esti kuro. Estas nur nevidebla al ni. Bone, do ni pluiru. Do tie estas iom de trompo ke nur okazita antaŭe. Mi montris al vi, ke mi povus difini konstanta. Kaj mi povus havigi iujn datumojn por fari ĝin. Sed en ĉi tiu kazo, rimarki ke mi ne fakte specifi la tipon de datumoj ke estas. Kaj tio estas ĉar la tradukilo, Swift povas konkludi la tipon de datumoj bazita nur sur la datumoj kiujn mi metas en ĝin. Ĉar ĝi scias ke per pritaksanta ĉi ŝanĝiĝema dekstra tie, ĉi tiu datumo dekstra tie, ĝi scias ke ĝi estas ĉeno. Do tiu konstanta nomo estas do tuj estos ĉeno ankaŭ. Sed ni povas ankaŭ esti eksplicita pri la tipo kiu estas ni tuj uzos por konstantoj aŭ variabloj uzante tiun sintakson instead-- lasu nomon dupunkto String egalas Dan, kiu en ĉi kazo signifas ni estas tuj difini konstanta nomata nomo. Ĝi okazas al esti de tipo String. Kaj la valoro tuj estos Dan. Nun la alia vojo ni povas krei variables-- kaj tio estas ŝanĝebla variabloj, kiuj signifas, ke ni estas, fakte, irante ŝanĝi iliajn enhavojn iam en la daŭro de la kunteksto ke tiu variablo estas defined-- ni uzi la var ŝlosilvorto anstataŭ lasu. Sed denove, implicite, krom se vi scias ke vi bezonas manipuli tiun datumon, provu uzi lasu por agado plibonigoj. En tiu kazo, mi povas tiam specifi la tipon de datumoj ke ni atendas esti interne de tiu nova variablo nomata etikedo. Ĝi tuj estos ĉeno. Kaj ni tuj poste concatenate du kordoj kune, la kordo saluton, kaj la kordoj reprezentita de la variablo, aŭ prefere la konstanta nomo. Do tiu estas bela ĉar ĉi Estas iom PHP same kiel en kiuj ni havas tre facila ĉenon kunmeto. Ni ne devas aŭtomate uzi ajnan specon de memoro mastrumado pliigi la grandecon kaj fari omnaspeca amuzajn aferojn tie. Tio funkcias kiel ni estus reale atendi. Bone, demandojn en ĉi? Nun la alia kialo ke ni bezonas vi havas la kapablon povi difini kio tipo de datumoj variabloj estas Estas ĉar kelkfoje ne volas pravalorizi variabloj kun kelkaj datumoj ĉe la punkto de difino. Do en ĉi tiu kazo, ni diru ke mi volas komenci inputting kelkaj gradoj enen lernojaro libron. Nu mi scias, ke unu el la variabloj, ke mi volas esti tuj esti mutables lernojaro. Kaj ni ankaŭ scias ke ni volas esti entjero. Sed eble ni ankoraux ne havas tiun gradon havebla. En Swift, vi devas difini la tipon de datumoj kiu estas asociita kun variablo aŭ lasu konstanta Antaŭ vi povas reale uzi tiun variablon. Ĉar ĝi estas forte tajpitaj, vi devas asocii tipo kun ĉi tiuj variabloj. Do en tiu kazo, se mi ne konvene pravalorizitaj la unua kun iu valoro, tiam mi devas diri al Swift kio Mi atendas la datumtipo esti. Kaj ĝi tuj restos tiu sama datumtipo laŭlonge de la historio de tiu programo. Nun vi povus esti tentata kiam Mi kreis ĉi lernojaro ŝanĝiĝema kaj provizis ĝin entjero 100, nun se mi volas provi concatenate ŝnureto kun tiu entjero, eble estus tentita ankoraŭ uzi ke kordoj kunmeto operatoro kiel ni faris nur kelkaj linioj antauxe. Sed bedaŭrinde, ĉi efektive ne labori, ĉar vi estas esence elfarante operacio sur du malsamaj tipoj. Nun tio estas tre malsama de aliaj lingvoj kiel PHP kiu vere loosey Goosey kun ilia speco de tipoj. Ili estas nur ŝatas, jes, ajn, mi ne zorgas. Nur donu al mi unu tipo, kaj eble mi faros la ĝustan aferon. En tiu kazo, Swift estas ekstreme strikta pri la tipoj ke vi estas kontraktanta kun. Ĉi sumado operatoro aŭ kunmeto operatoro havas esence kelkaj malsamaj eblaj ebloj. Vi povas fari sumado kun entjeroj, aŭ vi povas fari ĉenon kunmeto, kaj eble iuj aliaj aĵoj ankaŭ. Sed se tiu operatoro ne rekonas kio estas ambaŭflanke de ĝi, aŭ prefere la kombino de tiuj du tipoj, estas ne kio ĝi estas atendanta, tiam tuj kaŭzi misfunkciadon. Do en ĉi tiu kazo, kion ĝi signifas havi ĉenon plus entjero? Nu en la kunteksto de tiu, ni probable volas fari ĉenon kunmeto operacio. Sed kompreneble la komputilo ne havas tian kuntekston. Kaj tial ni devas provizi ke aldonan informon lasi ŝin scii kio estas ke ni volas fari. Do alivorte, la fakto ke Swift estas forte tajpitaj signifas vi devas fari Iomete de plia laboro por akiri ĝin funkcii la maniero ke vi dezirus. Sed kiel rezulto, ĝi estas pli sekura. Kaj unufoje vi havas prenu konsideri tiujn tipojn, aferoj nur sincere komenci labori sufiĉe bone. Do en ĉi tiu kazo, ni tiam farus elfari ĉenon kunmeto per eksplicite ĵetantajn la entjeraj al ŝnuro envolviendo en ĉi ĉefurbo S String funkcio, kaj tiam uzante la ĉenon kunmeto operatoro modifi nian etikedo ŝanĝiĝema, kaj tiam presi ĝin. Ĝis nun, tiel bona? Bone, ni pluiru. Nun estas vario de datumoj tipoj kiujn ni povas uzi en Swift. Kiel vi kutimiĝis al, ni povas krei mutables tabelo. Kaj tiu tabelo povas nur enhavas ununuran tipon. Do en ĉi tiu kazo, ni tuj kreos a mutables arrays de entjeroj, kio ni nomos gradoj, kaj ni povos stoki ke en tiu kvadrata krampo formato kiel vi kreskis alkutimiĝis al en vario de aliaj lingvoj. Sed rimarki ke tie ni estas difini kelkajn aferojn. gradoj estas mutables variable-- ni ne uzas la Let ŝlosilvorto. Do tio signifas ke ni povas tiam redakti la enhavo de ĉi tiu tabelo. Ĝi estas de tipo array Mez, kaj ni povas diri ke bazitaj sur tiuj rektaj krampoj tie. Nun unu el la agrablaj aferoj pri tio estas ke ni havas aliron al multaj aldona informo pri la tabelo nur uzante kelkaj simplaj skalara skribmaniero. Do ekzemple, grades.count nin havigas la nombro de eroj kiuj ekzistas en tiu tabelo, kiun ni tiam povas aliri bela facile simple uzante ke skalara skribmaniero. Se vi volas aldoni pliajn erojn al tiu tabelo, vi ne povas plenumi la PHP stilo kie vi simple eksplicite difini, je donita indekso, iu valoro ke vi volas enmeti. Anstataŭe, uzu la append metodon en la tabelo tipo al append ke eron, 95, al tiu listo. Do nun tiu tabelo havas la jenan contents-- 100, 0, 90, 85. Kaj nun ni almuntita 95 por ke tiel. Estas aliaj manieroj ni povas append aferojn. Vi povas fakte uzi a sumado operatoro, kiu estos interpretita kiel tabelo append operacio. Kaj vi tiam povas append alian tabelo, kies enhavo estas 70 kaj 80, al tiu tabelo. Do nun ni havas la enhavoj en tiu variablo grades-- 100, 0, 90, 85, 95, 70, kaj 80. Tiu estas nur belan sintaksa sukero kiu Swift disponigas al ni. Do se ni volas elprenu la kvalifikojn, ni eble tuj volas persisti super ĉiu ero en ĉi buklo. Kaj ni havas, en Swift, la nocio de a por buklo kiel atendite. Sed la vojo kiun ni indikos gamo estas iomete malsamaj. Do en ĉi tiu kazo, al Resume ĉio, ni tuj krei portempan variablo nomata sumo por ke ni subteni tiun grafo. Kaj rimarki nia por buklo konstruo tie. Por indekso en 0 ..