>> Tianyu LIU: Hei, hvordan er det kommer alle?
Og dette er iOS App programmering av objektiv c seminar.
Og mitt navn er Tianyu Liu.
Jeg er en Lowell junior akkurat nå, konsentrerer seg i informatikk.
Så i dette seminaret er jeg kommer til å lære deg gutta
litt om hvordan å lage en app.
Yay, bli begeistret for det.
>> Så før vi selv begynner å dykke inn i selve programmerings side,
la oss bare veldig raskt snakke om hvorfor kan det være lurt å bygge en iOS-app?
Hvorfor er iOS så fantastisk?
Så det første problemet, den første ting som er ganske fantastisk for oss,
spesielt som en CS50 student, er at iOS
bruker Objective C. Vel, det er et nytt språk kalt Swift,
men vi kommer ikke til å bruke det i dette seminaret.
Hvis du er interessert i Swift, der er en uavhengig seminar om det.
Men Objective C er i utgangspunktet et overordnet sett av C. Meaning
at alt du bruker i C kan settes til Objective C
meget lett.
>> Som du kan se senere, som faktisk er det noen helt grunnleggende syntaks, er
utgangspunktet nøyaktig det samme, C og Objective C. Så,
siden du har tatt CS50 opp så langt, har du allerede
vet Objective C, minst 40%.
I tillegg har Apple en virkelig robust API for iOS.
Det finnes en rekke virkelig gal ting du kan gjøre med det.
Hvorav den ene er noen faktisk opprettet en iOS-app
for kontrollerende biler, som er ganske interessant.
Sannsynligvis et helikopter er mer spennende.
Men det er hvor kraftig iOS API kan være.
>> Og som du kanskje har funnet ut akkurat nå,
stabelen flow er trolig en av de viktigste elektroniske ressurser
tilgjengelig for deg.
Og gode nyheter, for hver enkelt problem du kan muligens
tenke på mens bygge din avsluttende prosjekt i Objective C,
det er sannsynlig en stack overflow svar.
Det er bare helt utrolig.
I tillegg til det, iOS er virkelig en plattform
hvor du kan nå et stort publikum med liten innsats.
Det er ikke som Android, hvor alt er ganske fragmentert.
>> Alt iOS er enhetlig.
Og så lenge du oppretter en app for iPhone,
du kan veldig lett port som til iPad, iPad mini, eller ulike iPhone-størrelser.
Disse er alle virkelig praktisk.
Og det er bare veldig bra for impressing dine venner.
Du kan bare holde en iPhone og fortell din venn hei,
dette er app jeg gjør.
Du kan gjøre det for noen desktop apps, som er fint.
>> Greit, nå la oss faktisk får inn i språket Objective C.
Så hvorfor ikke vi starte med noen virkelig grunnleggende syntaks.
Som jeg nevnte tidligere Objective C Det er i utgangspunktet et overordnet sett av C.
Så mye grunnleggende syntaks er faktisk akkurat det samme.
Erklære en variabel og legge to variabler sammen
er akkurat som vi har gjort i Mario.
Ingenting nytt her.
>> Tilsvarende leieboer for loop og tilstanden er også den samme.
Du kan gjøre en for loop akkurat som du har gjorde i et Mario [uhørbart].
Og du kan gjøre forholdene akkurat som det du
har gjort i tidligere p sett.
Men Objective C ikke er helt C,
og det er noe som er litt merkelig om det.
>> Den første er at når du er gjør C-programmering, du vanligvis kaller
inkludere og deretter et bibliotek navn.
Men i Objective C du kaller det import.
Utgangspunktet si funksjonalitet, bare forskjellige navn.
Og strengene er faktisk litt rart.
Du kan se at den første Det som er litt rar
er at du har en ganske weird-- sorry-- du har en ganske rare NS
signere over her.
Og den andre tingen det er slags merkelig
er du en krøllalfa før faktisk erklære strengen.
Så det på skiltet i utgangspunktet betyr at en streng er ikke bare en streng,
det er faktisk et objekt.
Vi kommer til å forklare det senere så gjør ikke
panikk hvis du ikke forstå hva det betyr.
Og utskrift til konsollen er litt annerledes fordi i C kaller vi printf,
men i Objective C kaller vi [uhørbart].
>> Du lurer kanskje på hva det vil si.
Det er i utgangspunktet printf, bare et annet språk.
Nøyaktig den samme bruk, nøyaktig den samme funksjonalitet.
Vel, det viser seg at Objective C faktisk
har en ns prefiks i nesten alt, alle grunnleggende datatype,
nsstring, NSArray, nsdictionary.
Grunnen er at ns faktisk står for Next Step,
som er et selskap som Steve Jobs har grunnlagt,
som er et selskap hvor språket Objective C er født.
Så dette er i utgangspunktet tradisjon.
Jeg vet det er en liten bit rart, men det er Apple.
>> Så noe som er enda sprøere enn det som er en funksjon erklæring.
Dette er veldig forskjellig fra hva vi se i C, fordi her er det faktisk
ser ikke ut som C lenger.
Hva du har her-- av Måten dette er ikke et punkt,
dette er et minustegn.
Du har et minustegn parentes ugyldig og deretter navnet på funksjonen.
La oss bare si at hvis vi har hello world, deretter
returtypen ville være ugyldig fordi vi tilbake ingenting.
>> Hva blir veldig rart er at når du er
ha mer enn en parameter passerer inn i en samme funksjon som
vil være veldig rart, som vist her.
Vi har en metode navn, kalt addInt til [uhørbart]
og vi passerer en parameter.
Men etter det har vi mer metodenavn samtale med.
Og etter med vi passerer den andre parameteren.
Dette er faktisk litt rart, men alle disse funksjons erklæringer
følge samme mønster som dette.
>> Vi har et minustegn til å begynne med.
Minustegnet kan være et plusstegn noen ganger basert på hva slags metode
er det.
Metoden er i utgangspunktet et annet navn for funksjon.
Og vi kommer til å forklare det senere når
vi snakker om objekt orientert programmering.
Du først angi avkastning skriver inne i parenteser,
etter som kommer metodenavnet.
Du passerer en parameter.
Og hvis du har flere parametre du trenger for å utvide metodenavnet
og i utgangspunktet skrive noe mer her.
>> Det kan være alt du vil.
I vårt tilfelle er det med.
Men du kan si slutt, eller eller eller abc full bar, hva du vil.
Og så etter at du er passerer parameter b.
Dette er en veldig merkelig konvensjonen, men vi er
kommer til å se hvorfor Apple ønsket å gjøre det svært raskt.
Så hvordan kan ringe deg funksjon?
Kalle en funksjon i Objective C er også forskjellig fra C.
>> Egentlig, ringer en funksjon i Objective C
er mer som du snakker med noen.
Her har vi selv, som kalles et objekt.
Du i utgangspunktet fortelle protestere selv å si "Hello World!"
Det er hvordan man skal kalle funksjonen.
En gjenstand og en fremgangsmåte navn kombineres med hverandre.
Og det er her den rare forlengelse for metodenavn virkelig kommer inn i bildet.
>> La oss se på det andre eksempelet.
Vi bare definert en metode som kalles addInt med blah blah blah.
Så i dette tilfellet når du ringer den spesifikke [? meldingen?] det kommer
å se ut som selv addInt: 10 med: 2.
Det høres ut som engelsk.
Selv om funksjonen funksjon erklæring er rart,
poenget med Objective C er metode erklæring mønster,
er at når du ringer funksjonen eller metoden
det vil høres ut som faktiske engelsk.
Så det er veldig intuitivt når du kommer inn i det.
>> Spesielt i dette tilfellet hvor du kan i utgangspunktet
se at funksjonsnavnet er slags dokumentere seg selv.
Du trenger ikke noen mer forklaring for å se
hva som skjer, hva nøyaktig ett parameter gjør.
Går utover det, la oss snakke litt litt om objektorientert programmering.
Objektorientert programmering er en av de grunnleggende programmering
teknikker eller mønstre som er brukes av Objective C. Objective C
heter Objective C, ikke C, for en virkelig god grunn.
>> Så før vi får inn Objective C syntaks,
La oss virkelig raskt se på hva er egentlig et objekt.
Vi har sikkert gjort noe som objekt før, noe som
kalles struct når du er implementere et tre eller en lenket liste
eller [? prøve. ?] Så det er i utgangspunktet som en struct,
men det er mye kraftigere enn det.
Et objekt har metoder og egenskaper.
Metoder er i utgangspunktet funksjoner.
I utgangspunktet fungerer som en spesifikk for et bestemt objekt.
>> Og eiendommer er i utgangspunktet den felt du angir i struct.
Så for hver enkelt objekt vi har noen eiendom
som har noen variabler som er spesifikke for objektet.
Og vi har noen funksjoner som er også bestemt til objektet.
Og funksjonene kalles metoder og variablene kalles egenskaper.
Det er bare et fancy navn.
Mens du faktisk hver enkelt visning du ser mens du åpner en iOS-app,
la oss bare si Twitter eller Facebook, hver enkelt visning du ser er et objekt.
Og til og med hele app er et objekt til å begynne med.
Veldig interessant konsept.
>> Og hvorfor gjør vi ønsker objekt orientert programmering?
Så du kan forestille deg at når du program det blir ganske komplisert.
La oss bare si når du er implementere sjakkbrett,
logikken skal bli veldig komplisert.
Du har 36 forskjellige stykker, slik at hvis du
ønsker å skrive logikk for alle 36 forskjellige brikker i sjakk,
som kommer til å være mye ulike funksjoner og variabler.
Det er en rekke problemer.
Og sannsynligvis du kommer til å skrive en annen metode eller annen funksjon
for hver av stykket til nøyaktig kontrollere hva de gjør.
>> Men hvis du gjør objektorientert programmering, alle disse bitene
kan abstrahert inn ett enkelt objekt.
Og objektet vil ha noen felles egenskaper, som hva slags brikke
er det?
Hvilken farge er det?
Hvordan kan det gå?
Og på den måten du har i stor grad forenklet logikk det.
Så det er bare en virkelig god måte å lage kompliserte programmer,
og hierarkiske forholdet innen programmet, meget enkel.
Som vi skal se hvorfor svært raskt når
vi faktisk gjør programming-- når vi er faktisk
gjør en S-kode programmering økten senere.
>> Vel i tillegg til det, objektorientert programmering
er bare en masse moro.
Du fikk til å designe din egen objekt.
Du fikk til å utforme hva gjør det se ut selv.
Det er ingen rett svar på det.
Og det er helt interessant.
Så i objektorientert programmering, to grunnleggende begreper
vil være klasse og instans.
En klasse er i utgangspunktet en mal for objektet.
Og en forekomst er i utgangspunktet ett bestemt objekt.
>> La oss bare si at du gjør en cookie.
I dette tilfellet er hver enkelt cookie du faktisk ende opp med
kommer til å være et objekt.
Men cookie plate du bruker til å bake alle cookies vil være en klasse.
En klasse er i utgangspunktet en mal.
Og forekomsten vil være ett bestemt objekt skapt ut av den klassen.
>> Og en instans vil bli opprettet basert på klasse erklæring,
som vi vil se i senere lysbilder.
Så la oss faktisk gjør en virkelig rask eksempel [uhørbart].
La oss si at vi erklære et objekt for en katt.
Objektet skal have-- katten klassen bør
har noen egenskaper og metoder.
Hva slags egenskaper bør de klasse have-- bør katten ha?
>> For eksempel, fargen, alder og rase, de
vil være variabler som er spesifikke for hver katt.
Og de er noen ting at vi bruker for å beskrive en katt.
Hva slags metode, eller hva kan en katt gjøre?
Noen raske eksempler ville være jage mus, spiser fisk eller bare mjaue.
Dette er en virkelig rask eksempel på katt klasse.
Og en veldig spesifikk katt objekt vil være en katt
hvor vi spesifisere farge, alder og rase.
>> I så fall er vår objekt ikke lenger er en klasse lenger.
Vi kopierer malen fra klassen og vi spesifisere hver spesifikk informasjon
for det bestemte objektet for å gjøre den uavhengig.
Og når du ringer en fremgangsmåte inne i et objekt,
du bare ringe meow på objektet, som er katten du nettopp opprettet.
>> Sannsynligvis vil du skrive ut noe sånt som "Hello World!
Mjaue. "
Ganske søt.
Greit, la oss bare få inn noen detaljer
og se hva betyr at sette til å være iOS programmering.
Så i iOS programmering hver enkelt klasse vil bli gjennomført i to filer.
En fil er her, som kalles grensesnittet.
Annen fil er her, som kalles gjennomføring.
>> Vanligvis grensesnittet vil ha extension.h
som vi har sett i C-biblioteker.
Og gjennomføring fil er kommer til å ha extension.n.
Det er litt merkelig.
Men .N betyr faktisk .c, er det ingen fundamental forskjell mellom de
to.
Så i dette tilfellet, kan vi se at vi er erklære grensesnitt, Cat: objekt.
Som kalles arv.
Vi er i utgangspunktet arve katt klasse fra objektklassen.
Så hver eiendom og metode som var tidligere definert i objektklasse
vil automatisk bli definert i en katt klassen også.
>> I tillegg til at vi definerer fargen, rase og alder, tre variabler.
Som faktisk ser ut som noe du har gjort før.
Det ser ut som struct.
Det er i utgangspunktet syntaksen for struct erklæring,
og som er helt korrekt.
Og siden jeg nevnte tidligere, forskjellen en struct
og et objekt, en av grunnleggende forskjeller
er at et objekt har metoden mens en struct bare har variabler.
Så i tillegg til egenskapene eller variabler vi har opprettet for objektet,
vi spesifiserer noen metode.
>> La oss bare si her vi har to metoder, en er mjaue,
en annen er jage mus.
Vi sannsynligvis vil være passerer en parameter basert på vår forrige metoden
erklæring mønster.
Du sannsynligvis vil være passerer en mus.
Og du vil sannsynligvis ønske å returnere en bool til kjenne
hvis katten din har lykkes fanget mus eller ikke.
>> Dette er grensesnittet, men vi kan se at grensesnittet faktisk
gjør ikke noe.
Det bare forteller et program hva exists-- hva som finnes i katten klassen.
Så for at det program for å gjøre noe,
vi må ha gjennomførings filer.
Så her er det første vi gjør selvsagt vi importerer grensesnittet.
Etter at vi importerer grensesnittet, Vi definerer metoden.
>> La oss bare si her meow ville bare skrive ut
"Hello World!" til konsollen.
Og etter gjennomføringen fil, er vi ganske mye gjort.
Dette er i utgangspunktet en klasse erklæring for en klasse.
Så nå er spørsmålet blir, hvordan erklærer du en variabel?
Måten du bruker en klasse for å skape en objekt i Objective C er skrevet her.
>> Du først spesifisere at Dette er en katt peker,
fordi hvert objekt i Objective C endelig er implementert som en peker.
Og du kaller klassen, kaller dem som Alloc, som er utgangspunktet malloc,
forteller operativsystemet at du trenger litt minne plass for dette objektet.
Etter at du har et objekt allerede, og du bare initialisere den.
Dette er bare konvensjonen.
Jeg vet det er er litt rart, men dette er faktisk hvordan Apple gjør ting.
>> Tilordne egenskaper er faktisk ganske grei.
Det er svært lik hva du gjør når
du tildele noen spesifikke felt inne i struct.
Du må bare variabelen navn, navnet på egenskapen,
og tildele en bestemt verdi til det.
Og kalle en metode er svært like.
Det å kalle en metode er utgangspunktet hva jeg snakker om
for å ringe noen metode i Objective C.
>> Du sender et objekt, i dette tilfellet kommer det til å være myCat,
og du passerer metodenavnet.
Som om du snakker til objektet, myCat, som du bør mjaue.
Det er ganske interessant.
Etter at det er ett mer grunnleggende design mønster
at vi trenger å snakke om før de kommer til selve S-kode.
At design mønster kalles hendelsesdrevet programmering.
Dette er sannsynligvis også en av de mest grunnleggende ideer i iOS programmering.
>> Så har du sannsynligvis ikke vet hva er hendelsen drevet programmering,
men det er egentlig ikke så skummelt.
Vel faktisk, har du allerede gjort det før.
Dette er en av de linjene du har sikkert allerede skrevet i den siste [uhørbart]
av CS50, google.maps.event.addListener (markør,
"Klikk", function () {}) :.
Ved å kalle denne linjen du er hovedsak forteller datamaskinen
at når arrangementet kalt "Klikk" som skjer på markør,
bruke denne funksjonen.
>> Dette er veldig forskjellig fra hva du gjør i mario.c.
I mario.c du bare kjøre programmet en gang, det gir deg en utgang,
og du er ferdig.
Dette er liksom som en skudd programmer.
Hendelsesdrevet programmer er veldig, veldig forskjellige.
La oss forestille seg, hvis Facebook er et ett shot program det er egentlig ikke bra.
Du bare gå til Facebook en gang, og det er gjort.
Det gir deg noen utgang og du aldri fikk den tilbake.
Du fikk aldri noe mer.
>> Så her, spesielt mønsteret vi bruker er
hendelsesdrevet, slik at hver funksjon vil
bli tatt ut fra hva hendelse har skjedd.
For eksempel, dersom vi en knapp og vi spesifisere
at når det klikkes, kaller funksjonen som heter "Hello World!"
På den måten kan vi virkelig administrere funksjonen logikk
flyte på en meget fleksibel måte.
Brukeren kan gjøre eller ringe en funksjon som allerede har blitt kalt.
Det er helt basert på hva brukerne gjør.
>> Så vi kan se at dette er faktisk mye bedre enn mario.c.
Og gode nyheten er at det er faktisk ikke et nytt konsept.
Dere har allerede gjort at i det siste problemet definert.
Så i Objective C er det tre ulike diagrammer
for hendelsesdrevet programmering.
Det første diagram er kalt target handling,
hvor du binde en knapp trykk med noen funksjon.
La oss bare si, når du klikker noen knapp, ringe deg noen funksjon.
Dette er meget enkelt mål handling.
>> Den andre er faktisk den vanskeligste,
det heter delegasjon på protokollen.
Vi kommer til å forklare som i stor detalj senere.
Og den tredje måten er varselet.
Dette er faktisk ikke veldig viktig så langt
som vi er opptatt av, fordi sjansen at du kommer til å bruke varsling
i det endelige prosjektet er ganske lav.
Så vi kommer til å hoppe over den delen.
>> Og vi kommer til å dykke inn delegasjon på protokollen.
Så hva er egentlig en protokoll?
Eller hva er egentlig en delegasjon?
La oss snakke om protokollen til å begynne med.
Protokoller er ingenting, men hendelser.
Men disse hendelsene er gitt til deg av Apple til å begynne med.
For eksempel, jeg er ikke helt sikker på hvor mange av dere
gutta bruke Apples originale app post eller kontakt,
men hver gang du rulle bord og trykk på bestemt celle
på bordet, som er en hendelse.
>> Og hvis du ønsker å gjøre denne hendelsen selv,
det er faktisk litt vanskelig.
Så Apple har gitt det selv til deg slik at du bare kan direkte bruke
Ved å gjøre noe på egen hånd.
Protokoller er faktisk virkelig, virkelig mye brukt
i Objective C. Vel i Faktisk hver eneste app
har noe fanget app delegat.
Innsiden av delikat er alle protokoller for å laste app.
>> La oss bare si at det er en hendelse for app gjorde belastning.
Så hva som skal skje etter at du har laget en app, etter at du åpner programmet,
når du lukker programmet, eller etter du sette iPhone i dvale.
Disse er alle hendelser som har allerede blitt gitt til deg.
Og opprinnelig inne disse partiklene vil det ikke være implementeringen.
Apple har nettopp fortalt deg at denne funksjonen vil skje når noen hendelse skjer,
men hva du gjør med det Funksjonen er helt opp til deg.
>> Delegasjon er i utgangspunktet fortelle klassen
at du bør håndtere disse protokollene.
Det er en liten bit forvirrende, men det vil være
mye klarere når vi gjør S-koder i aksjon.
Delegasjon på protokollen er faktisk en meget robust mekanisme i den forstand
at hvis vi gjør delegasjon i en bestemt klasse,
kan vi i hovedsak håndtere alle typer arrangementer
bruker noen klasse vi har, svært praktisk verktøy.
>> Så en rask eksempel for delegasjon på protokollen
vil være hva jeg nettopp snakket om.
Denne protokollen spesifikt kalles Tableview [uhørbart] velge rolle
på [? indeksen?] [? fortid. ?] Så dette en arrangement som ville være fanget når
faktisk trykker på et bestemt celle i tabellvisning,
la oss bare si i e-posten din eller i kontakt app.
>> Inne i en funksjon det var opprinnelig å gjøre ingenting.
Funksjonen gjør ikke gjøre noe som standard.
Men du kan angi hva funksjonen gjør,
gitt hva du vil ha ut av programmet ditt.
Svært praktisk verktøy.
Og med alt som blir sagt, jeg i utgangspunktet
dekke noen helt grunnleggende syntaks og grunnleggende konseptet for Objective C
programmering, og vi kan gjøre noen s-kode.
Mye mer spennende.
Så s kode er faktisk en litt overveldende
når du åpner den for første gang.
>> En rask notat, så hvis du ønsker å gjøre iOS utvikling,
Jeg anbefaler at du har en Mac.
Fordi du gjør iOS utvikling på Windows er veldig, veldig vanskelig.
Det er gjennomførbart, men det er veldig vanskelig.
Og du definitivt gjøre ikke ønsker å bruke g redigere.
Så i s-kode har vi flere forskjellige områder.
Når du først åpner opp s kode vil du se et navigeringsområdet
som i utgangspunktet viser deg alle filer som er i det nåværende prosjektet.
>> Du har en verktøylinje området, som er i utgangspunktet administrerende utsikt,
eller noen litt rask verktøy om s koden selv.
Og dette er selve redaktør området.
Dette området er svært lik g redigere men mye bedre enn g redigere.
Og i dette området til høyre, er kalt et bruksområde.
Området blir virkelig hendig når du oppretter grensesnitt eller spesifisere
noen raske oppsett for din app.
>> Og det siste området er debugging.
Dette området inneholder konsollen.
Så når du sier printf, eller NSLog i vårt tilfelle,
alle resultatene er kommer til å bli skrevet her.
All right?
Jeg antar vi kan veldig raskt gjøre et eksempel for iOS programmering.
Og la oss faktisk åpne opp s kode.
Så hver gang du åpner opp s kode, er det kommer til å dukke opp noe sånt.
Det kommer til å spørre deg hva ønsker du å gjøre?
Du ønsker å starte noe gjør tilfeldig, en lekeplass, i utgangspunktet du
kan bare teste koden uten faktisk binde seg til noen app.
>> Ønsker du å opprette et nytt prosjekt?
Eller ønsker du å fortsette arbeider på eksisterende prosjekt?
I vårt tilfelle skal vi for å opprette et nytt prosjekt.
Så det er veldig fint, s kode faktisk har allerede
gitt deg noen maler for å lage objekter.
Hvis du ønsker å gjøre et spill, s kode faktisk har et spill mal for deg,
har side baserte applikasjoner, Kategorien basert program.
I dette tilfellet skal vi å gjøre noe veldig enkelt,
og vi kommer til å bruke en enkelt visning søknad.
>> Etter det akkurat hva du vil kalle produktet, og hva er ditt navn,
hva er din identifikator, og hvilket språk bruker du.
Her ønsker ikke vi å sjekk bruke Core data.
Kjernen data er i utgangspunktet en databasing iOS.
Hvis du gjør kjernedata, s koden kommer til å definere
en mye mer komplisert klasser for deg.
Så for å holde alt enkelt, vi er bare kommer til å gjøre uten kjernedata
akkurat nå.
>> Problemet vi kommer til å være bruker er at-- problemet
vi kommer til å være å skape er at vi utgangspunktet ønsker å importere Mario fra C
til en iOS-app.
Så la oss kalle det Mario-iOS.
Selvfølgelig du angi hva du ønsker å sette i prosjektet.
Og der vi går.
>> Så dette er en liten bit overveldende, men dette er faktisk
hva vi nettopp så på lysbildene.
Og det første området vi ser akkurat nå er i utgangspunktet prosjekt konfigurasjon.
Så alt du ønsker å gjøre prosjektet, hva slags enhet,
la oss bare si hva slags enhet ønsker du din app skal vises på?
Er det iPhone, iPad eller universell?
Slik enhet orientering, alt dette.
Ikke veldig viktig, men kan være, men dette
er et sted hvor du setter opp prosjektet ditt hvis du faktisk
ønsker å distribuere til Apple Store.
>> Greit, la oss se på noe som er inne i vår kode.
La oss gå gjennom filen navigator.
Og disse er alle filene som allerede kom med malen, veldig hyggelig.
Så når vi klikker på en av dem dette er hva det ser ut.
Svært lik g redigere.
Men du kan se at den syntax highlighting er sannsynligvis
en litt hyggeligere.
Og det er faktisk mye mer kraftigere enn g redigering.
Og du kan autofullfør en masse ting for deg,
som vi vil se svært raskt.
>> La oss åpne debugging området også.
All right, som vi kan se, konsollen er rett her.
Dette er hva du kommer til å se hvor du er i printf eller nsloging noe.
Så uten videre, la oss faktisk kompilere programmet og se hva som skjer.
En viktig funksjon for s kode, er at s-kode
kommer med en iPhone simulator.
Slik at du ikke trenger å ha en iPhone for å prøve prosjektet,
s kode kan simulere at for du, som vi kan se akkurat nå.
>> Det er ganske fin.
Det er å ta litt litt tid til å kompilere
og i utgangspunktet har vi en tom søknad,
som faktisk gjør ingenting.
Men det kompilerer.
Det er ganske fantastisk.
Det er mye bedre enn C, ikke sant?
Greit, så la oss prøver å legge til noe.
En fil som er litt rare her kalles storyboard.
Dette er faktisk en stor, fantastisk funksjon for s-kode.
Fordi i s-kode, kan du faktisk dra og slippe elementer på grensesnittet
og det vil direkte dukke opp.
La oss prøve det.
>> Vi slippe en etikett her, "Hello World !!!"
Vi kan sentrere det.
Ganske kult.
Nå la oss kjøre denne stop simulering.
Her har vi "Hello World !!!"
Vi hadde ikke engang gjøre noe koding ennå.
Hva pokker er det som skjer?
Dette er hvor kraftig Interface Builder kan være.
Noen sa til og med at Du kan sannsynligvis bare
fullføre en app uten skriftlig trolig tusen linjer med kode
bare ved hjelp av Interface Builder.
Men det er nok ikke den beste måten å gjøre det.
>> Nå la oss faktisk komme ned til koding.
Slik at strukturen for filen er faktisk veldig interessant
fordi, som du kan se, er det er ikke hovedfunksjon hvor som helst.
Se?
Som vi har nevnt før, du kan se at dette
er en implementering fil for en bestemt klasse.
Men det er ingen hoved hvor som helst.
Så hvor er hoved?
Egentlig er det en hoved, men Hoved er faktisk skjult fra deg.
Den viktigste er her.
Det ser kjent ut.
>> Så i utgangspunktet hva iOS gjør inne hoved
er at når hoved er heter, som er utgangspunktet
når programmet kjøres, det skaper et objekt kalt AppDelegate.
Som jeg nevnte tidligere, hele app er faktisk et objekt av seg selv.
Så på denne måten, i utgangspunktet iOS app forteller kompilatoren
at OK, jeg kommer til å skape et produkt som kalles AppDelegate,
og som kommer til å være min app.
Så du må gå gjennom at AppDelegate
og se hva den fyren gjør.
Min jobb er gjort for meg.
>> Og i AppDelegate kan du se at er det noen virkelig rare funksjoner,
vel faktisk metoder, som Apple har allerede gitt deg.
Hva er dette?
Dette er faktisk bare protokoller at jeg snakket om.
Så dette er hendelser som Apple har gitt deg til å begynne med.
Det er ingenting i noen av funksjonene akkurat nå,
men hvis vi ønsker å initial noe for vår app
før du får inn visning en visning, gjør vi det her.
>> Du kan bare lese navnet og jeg antar arrangementet er faktisk veldig klar.
Så nå hoved har skapt et objekt for AppDelegate.
Og hva AppDelegate kommer til å gjøre er faktisk også skjult for deg.
Den AppDelegate kommer til å starte lasting av ViewController lager.
Så det er i utgangspunktet kommer til å starte laste opp alle visninger som du har
og bare gjengi utsikten basert på hierarkiet.
>> Så i dette tilfellet har vi bare én visning, noe som er her.
Så det er den eneste visningen som kommer til å bli kalt.
Den ViewController logikken er riktig her.
Dette er koden som faktisk styrer visningen vi nettopp så.
Greit, la oss gjøre noe her.
Så viewDidLoad høres ut som en hendelse, når det faktisk er dette også en delegat,
Dette er også en protokoll.
>> Så uansett hva utsikten er lastet, alt inne i funksjon
vil bli kalt.
I dette tilfellet bør vi se "Hello Tianyu! "Hvis vi kjører programmet.
Det begynner å bli litt treg kompilering storyboard-filer.
Bra faktisk, ser vi en utgang for det.
Det er ganske kult.
Nå la oss faktisk gjør Mario.
Jeg kommer til å definere fungere svært raskt.
marioWithLevels: (int) nivå resultater.
>> Greit, dette er faktisk den utro funksjon av s-kode automatisk fullføring.
Så når du skriver for og skriv inn, Det har allerede gitt opp malen
for deg, som er ganske kult.
Det bør se virkelig kjent for dere.
Beklager, det er min feil.
All right, kult.
Den logikken bør se virkelig kjent til dere, spesielt bare Mario.
>> Men vi vil nå skrive ut til konsollen hver eneste gang,
fordi vi ønsker å liksom holde oversikten over hva vi skriver.
Vi kommer til å bruke den resulterer liksom senere,
for å vise utskrifts ut føre til brukeren.
Så i stedet er vi bare nslogging alt,
som vi lagrer alt inn i et funksjonskall resultat
men logikken er nøyaktig den samme.
Etter at vi er ferdig med det, vi bare skrive våre resultater.
>> Og her i stedet for å skrive ut min navn, skal vi kalle en funksjon.
La oss se hva som skjer.
Oops, selvsagt.
Vi har en fin liten pyramide her ute.
Dette er i utgangspunktet C, vi er bare manipulere hvor du ringer en funksjon
og hvordan en funksjon se ut.
Det er ikke noe annerledes.
Men dette er faktisk ikke veldig spennende her,
fordi vi ikke ser noe fra iPhone-app.
>> Så hvis du faktisk har en iPhone app-- hvis du faktisk har Mario iOS rett
nå, kommer du ikke å se noe som
har noe å gjøre med Mario fordi alle disse utgangene til en konsoll
er skjult for brukeren.
Dette er hva du ser, som er "Hello World !!!"
Ikke bra.
La oss nå prøve å gjøre brukeren se hva skal vi skrive ut.
Så vi ikke trenger å merke lenger.
La oss prøve og finne ut noe annet som kan være nyttig.
>> Det er faktisk en element som kalles
tekstfelt, noe som kunne være svært nyttig for oss.
Den viser i utgangspunktet en region av tekst som kan redigeres.
Så det ser virkelig nyttig.
Nå la oss dra den og slippe den.
Wow, har vi en tekstvisning etter vårt syn, virkelig har lyst på.
Det er litt for stor.
La oss gjøre den mindre.
Sett det inn i sentrum.
Gjøre den mindre også.
>> Nå har vi en tekst visning, som vi kunne brukes til å vise vår endelige resultat.
Men akkurat nå er det definitivt ikke kommer til å fungere
fordi det er no-- den ViewController vi bare
defineres ikke vet at det er en tekstvisning ute.
Så vi må liksom knytte tekstvisning vi bare
opprettet med den klassen som har allerede kommet med oss.
>> Måten vi gjør det er faktisk virkelig magisk.
Så åpne opp storyboard.
Det er en spesiell [uhørbart] kalt [? assistent?] [uhørbart].
Når du klikker på det, er det kommer til å åpne to filer.
Den ene er en klasse og den andre er et tilsvarende syn for det.
Det er veldig, veldig nyttig.
Og la oss bare går gjennom .h fil.
Kontroll, er dette [uhørbart] logikk.
Trykk Kontroll og dra den tekst visning i erklæringen.
Vi kommer til å kalle det outputView.
Koble.
Så her har vi erklært en ny eiendom for vår ViewController klasse.
Og den nye eiendommen er bare tekstvisning
vi har laget i grensesnittet bygningen.
Så på den måten vi kunne tilgang til alle data
og manipulere alt som er inne utgangsvisningen, som er kjempebra.
>> Så i vår faktiske koden, la oss gjøre noe med det.
Så denne gangen når vi er som utskrifter ut det endelige resultatet for Mario,
vi er i ikke logge noe.
Jeg mener vi kunne holde logging uttalelse.
I tillegg til at vi send avlesning vi bare
skapt til utgangsvisningen, som er en UI textview vi nettopp opprettet.
La oss nå se hva som skjer.
Wow.
Vi har en pyramide i app akkurat nå.
>> Slik at brukeren kan se vår utgang fordi vi har kopiert resultatet fra vår kode
til vår grensesnitt.
Det er ganske bra.
Det er faktisk ikke så spennende fordi vi can--
All app gjør er viser en pyramide til deg,
og det er ingenting du kan gjøre med det.
Det er ikke spesielt spennende.
Så nå la oss lage en knapp som vil klare utsikten.
Synes at en knapp vil være nyttig.
Dra og slipp.
Knappen én.
Button to.
>> Så når vi klikker på venstre knapp, bør utsikten fjerne.
Det bør være noe på skjermen.
Og når vi klikker på høyre knapp, Mario,
utsikten kommer til å dukke opp igjen.
Så denne måten vi også gjøre magiske ting, kontroll og dra
til klassen deklarasjon i assistent director--
i assistent betrakteren.
I dette tilfellet er vi spesifisere at det bør være en handling.
clearMario.
>> Så her har vi allerede opprettet en handling som heter clearMario,
som er den metode som vil bli kalt når vi trykker på knappen klart.
Så i vår faktisk kode, la oss bare sette output teksten og utgangsbilde
til ingenting, og på den måten det vil synes å være klart.
I tillegg til det, la oss skape en annen metode som kalles runMario.
Oh sorry, det bør ikke være en eiendom.
All right, som bør være en handling også.
>> Og når denne funksjonen er kalt, vi bare kjøre Mario ti.
Forhåpentligvis som vil være i orden.
Betyr kompilere det?
Ja.
Nå har vi en visning.
Vi har et utgangssignal.
Og la oss bare se hva som skjer.
Som er gått.
Er det tilbake igjen.
Så her har vi spesifisert hva slags funksjon
vil bli kalt når vi skriver inn noe,
når vi trykker på en bestemt knapp.
Dette er i utgangspunktet target handling ordningen
for event drevet programmering i Objective C.
>> I tillegg til det, det er ikke veldig spennende
fordi vi kan egentlig ikke endre hvor høy pyramide vil bli,
så vi sannsynligvis vil liksom får en inngang fra brukeren
og endre høyden av pyramide basert på hva de utgang.
Så vi kommer til å gjøre det.
Så denne gangen når vi kaller runMario, vi ikke bare kalle Mario direkte.
Dette en tittel.
>> Deleger.
Dette er veldig interessant.
Hva er en delegat?
Jeg kommer til å sette seg selv her.
Og vi kommer til å se hva det betyr senere.
Så her har vi i utgangspunktet opprettet en konkrete tilfellet kalles en UI varsling
visning.
En UI varsling syn er innerst inne hva du vil
se hver gang noe spretter opp og spør deg for innspill,
som hva som vil skje når du prøver å kjøpe noe på en app store.
>> I tillegg til det, etter at du har lage det, viser vi bare varselet.
Greit, la oss bare raskt test vil at arbeid eller ikke.
Det er veldig kult.
La oss nå faktisk lage en inntastingsfelt for UI varselet.
Dette er hvordan vi gjør det.
Og vi bør ha en inngangsbildet for varselet.
Veldig kul.
La oss bare si 10.
>> Det er ikke å gjøre noe riktig nå fordi samtalen faktisk
endret seg ikke for å gjennomføre mario.
Så dette har blitt litt litt rart fordi når
vi trykker på en knapp ned, når vi trykker på en knapp i varselet utsikt,
noe skulle skje, men det skjer ikke.
Hvordan fange vi det?
Hvordan vet vi at en bruker har avvist et varsel utsikt
og allerede lagt inn et nummer, fordi akkurat nå ingenting som egentlig skjer.
>> Vel, har du kanskje gjettet det riktig, delegering.
Så i tillegg til alle disse erklæringer,
vi må legge til en ny delegasjon til det heter UI varsling utsikt delegat.
Slik at hver enkelt interaksjon eller hendelse
at vi kommer til å ha med UI varsling utsikt
kommer til å bli håndtert av klassen vår også.
>> Så i tillegg til det, vil være varsling utsikt klikkeknapp på indeksen.
Dette er nådd.
Så i dette tilfellet har vi already-- så vi har
fant ut en protokoll som vil håndtere hendelsen når
vi klikker på Ferdig-knappen på vakt visning.
Så hver gang vi avvise varsling syn bør dette skje.
La meg bare teste det svært raskt.
Bra faktisk, har vi nådd her.
>> Så her, hva vi vil ikke faktisk får er faktisk
få the-- Så vi ønsker å få ut teksten som vi tidligere har
angitt i varselet utsikt.
Og basert på tekst, vi er kommer til å vise Mario.
Dette slår veldig fort ut hvis det faktisk fungerer eller ikke.
Så i så fall, hvis vi innspill, la oss si, 10, bør vi se 10.
>> Veldig bra, vi har et tall her.
Det er ganske bra.
Nå er den siste trinnet vil be-- Så siste trinnet vi trenger å gjøre akkurat nå
er bare en ringe Mario med nivå basert på inngangs
at vi har lagt inn varsling utsikt.
Så trenger vi å konvertere denne strengen i iOS.
Statisk overløp er veldig awesome.
Og da har vi bare ringe selv marioWithLevels verdi.
La oss se vil at faktisk fungerer eller ikke.
>> Vi har allerede gitt en pyramide.
La oss prøve å endre høyden.
Som faktisk fungerer.
Det er ganske kult.
Slik at nå kan du bare innspill noen verdi du vil.
La oss bare si fire.
Det er ganske fantastisk.
Så dette er i utgangspunktet en virkelig rask eksempel
for hvordan du oppretter et prosjekt i s-kode og hvordan du virkelig raskt wire opp
noen virkelig enkle hendelser og funksjoner.
>> Så kilden kommer å bli satt på nettet senere.
Så hvis du er interessert i hvordan iOS Mario fungerer,
Jeg kommer til å sette akkurat det samme prosjektene bort på CS50 nettsiden senere.
Vi er i utgangspunktet ferdig med sommer, og før vi er ferdig
Jeg vil bare peke dere til noen virkelig fantastisk ressurser som
er tilgjengelig på nettet.
>> Tydeligvis Apple dokumentasjon kommer til å være svært nyttig.
Men i tillegg til at jeg spesielt anbefaler fire kilder, kode skole,
trehytte, AppCoda og WWDC-videoer.
Kode skole og trehytte er to online utdanne nettsteder,
som spesifikt fokuserer på software engineering.
Spesielt for kode skolen, de har veldig god tutorial på iOS.
>> Det er en veldig rask eksempel for det.
De faktisk skape en virkelig cute-- se på den lille søte iPhone
fyr der borte, det er ganske fantastisk.
Og måten de forklarer Objective C syntaks er helt klart.
Trehytte er den samme.
Og AppCoda er et forum.
Det er faktisk en blogg som ble kjørt av en virkelig opplevd Objective C
programmerer.
Og alle disse tutorials i AppCoda er ganske kort og enkelt å implementere,
sterkt anbefalt.
>> Og hvis du er en utvikler, definitivt gå sjekk
hvordan WWDC videoer der du kan lære om de nyeste iOS programmering
teknikker, APIer og biblioteker.
Så det er ganske mye det for seminaret.
Takk så mye.
Og jeg håper du har det gøy lage din egen iOS app.