Tianyu LIU: Hej, hur är det kommer alla? Och det här är iOS App programmering av objektiv c seminarium. Och mitt namn är Tianyu Liu. Jag är en Lowell junior just nu, koncentrera i datavetenskap. Så i detta seminarium är jag kommer att lära er lite om hur man gör en app. Yay, bli upphetsad för det. Så innan vi ens börjar dyka i själva programmeringssidan, låt oss bara riktigt snabbt tala om Varför kanske du vill bygga en iOS-app? Varför är iOS så häftigt? Så det första problemet, det första sak som är ganska häftigt för oss, särskilt som en CS50 student är att iOS använder Mål C. Tja, det finns ett nytt språk som kallas Swift, men vi kommer inte att använda det i detta seminarium. Om du är intresserad av Swift, där är en oberoende seminarium om det. Men Mål C är i grunden ett superset av C. Betydelse att allt du använder i C kan översättas till mål C mycket lätt. Som ni kanske ser senare, förvisso att finns det några mycket grundläggande syntax, är princip exakt samma, C och Objective C. Så, eftersom du har tagit CS50 upp så här långt, redan du vet Mål C, åtminstone 40%. Dessutom har Apple en riktigt robust API för iOS. Det finns en hel del riktigt galet saker du kan göra med det. Varav en är någon faktiskt skapat en iOS-app för styrning av bilar, som är ganska intressant. Förmodligen en helikopter är mer spännande. Men det är hur kraftfull iOS API kan vara. Och som ni kanske har listat ut just nu, stacken spill är förmodligen en av de viktigaste online-resurser tillgängliga för dig. Och goda nyheter, för varje enda problemet kan du eventuellt tänka på när du bygger din slutprojekt i Objective C, Det är sannolikt en stack overflow svar. Det är bara häftigt. I tillägg till detta, iOS är verkligen en plattform där du kan nå en enorm publiken med liten ansträngning. Det är inte som Android, där allt är ganska splittrad. Allt iOS är enhetlig. Och så länge du skapar en app för iPhone, kan du mycket enkelt port som till iPad, iPad mini eller olika iPhone storlekar. Dessa är alla riktigt bekvämt. Och det är bara riktigt bra för att imponera dina vänner. Du kan bara hålla en iPhone och berätta för din vän hey, Detta är den app jag gör. Du kan göra det för alla skrivbordsprogram, vilket är trevligt. Okej, nu ska vi faktiskt få till språket Objective C. Så varför ska vi inte börja med några riktigt grundläggande syntax. Som jag nämnde tidigare mål C Det är i grunden ett superset av C. Så en hel del grundläggande syntax är faktiskt exakt samma. Kan deklarera en variabel och addera två variabler tillsammans är precis som vi har gjort i Mario. Inget nytt här. Likaså hyresgästen för slingan och skick är också densamma. Du kan göra en for-loop precis som du har gjort i en Mario [OHÖRBAR]. Och du kan göra villkor precis som vad du har gjort i dina tidigare p-apparater. Men Mål C är inte fullständigt C, och det är något som är lite konstigt om det. Den första är att när du är gör C-programmering, oftast ringa dig innehålla och sedan ett bibliotek namn. Men i mål C du kallar det import. I grund och botten säger funktionalitet, bara olika namn. Och strängarna är faktiskt lite konstigt. Du kan se att den första sak som är lite konstigt är att du har en ganska weird-- sorry-- du har en ganska konstig NS logga hit. Och den andra saken det är lite konstigt är att du har ett snabel före faktiskt förklara strängen. Så snabel princip innebär att en sträng är inte bara en sträng, det är faktiskt ett objekt. Vi kommer att förklara som senare så inte panik om du inte förstår vad det betyder. Och skriver ut till konsolen är lite annorlunda eftersom C vi kallar printf, men i mål C kallar vi [OHÖRBAR]. Du kanske undrar vad som är det. Det är i grunden printf, bara ett annat språk. Exakt samma användning, exakt samma funktionalitet. Jo det visar sig att Mål C faktiskt har en NS prefix i nästan allt, alla grundläggande datatyp, nsstring, nsarray, nsdictionary. Orsaken är att ns faktiskt står för Next Step, vilket är ett företag som Steve Jobs har grundat, som är ett företag där språket Objective C är född. Så detta är i grunden tradition. Jag vet att det är lite konstigt, men det är Apple. Så något som är ännu konstigare än det är en funktionsdeklaration. Detta är mycket annorlunda än vad vi se i C, för här det faktiskt ser inte ut som C längre. Vad har du här-- av sätt är detta inte en punktsats, Detta är ett minustecken. Du har ett minustecken parentes ogiltiga och därefter funktionsnamnet. Låt oss bara säga att vi har hallå världen, sedan returtypen skulle vara ogiltigt eftersom vi tillbaka någonting. Vad blir jättekonstigt är att när du är som har mer än en parameter passerar in i en samma funktion som kommer att bli riktigt konstigt som visas här. Vi har ett metodnamn, kallas addInt till [OHÖRBAR] och vi passerar en parameter. Men efter det har vi mer metodnamn samtal med. Och efter med vi passerar den andra parametern. Detta är faktiskt lite konstigt, men alla dessa funktionsdeklarationer följa samma mönster som denna. Vi har ett minustecken för att börja med. Minustecknet kan vara ett plustecken ibland baserat på vilken typ av metod är det. Metod är i grunden ett annat namn för funktionen. Och vi kommer att förklara att senare när vi pratar om objektet orienterad programmering. Du anger först avkastningen typ inne parenteser, efter vilket kommer metodnamnet. Du passerar en parameter. Och om du har fler parametrar du behöver förlänga metodnamn och i princip skriva något mer här. Det kan vara vad du vill. I vårt fall är det med. Men man kan säga slutet, eller eller eller abc full bar, vad du vill. Och sedan efter att du är passerar parameter b. Detta är en riktigt konstig konvention men vi är kommer att se varför Apple ville att göra det mycket snabbt. Så hur du ringer funktionen? Ringa en funktion i mål C är också skild från C. Egentligen kräver en funktion i mål C är mer som om du pratar med någon. Här har vi själv, vilket kallas ett objekt. Du i princip berättar invända själv att säga "Hello World!" Det är så att anropa funktionen. Ett föremål och ett metodnamn kombineras med varandra. Och det är där konstiga förlängning för metodnamn verkligen kommer in i bilden. Låt oss titta på det andra exemplet. Vi definierade bara en metod som kallas addInt med bla bla bla. Så i det här fallet när du ringer att specifik [? meddelande?] det kommer att se ut som själv addInt: 10 med: 2. Det låter som engelska. Även om funktionen funktionsdeklarationen är konstigt, punkten för mål C: s metoddeklaration mönster, är att när du ringer den funktion eller metod det kommer att låta som verkliga engelska. Så det är väldigt intuitivt när du får in den. Särskilt i det här fallet, där man kan i princip se att funktionen heter sorts dokumentera självt. Du behöver inte någon mer förklaring för att se exakt vad som händer, vad exakt en parameter gör. Att gå längre än så, låt oss prata lite lite om objektorienterad programmering. Objektorienterad programmering är en av de grundläggande programmering tekniker eller mönster som är används av mål C. Mål C kallas Mål C, inte C, för en riktigt bra anledning. Så innan vi kommer in Mål C syntax, Låt oss verkligen snabbt titta på vad exakt är ett objekt. Vi har förmodligen gjort något liknande objekt innan, vilket kallas struct när du är genomföra ett träd eller en länkad lista eller [? prova. ?] Så det är i princip som en struct, men det är mycket mer kraftfull än så. Ett objekt har metoder och egenskaper. Metoder är i grunden funktioner. Fungerar i princip att en specifik för ett visst objekt. Och fastigheter är i stort sett fält som du anger i struct. Så för varje enskilt objekt vi har viss egendom som har vissa variabler som är specifika för objektet. Och vi har en del funktioner som är också specifika för objektet. Och funktionerna kallas metoder och variablerna kallas egenskaper. Det är bara ett fantasinamn. Medan du faktiskt varenda vy du ser när du öppnar en iOS-app, låt oss bara säga Twitter eller Facebook, varenda vy du ser är ett objekt. Och även hela app är ett föremål till att börja med. Mycket intressant koncept. Och varför vill vi objektet orienterad programmering? Så du kan tänka dig att när du program det blir ganska komplicerat. Låt oss bara säga när du är genomföra schackbräde, logiken kommer att vara mycket komplicerat. Du har 36 olika bitar, så att om man vill skriva logik för alla 36 olika bitar i schack, det kommer att bli en hel del olika funktioner och variabler. Det är en massa problem. Och förmodligen du ska skriva ett annan metod eller annan funktion för varje bit för att exakt kontrollera vad de gör. Men om du gör objektorienterad programmering, alla dessa bitar kan abstraheras in ett enda objekt. Och föremålet kommer att ha några vanliga egenskaper, såsom vilken typ av pjäs är det? Vilken färg är det? Hur kan det röra sig? Och på det sättet du har kraftigt förenklat logiken av den. Så det är bara ett riktigt bra sätt att göra komplicerade program, och hierarkiska relationer inom programmet, mycket enkelt. Som vi kommer att se varför mycket snabbt när vi faktiskt gör programming-- när vi är faktiskt gör en S-kod programmering session senare. Väl i tillägg till detta, objektorienterad programmering är bara mycket roligt. Du fick att designa din egen objektet. Du måste utforma vad gör det ser ut som själv. Det finns inget rätt svar på det. Och det är helt intressant. Så i objektorienterad programmering, två grundläggande begrepp blir klass och instans. En klass är i grunden en mall för objektet. Och ett exempel är i grunden ett specifikt objekt. Låt oss bara säga att du gör en cookie. I det här fallet, varenda cookien du faktiskt sluta med kommer att bli ett föremål. Men cookie plattan som du använder för att baka alla cookies kommer att vara en klass. En klass är i grunden en mall. Och instansen kommer att vara en specifik objekt som skapats av den klassen. Och en instans skapas baserad på klassdeklarationen, som vi kommer att se i senare diabilder. Så låt oss faktiskt göra ett riktigt snabbt exempel [OHÖRBAR]. Låt oss säga att vi förklara ett föremål för en katt. Objektet bör have-- katten klassen bör har vissa egenskaper och metoder. Vilken typ av egenskaper bör de klass have-- ska katten ha? Till exempel, färg, ålder och ras, de som kommer att vara variabler som är specifika för varje katt. Och de är några saker som vi använder för att beskriva en katt. Vilken typ av metod, eller vad kan en katt göra? Några snabba exempel skulle vara chase mus, äta fisk eller bara jamar. Detta är en riktigt snabb exempel på katt klass. Och ett riktigt specifik kattobjekt kommer att vara en katt där vi anger färg, ålder och ras. I det fallet, är vårt objekt inte längre en klass längre. Vi kopierar mallen från klassen och vi specificera varje specifik information till det specifika objektet att göra det oberoende. Och när du ringer en metod i ett objekt, du bara ringa mjau på objektet, vilket är katten som du just skapade. Förmodligen kommer du att skriva ut något som "Hello World! Meow. " Ganska söt. Okej, låt oss bara komma in i några detaljer och se vad exakt gör att översätta till att iOS-programmering. Så i iOS programmering varenda klass kommer att genomföras i två filer. En fil är här, vilket kallas gränssnittet. En annan fil är här, vilket kallas genomförande. Typiskt gränssnittet kommer att ha extension.h som vi har sett i C-bibliotek. Och genomförande filen är kommer att ha extension.n. Det är lite konstigt. Men .N betyder faktiskt .c, det finns ingen grundläggande skillnad mellan dem två. Så i det här fallet, kan vi se att vi är förklara gränssnitt, Cat: objektet. Det kallas arv. Vi är i princip ärva katt klass från objektklassen. Så varje egendom och metod som var tidigare definierad i objektklass kommer automatiskt att definieras i en katt klass samt. Utöver detta, definierar vi färg, ras och ålder, tre variabler. Det ser faktiskt ut som något du har gjort tidigare. Det ser ut som struct. Det är i grunden syntaxen för struct deklaration, och det är helt korrekt. Och eftersom jag nämnde tidigare, skillnaden en struct och ett föremål, en av de grundläggande skillnader är att ett objekt har metoden, medan en struct har endast variabler. Så förutom de fastigheter eller variabler som vi har skapat för objektet, vi anger någon metod. Låt oss bara säga här har vi två metoder, en är mjau, en annan är jakten mus. Vi vill nog vara passerar en parameter utifrån vår tidigare metod deklaration mönster. Du vill antagligen vara passerar en mus. Och du kommer förmodligen vill att returnera en bool betecknar Om din katt har framgångsrikt fångade musen eller inte. Detta är gränssnittet, men vi kan se att gränssnittet faktiskt inte göra någonting. Den berättar bara ett program vad exists-- vad som finns i katt klassen. Så för att den program för att göra något, vi behöver ha implementeringsfiler. Så här är det första vi gör uppenbar vi importerar gränssnittet. Efter att vi importerar gränssnittet, vi definierar metoden. Låt oss bara säga här mjau skulle bara skriva ut "Hello World!" till konsolen. Och efter genomförandet fil, vi ganska mycket gjort. Detta är i grunden en klass deklaration för en klass. Så nu är frågan blir, hur gör du deklarerar en variabel? Sättet du använder en klass för att skapa en objekt i mål C har skrivits här. Du först ange att detta är en katt pekare, eftersom varje objekt i mål C slutligen implementeras som en pekare. Och du kallar klassen, kalla dem som Alloc, vilket egentligen malloc, berätta vilket operativsystem du behöver lite minnesutrymme för det här objektet. Efter att du har ett objekt redan och du bara initiera den. Detta är bara konvention. Jag vet att det är är lite konstigt, men detta är faktiskt hur Apple gör saker. Tilldela fastigheter faktiskt ganska enkelt. Det är mycket lik vad du gör när du tilldela vissa specifika fält inuti struct. Du måste bara variabeln namn, fastighetsnamnet, och tilldela ett specifikt värde till den. Och anropa en metod är mycket lika. Den anropar en metod är i princip vad jag pratar om för att ringa någon metod i mål C. Du passerar ett objekt, i detta fall det kommer att bli myCat, och du passerar metodnamnet. Som om du pratar med objektet, myCat, som du bör jamar. Det är ganska intressant. Efter detta finns det en viktigare design mönster att vi måste prata om innan du hämtar till verkliga S-kod. Denna design mönster kallas händelsestyrd programmering. Detta är också förmodligen en av de mest grundläggande idéerna i iOS programmering. Så du antagligen inte vet vad exakt är händelsestyrd programmering, men det är inte riktigt så skrämmande. Jo faktiskt, har du redan gjort det förut. Detta är en av de linjer som du har förmodligen redan skrivit i den sista [OHÖRBAR] av CS50, google.maps.event.addListener (markör, "Klick", function () {}) :. Genom att ringa denna linje är du huvudsak träffande datorn att när händelsen kallas "Klicka" händer på markör, Använd denna funktion. Detta skiljer sig mycket från vad du gör i mario.c. I mario.c du bara kör programmet gång, det ger dig en utgång, och du är klar. Dessa är ungefär som One Shot program. Händelsestyrda program är väldigt, väldigt annorlunda. Låt oss föreställa oss, om Facebook är en en shot program är det inte riktigt bra. Du går bara till Facebook en gång och det är gjort. Det ger dig några utdata och du fick aldrig tillbaka den. Du fick aldrig något mer. Så här, särskilt mönstret vi använder är händelsedriven, så att varje funktion kommer fångas baserat på vad händelse har hänt. Till exempel, om vi har en knapp och vi anger att när den knappen klickas, anropa funktionen heter "Hello World!" På så sätt kan vi verkligen hantera funktionskretsen strömma i en mycket flexibelt sätt. Användaren kan göra eller ring en funktion som redan kallats. Den är helt baserat på vad användarna gör. Så vi kan se att detta är faktiskt mycket bättre än mario.c. Och goda nyheten är att det är faktiskt inte ett nytt koncept. Ni har redan gjort att i det sista problemet inställd. Så i mål C finns tre olika diagram för händelsestyrd programmering. Det första diagrammet är kallad mål handling, där du binda en knapp tryck med någon funktion. Låt oss bara säga, när du klickar på vissa knapp, du kallar någon funktion. Detta är mycket enkelt mål åtgärd. Den andra är faktiskt den svåraste, det kallas delegationen om protokollet. Vi kommer att förklara att i detalj senare. Och den tredje vägen är anmälan. Detta är faktiskt inte mycket viktigt så långt vi är berörda, eftersom chansen att du kommer att använda anmälan i ditt slutprojekt är ganska låg. Så vi kommer att hoppa över den delen. Och vi kommer att dyka i delegationen protokollet. Så vad exakt är ett protokoll? Eller vad är egentligen en delegation? Låt oss tala om protokoll till att börja med. Protokoll är ingenting annat än händelser. Men dessa händelser ges till du av Apple att börja med. Till exempel, jag är inte helt säker på hur många av er killar använder Apples original App post eller kontakt, men varje gång du rulla tabell och tryck på specifika cell på bordet, är att en händelse. Och om du vill göra händelsen själv, det är faktiskt lite svårt. Så Apple har med tanke på att även för dig så att du bara direkt kan använda händelsen att göra något på egen hand. Protokoll är faktiskt riktigt, riktigt stor utsträckning används i mål C. Väl i Faktum är att varje enskild app har något fångade app delegat. Inuti känslig är alla protokoll för lastning appen. Låt oss bara säga att det är en händelse för app gjorde belastning. Så vad ska hända efter att du har skapat en app, när du öppnar appen, när du stänger app, eller efter du sätter iPhone för att sova. Dessa är alla händelser som har redan givits till dig. Och ursprungligen inuti dessa partiklar blir det ingen genomförande. Apple sa ju att denna funktion kommer att hända när någon händelse inträffar, men vad du gör med det Funktionen är helt upp till dig. Delegationen är i grunden träffande klassen att du ska hantera dessa protokoll. Det är lite förvirrande, men det kommer att bli mycket tydligare när vi gör S-koder i aktion. Delegationen för protokollet är faktiskt en mycket robust mekanism i den meningen att om vi gör delegering till en viss klass, Vi kan i huvudsak hantera alla typer av evenemang använder någon klass vi har, mycket praktiskt verktyg. Så en snabbt exempel för delegationen om protokoll kommer att vara vad jag just pratade om. Detta protokoll specifikt kallas Tableview [OHÖRBAR] väljer roll på [? index?] [? förflutna. ?] Så detta en händelse som skulle fångas när du faktiskt peka på en specifik cell i din Tableview, låt oss bara säga i din e-post eller i din kontaktlista app. Inuti en funktion fanns ursprungligen att göra ingenting. Funktionen inte göra något som standard. Men du kan ange vad funktionen gör, med tanke på vad du vill ha ut av din app. Mycket praktiskt verktyg. Och med allt detta sagt, jag i princip täcka en del mycket grundläggande syntax och grundläggande koncept för mål C programmering, och vi kan göra lite s kod. Mycket mer spännande. Så s kod är faktiskt en lite överväldigande när du öppnar det för första gången. En snabb anteckning, så om du vill göra iOS utveckling, Jag rekommenderar starkt att du har en Mac. Eftersom att göra iOS utveckling Windows är riktigt, riktigt hårt. Det är genomförbart, men det är verkligen svårt. Och du definitivt göra inte vill använda g redigera. Så i s-kod vi har flera olika områden. När du först öppnar s kod kommer du att se ett navigeringsområdet, som i princip visar alla filer som är i det aktuella projektet. Du har ett verktygsfält område, vilket är i grunden hantera vyer, eller någon liten snabb verktyg om s själva koden. Och detta är den verkliga redaktör området. Detta område är mycket lik g redigera, men mycket bättre än g redigera. Och i denna rätt område, är kallas tvättstuga. Området blir verkligen praktiskt när du skapar gränssnitt eller specificera några snabba inställningar för din app. Och det sista området är felsökning. Området innehåller konsolen. Så när du säger printf, eller nslog i vårt fall, alla dina resultat är kommer att skrivas här. Okej? Jag antar att vi kan verkligen snabbt göra ett exempel för iOS programmering. Och låt oss faktiskt öppna upp er kod. Så varje gång du öppnar upp s kod, är det kommer att visa upp något liknande. Det kommer att fråga dig vad vill du göra? Vill du starta något slumpmässigt, en lekplats, i princip du kan bara testa kod utan faktiskt bestämmer sig för någon app. Vill du skapa ett nytt projekt? Eller vill du fortsätta arbetar på den befintliga projekt? I vårt fall ska vi att skapa ett nytt projekt. Så det är verkligen trevligt, s kod har faktiskt redan gett dig några mallar för att skapa objekt. Om du vill göra ett spel, s kod har faktiskt ett spel mall för dig, har sidan baserade applikationer, Fliken baserad applikation. I det här fallet kommer vi att göra något mycket enkelt, och vi kommer att använda en enda vy ansökan. Efter det precis vad du vill kalla din produkt, och vad heter du, vad är din identifierare, och vilket språk ni använder. Här vill vi inte att Kontrollera med hjälp av grundläggande data. Kärna Data är i grunden en databasing iOS. Om du gör Kärna Data, s kod kommer att definiera mycket mer komplicerat klasser för dig. Så för att hålla allt enkelt, vi är bara kommer att göra utan Kärna Data just nu. Problemet vi ska vara använder är that-- problemet vi kommer att vara att skapa är att vi princip vill importera Mario från C till en iOS app. Så låt oss kalla det Mario-iOS. Naturligtvis kan du ange vad du vill sätta i ditt projekt. Och där går vi. Så det här är en liten bit överväldigande, men det är faktiskt vad vi såg bara på bilderna. Och det första området ser vi just nu är i grunden projekt konfiguration. Så allt du vill göra Projektet, vilken typ av enhet, låt oss bara säga vilken typ av enhet vill du din app ska visas på? Är det iPhone, iPad eller universell? Så enhet orientering, allt det här. Inte mycket viktigt, men skulle kunna vara, men detta är en plats där du ställer in ditt projekt om du faktiskt vill distribuera till Apple Store. Okej, låt oss titta på något som är inne i vårt kod. Låt oss gå igenom filen navigator. Och dessa är alla filer som redan kom med mallen, mycket trevligt. Så när vi klickar på en av dem detta är vad det ser ut. Mycket lik g redigera. Men du kan se att det syntaxmarkering är förmodligen lite trevligare. Och det är faktiskt mycket mer kraftfull än g redigering. Och du kan komplettera automatiskt en massa saker för dig, som vi kommer att se mycket snabbt. Vi öppnar felsökning område. Okej, som vi kan se, konsolen är rätt här. Detta är vad du kommer att se var du är i printf eller nsloging något. Så utan vidare, låt oss faktiskt sammanställa appen och se vad som händer. En viktig egenskap för s-kod, är att s-kod levereras med en iPhone simulator. Så du behöver inte ha en iPhone för att prova ditt projekt, s kod kan simulera att för du, som vi kan se just nu. Det är ganska trevligt. Det tar lite lite tid att sammanställa och i princip har vi en tom applikation, som faktiskt gör ingenting. Men det samman. Det är ganska häftigt. Det är mycket bättre än C, va? Okej, så låt oss Försök att lägga till något. En fil som är lite konstigt här kallas storyboard. Detta är faktiskt en stor, fantastisk funktion för s-kod. För i s-kod, kan du faktiskt dra och släppa element på gränssnittet och det kommer direkt dyka upp. Låt oss försöka det. Vi släpper en etikett här, "Hello World !!!" Vi kan centrera det. Ganska coolt. Nu kör detta stopp simulering. Här har vi "Hello World !!!" Vi har inte ens göra någon kodning än. Vad sjutton är det som händer? Detta är hur kraftfull Interface Builder kan vara. Någon sa till och med att du kan nog bara slutföra en app utan att skriva förmodligen tusen rader kod bara genom att använda Interface Builder. Men det är nog inte det bästa sättet att göra det. Nu ska faktiskt komma ner till kodning. Så strukturen för filen är faktiskt riktigt intressant eftersom, som ni kanske ser, det finns ingen huvuduppgift någonstans. Se? Som vi nämnde tidigare, du kan se att detta är en implementering fil för en specifik klass. Men det finns ingen huvud någonstans. Så var är huvud? Egentligen finns det en huvudsaklig, men den Huvud är faktiskt dold för dig. Huvud är här. Det ser bekant. Så i princip vad iOS gör inuti huvud är att när huvud är heter, vilket egentligen när appen körs, det skapar ett objekt som kallas AppDelegate. Som jag nämnde tidigare, hela app är faktiskt ett objekt i sig. Så på detta sätt, i stort sett iOS-app är talande kompilatorn att OK, jag ska skapa en produkt som kallas AppDelegate, och det kommer att bli min app. Så du måste gå genom att AppDelegate och se vad den där killen gör. Mitt jobb är gjort för mig. Och i AppDelegate kan du se att det finns några riktigt konstiga funktioner, väl egentligen metoder, som Apple har redan gett dig. Vilka är dessa? Dessa är faktiskt bara protokoll att jag talade om. Så dessa är händelser som Apple har gett dig att börja med. Det finns ingenting i vissa av funktionerna just nu, men om vi vill initiera något för vår app innan du hämtar in visning någon uppfattning, gör vi det här. Du kan bara läsa namnet och jag antar händelsen är faktiskt riktigt klart. Så nu huvud har skapat ett föremål för AppDelegate. Och vad AppDelegate kommer att göra är faktiskt också dold för dig. Den AppDelegate kommer att starta laddar ViewController lager. Så det är i princip kommer att börja laddar upp alla synpunkter som du har och bara göra vyn baserad på hierarkin. Så i det här fallet har vi bara en uppfattning, som är här. Så det är den enda vy som kommer att kallas. Den ViewController logiken är just här. Detta är den kod som faktiskt styr vyn såg vi bara. Okej, låt oss göra något här. Så viewDidLoad låter som en händelse, när det i själva verket är detta också en delegat, detta är också ett protokoll. Så vad anser är laddad, allt inuti funktionen kommer att kallas. I det här fallet ska vi se "Hej Tianyu! "Om vi ​​kör programmet. Det börjar bli lite långsam sammanställa storyboard filer. Jo faktiskt, ser vi en utgång för det. Det är ganska coolt. Nu ska faktiskt göra Mario. Jag ska definiera fungera mycket snabbt. (int) nivå resultat: marioWithLevels. Okej, detta är faktiskt awesome inslag i s-kod auto färdigställande. Så när du skriver för och skriv in, Det har redan gett upp mallen för dig, vilket är ganska coolt. Det borde se riktigt bekant för er killar. Tyvärr, det är mitt fel. Okej, coolt. Denna logik borde se riktigt bekant till er killar, speciellt just Mario. Men vi kommer nu skriva ut till konsolen varje gång, eftersom vi vill på något sätt hålla koll på vad vi skriver. Vi kommer att använda resulterar något senare, att visa utskrifts ut resultera till användaren. Så istället vi är bara nslogging allt, som vi lagrar allt in i ett funktionsanrop resultat, men logiken är exakt densamma. Efter att vi avsluta det, vi bara skriva ut våra resultat. Och här i stället för att skriva ut min namn, ska vi kalla en funktion. Låt oss se vad som händer. Oj, uppenbarligen. Vi har en trevlig lite pyramid här ute. Detta är i grunden C, vi är bara manipulera där du kallar en funktion och hur ser en funktion se ut. Det finns inget annat. Men detta är faktiskt inte mycket spännande här, eftersom vi inte ser allt från iPhone-appen. Så om du verkligen har en iPhone app-- Om du faktiskt har Mario iOS rätt Nu, du ska inte att se något som har något att göra med Mario eftersom alla dessa utgångar till en konsol är dolda från en användare. Detta är vad du ser, vilket är "Hello World !!!" Inte bra. Nu ska försöka göra användaren se vad exakt är vi skriva ut. Så vi behöver inte märka längre. Låt oss försöka lista ut något annat som kan vara till nytta. Det är faktiskt en element som kallas textfält, vilket skulle kunna vara till stor hjälp för oss. Den visar i princip en region text som kan redigeras. Så det ser riktigt bra. Nu drar den och släpper den. Wow, vi har en text vy enligt vår uppfattning, riktigt snygga. Det är lite för stor. Låt oss göra den mindre. Sätta den i mitten. Gör det mindre också. Nu har vi en text vy, vilket vi kunde användas för att visa vårt slutliga resultatet. Men just nu är det definitivt inte gå till jobbet eftersom det finns no-- den ViewController vi bara definieras inte vet att det finns en text vy där ute. Så vi måste på något sätt länka textvyn vi bara skapats med den klass som har redan kommit med oss. Det sätt vi gör det är faktiskt riktigt magiskt. Så öppna upp storyboard. Det finns en särskild [OHÖRBAR] kallas [? assistent?] [OHÖRBAR]. När du klickar på det, det är kommer att öppna två filer. En är en klass och den andra en är en motsvarande vy för den. Det är mycket, mycket bra. Och låt oss bara går igenom .h filen. Kontroll, detta är [OHÖRBAR] logik. Tryck på Ctrl och dra den text utsikt i deklarationen. Vi kommer att kalla det outputView. Anslut. Så här har vi deklarerat ett nytt egendom för vår ViewController klass. Och den nya fastigheten är bara textvyn vi har skapat i gränssnittet byggnaden. Så på det sättet vi kunde åtkomst alla data och manipulera allt som är inne utgångs uppfattning, som är fantastisk. Så i vår faktiska koden, låt oss göra något med den. Så den här gången när vi är som utskrift ut det slutliga resultatet för Mario, vi är i inte logga något. Jag menar att vi kunde hålla loggnings uttalande. Utöver det, vi skicka utläsningen vi bara skapad till utgångsvisningen, vilket är ett UI Textview vi just skapat. Nu ska vi se vad som händer. Wow. Vi har en pyramid i appen just nu. Så att användaren kan se vår produktion eftersom Vi har kopierat utgången från vår kod till vår gränssnittet. Det är ganska bra. Det är faktiskt inte så spännande eftersom vi can-- Allt appen gör är visar en pyramid till dig, och det finns inget du kan göra åt det. Det är inte särskilt spännande. Så nu ska vi göra en knapp som kommer att klara av utsikten. Verkar som en knapp kommer att vara till hjälp. Dra och släpp. Knapp ett. Knapp två. Så när vi klickar på vänster knappen, bör utsikten rensa. Det bör finnas ingenting på skärmen. Och när vi klickar på höger knapp, Mario, vyn kommer att visas igen. Så här sättet gör vi också magiska grejer, kontroll och dra till klassdeklarationen i assiste director-- i assiste betraktaren. I det här fallet är vi specificerar att det borde vara en åtgärd. clearMario. Så här har vi redan skapat en åtgärd som heter clearMario, vilket är den metod som skulle kallas när vi trycker på knappen klar. Så i vår faktiskt kod, låt oss bara sätta utgångstexten och utgångsvisningen i intet, och på det sättet Det ser ut att vara klar. I tillägg till detta, låt oss skapa en metod som kallas runMario. Åh förlåt, bör det inte vara en egenskap. Okej, som bör vara en åtgärd också. Och när den funktionen är heter, bara köra vi Mario tio. Förhoppningsvis kommer att bli bra. Spelar det sammanställa? Ja. Nu har vi en vy. Vi har en utgång. Och låt oss bara se vad som händer. Det är borta. Det är tillbaka igen. Så här har vi specificerat vilken typ av funktion kommer att kallas när Vi skriver in något, När vi trycker på en viss knapp. Detta är i princip Målet action system för händelsestyrd programmering i mål C. I tillägg till detta, det är inte mycket spännande eftersom vi inte kan verkligen förändra hur högt pyramiden kommer att vara, så vi vill förmodligen något sätt få en ingång från användaren och ändra höjden på den pyramid utifrån vad de utgång. Så vi kommer att göra det. Så den här gången när vi kallar runMario, vi inte bara kalla Mario direkt. Den här är titeln. Delegera. Detta är mycket intressant. Vad är en delegat? Jag kommer att sätta själv här. Och vi kommer att se vad det betyder senare. Så här har vi i princip skapat en specifik instans kallas UI varning vy. En UI alert uppfattning är princip vad du kommer se varje gång något pops upp och frågar efter inmatning, gillar vad som händer när du försöker att köpa något på en App Store. I tillägg till detta, efter att du skapa den, visar vi bara varningen. Okej, låt oss bara snabbt Testet kommer att arbete eller inte. Det är väldigt coolt. Nu ska faktiskt skapa en inmatningsfält för UI alert. Detta är hur vi gör det. Och vi bör ha en ingångsvisningen för registreringen. Väldigt coolt. Låt oss bara säga 10. Det är inte gör något rätt nu eftersom samtalet faktiskt förändrades inte för att utföra mario. Så detta har blivit lite lite konstigt eftersom när Vi trycker ned en knapp, när vi trycker på en knapp i varnings uppfattning, något skulle hända, men det händer inte. Hur ska vi hinna det? Hur vet vi att en användare har avfärdat en varning vy och redan angett ett nummer, eftersom just nu ingenting som faktiskt händer. Tja, du kanske har gissat det rätt, delegering. Så förutom alla dessa förklaringar, Vi behöver lägga till en ny delegation till Det kallas UI alert utsikt delegat. Så att varje enskild interaktion eller händelse att vi kommer att ha med UI alert vy den kommer att hanteras genom vår klass också. Så utöver det, kommer att vara alert view klicka på knappen vid index. Detta har uppnåtts. Så i det fallet har vi already-- så vi har upptäckte ett protokoll som kommer att hantera händelsen när vi klickar på knappen Klar på alerten uppfattning. Så varje gång vi avvisa alert uppfattning bör detta ske. Låt mig bara testa det mycket snabbt. Jo faktiskt, har vi nått hit. Så här, vad vi kommer inte faktiskt får är faktiskt få the-- Så vi vill komma ut den text som vi tidigare har in i varnings vyn. Och baserat på text, vi är kommer att visa Mario. Detta visar sig mycket snabbt om det faktiskt fungerar eller inte. Så i det fallet, om vi input, låt oss säga, 10, bör vi se 10. Mycket bra, vi har ett antal här. Det är ganska bra. Nu det sista steget kommer be-- Så sista steget vi behöver göra just nu är bara en ringa Mario med nivå beroende på insignalen att vi har lagt ner alert uppfattning. Så vi behöver konvertera denna sträng till iOS. Statisk spill är mycket häftigt. Och då är vi bara ringa själv marioWithLevels värde. Låt oss se kommer att faktiskt fungerar eller inte. Vi är redan gett en pyramid. Låt oss försöka ändra höjden. Som faktiskt fungerar. Det är ganska coolt. Så att nu kan du bara input något värde som du vill. Låt oss bara säga fyra. Det är ganska häftigt. Så detta är i grunden ett riktigt snabbt exempel för hur man skapar ett projekt i s-kod och hur man verkligen snabbt koppla upp några riktigt enkla händelser och funktioner. Så källan går sättas på nätet senare. Så om du är intresserad i hur iOS Mario fungerar, Jag kommer att sätta exakt samma projekt har laddats in i CS50 hemsida senare. Vi är i grunden gjort med sommar, och innan vi avslutar Jag vill bara peka dig killar att några riktigt grymma resurser som finns tillgängliga på nätet. Uppenbar Apple dokumentationen kommer att vara till stor hjälp. Men utöver det, jag särskilt rekommenderar fyra källor, kod skola, trädkoja, AppCoda och WWDC videor. Kod skola och trädkoja är två online Educating webbplatser, som specifikt fokuserar på programvaruteknik. Speciellt för kod skolan, de har riktigt bra handledning om iOS. Det är ett riktigt snabbt exempel för det. De skapar faktiskt en riktigt cute-- titta på den lilla söta iPhone snubbe där borta, det är ganska häftigt. Och sättet de förklarar Mål C syntax är helt klart. Tree house är samma. Och AppCoda är ett forum. Det är faktiskt en blogg som kördes av en riktigt erfaren Mål C programmerare. Och alla dessa tutorials i AppCoda är ganska kort och lätt att genomföra, rekommenderas. Och om du är en utvecklare, definitivt gå kolla hur WWDC videor där du kan lär dig de senaste iOS programmering tekniker, API och bibliotek. Så det är ganska mycket den för seminariet. Tack så mycket. Och jag hoppas du har kul skapa din egen iOS-app.