1 00:00:00,000 --> 00:00:11,420 2 00:00:11,420 --> 00:00:13,590 >> Tianyu LIU: Hei, hvordan er det kommer alle? 3 00:00:13,590 --> 00:00:20,250 Og dette er iOS App programmering av objektiv c seminar. 4 00:00:20,250 --> 00:00:21,520 Og mitt navn er Tianyu Liu. 5 00:00:21,520 --> 00:00:26,114 Jeg er en Lowell junior akkurat nå, konsentrerer seg i informatikk. 6 00:00:26,114 --> 00:00:28,030 Så i dette seminaret er jeg kommer til å lære deg gutta 7 00:00:28,030 --> 00:00:30,770 litt om hvordan å lage en app. 8 00:00:30,770 --> 00:00:33,030 Yay, bli begeistret for det. 9 00:00:33,030 --> 00:00:36,790 >> Så før vi selv begynner å dykke inn i selve programmerings side, 10 00:00:36,790 --> 00:00:41,840 la oss bare veldig raskt snakke om hvorfor kan det være lurt å bygge en iOS-app? 11 00:00:41,840 --> 00:00:43,940 Hvorfor er iOS så fantastisk? 12 00:00:43,940 --> 00:00:47,250 Så det første problemet, den første ting som er ganske fantastisk for oss, 13 00:00:47,250 --> 00:00:51,190 spesielt som en CS50 student, er at iOS 14 00:00:51,190 --> 00:00:55,860 bruker Objective C. Vel, det er et nytt språk kalt Swift, 15 00:00:55,860 --> 00:00:58,260 men vi kommer ikke til å bruke det i dette seminaret. 16 00:00:58,260 --> 00:01:01,540 Hvis du er interessert i Swift, der er en uavhengig seminar om det. 17 00:01:01,540 --> 00:01:05,590 Men Objective C er i utgangspunktet et overordnet sett av C. Meaning 18 00:01:05,590 --> 00:01:10,230 at alt du bruker i C kan settes til Objective C 19 00:01:10,230 --> 00:01:11,630 meget lett. 20 00:01:11,630 --> 00:01:15,730 >> Som du kan se senere, som faktisk er det noen helt grunnleggende syntaks, er 21 00:01:15,730 --> 00:01:19,790 utgangspunktet nøyaktig det samme, C og Objective C. Så, 22 00:01:19,790 --> 00:01:22,860 siden du har tatt CS50 opp så langt, har du allerede 23 00:01:22,860 --> 00:01:26,500 vet Objective C, minst 40%. 24 00:01:26,500 --> 00:01:30,720 I tillegg har Apple en virkelig robust API for iOS. 25 00:01:30,720 --> 00:01:33,750 Det finnes en rekke virkelig gal ting du kan gjøre med det. 26 00:01:33,750 --> 00:01:36,760 Hvorav den ene er noen faktisk opprettet en iOS-app 27 00:01:36,760 --> 00:01:40,600 for kontrollerende biler, som er ganske interessant. 28 00:01:40,600 --> 00:01:42,610 Sannsynligvis et helikopter er mer spennende. 29 00:01:42,610 --> 00:01:47,020 Men det er hvor kraftig iOS API kan være. 30 00:01:47,020 --> 00:01:49,340 >> Og som du kanskje har funnet ut akkurat nå, 31 00:01:49,340 --> 00:01:53,000 stabelen flow er trolig en av de viktigste elektroniske ressurser 32 00:01:53,000 --> 00:01:54,250 tilgjengelig for deg. 33 00:01:54,250 --> 00:01:58,090 Og gode nyheter, for hver enkelt problem du kan muligens 34 00:01:58,090 --> 00:02:01,840 tenke på mens bygge din avsluttende prosjekt i Objective C, 35 00:02:01,840 --> 00:02:05,910 det er sannsynlig en stack overflow svar. 36 00:02:05,910 --> 00:02:07,420 Det er bare helt utrolig. 37 00:02:07,420 --> 00:02:12,780 I tillegg til det, iOS er virkelig en plattform 38 00:02:12,780 --> 00:02:16,260 hvor du kan nå et stort publikum med liten innsats. 39 00:02:16,260 --> 00:02:20,170 Det er ikke som Android, hvor alt er ganske fragmentert. 40 00:02:20,170 --> 00:02:22,540 >> Alt iOS er enhetlig. 41 00:02:22,540 --> 00:02:25,920 Og så lenge du oppretter en app for iPhone, 42 00:02:25,920 --> 00:02:31,260 du kan veldig lett port som til iPad, iPad mini, eller ulike iPhone-størrelser. 43 00:02:31,260 --> 00:02:33,050 Disse er alle virkelig praktisk. 44 00:02:33,050 --> 00:02:36,430 Og det er bare veldig bra for impressing dine venner. 45 00:02:36,430 --> 00:02:38,920 Du kan bare holde en iPhone og fortell din venn hei, 46 00:02:38,920 --> 00:02:40,250 dette er app jeg gjør. 47 00:02:40,250 --> 00:02:43,860 Du kan gjøre det for noen desktop apps, som er fint. 48 00:02:43,860 --> 00:02:48,870 >> Greit, nå la oss faktisk får inn i språket Objective C. 49 00:02:48,870 --> 00:02:52,910 Så hvorfor ikke vi starte med noen virkelig grunnleggende syntaks. 50 00:02:52,910 --> 00:02:57,410 Som jeg nevnte tidligere Objective C Det er i utgangspunktet et overordnet sett av C. 51 00:02:57,410 --> 00:03:01,860 Så mye grunnleggende syntaks er faktisk akkurat det samme. 52 00:03:01,860 --> 00:03:06,150 Erklære en variabel og legge to variabler sammen 53 00:03:06,150 --> 00:03:09,440 er akkurat som vi har gjort i Mario. 54 00:03:09,440 --> 00:03:11,140 Ingenting nytt her. 55 00:03:11,140 --> 00:03:17,370 >> Tilsvarende leieboer for loop og tilstanden er også den samme. 56 00:03:17,370 --> 00:03:22,370 Du kan gjøre en for loop akkurat som du har gjorde i et Mario [uhørbart]. 57 00:03:22,370 --> 00:03:26,280 Og du kan gjøre forholdene akkurat som det du 58 00:03:26,280 --> 00:03:29,240 har gjort i tidligere p sett. 59 00:03:29,240 --> 00:03:33,400 Men Objective C ikke er helt C, 60 00:03:33,400 --> 00:03:36,640 og det er noe som er litt merkelig om det. 61 00:03:36,640 --> 00:03:42,340 >> Den første er at når du er gjør C-programmering, du vanligvis kaller 62 00:03:42,340 --> 00:03:46,310 inkludere og deretter et bibliotek navn. 63 00:03:46,310 --> 00:03:49,860 Men i Objective C du kaller det import. 64 00:03:49,860 --> 00:03:53,100 Utgangspunktet si funksjonalitet, bare forskjellige navn. 65 00:03:53,100 --> 00:03:55,940 Og strengene er faktisk litt rart. 66 00:03:55,940 --> 00:03:58,250 Du kan se at den første Det som er litt rar 67 00:03:58,250 --> 00:04:04,190 er at du har en ganske weird-- sorry-- du har en ganske rare NS 68 00:04:04,190 --> 00:04:04,960 signere over her. 69 00:04:04,960 --> 00:04:07,452 70 00:04:07,452 --> 00:04:09,160 Og den andre tingen det er slags merkelig 71 00:04:09,160 --> 00:04:14,090 er du en krøllalfa før faktisk erklære strengen. 72 00:04:14,090 --> 00:04:19,209 Så det på skiltet i utgangspunktet betyr at en streng er ikke bare en streng, 73 00:04:19,209 --> 00:04:20,880 det er faktisk et objekt. 74 00:04:20,880 --> 00:04:22,780 Vi kommer til å forklare det senere så gjør ikke 75 00:04:22,780 --> 00:04:25,800 panikk hvis du ikke forstå hva det betyr. 76 00:04:25,800 --> 00:04:29,980 Og utskrift til konsollen er litt annerledes fordi i C kaller vi printf, 77 00:04:29,980 --> 00:04:33,350 men i Objective C kaller vi [uhørbart]. 78 00:04:33,350 --> 00:04:35,640 >> Du lurer kanskje på hva det vil si. 79 00:04:35,640 --> 00:04:38,070 Det er i utgangspunktet printf, bare et annet språk. 80 00:04:38,070 --> 00:04:41,370 Nøyaktig den samme bruk, nøyaktig den samme funksjonalitet. 81 00:04:41,370 --> 00:04:44,060 Vel, det viser seg at Objective C faktisk 82 00:04:44,060 --> 00:04:50,040 har en ns prefiks i nesten alt, alle grunnleggende datatype, 83 00:04:50,040 --> 00:04:52,690 nsstring, NSArray, nsdictionary. 84 00:04:52,690 --> 00:04:56,340 Grunnen er at ns faktisk står for Next Step, 85 00:04:56,340 --> 00:04:59,980 som er et selskap som Steve Jobs har grunnlagt, 86 00:04:59,980 --> 00:05:03,960 som er et selskap hvor språket Objective C er født. 87 00:05:03,960 --> 00:05:06,140 Så dette er i utgangspunktet tradisjon. 88 00:05:06,140 --> 00:05:09,010 Jeg vet det er en liten bit rart, men det er Apple. 89 00:05:09,010 --> 00:05:16,840 >> Så noe som er enda sprøere enn det som er en funksjon erklæring. 90 00:05:16,840 --> 00:05:22,600 Dette er veldig forskjellig fra hva vi se i C, fordi her er det faktisk 91 00:05:22,600 --> 00:05:25,190 ser ikke ut som C lenger. 92 00:05:25,190 --> 00:05:28,810 Hva du har her-- av Måten dette er ikke et punkt, 93 00:05:28,810 --> 00:05:30,690 dette er et minustegn. 94 00:05:30,690 --> 00:05:36,440 Du har et minustegn parentes ugyldig og deretter navnet på funksjonen. 95 00:05:36,440 --> 00:05:38,450 La oss bare si at hvis vi har hello world, deretter 96 00:05:38,450 --> 00:05:42,820 returtypen ville være ugyldig fordi vi tilbake ingenting. 97 00:05:42,820 --> 00:05:44,680 >> Hva blir veldig rart er at når du er 98 00:05:44,680 --> 00:05:49,580 ha mer enn en parameter passerer inn i en samme funksjon som 99 00:05:49,580 --> 00:05:53,870 vil være veldig rart, som vist her. 100 00:05:53,870 --> 00:05:58,230 Vi har en metode navn, kalt addInt til [uhørbart] 101 00:05:58,230 --> 00:06:00,370 og vi passerer en parameter. 102 00:06:00,370 --> 00:06:05,170 Men etter det har vi mer metodenavn samtale med. 103 00:06:05,170 --> 00:06:08,500 Og etter med vi passerer den andre parameteren. 104 00:06:08,500 --> 00:06:11,940 Dette er faktisk litt rart, men alle disse funksjons erklæringer 105 00:06:11,940 --> 00:06:14,770 følge samme mønster som dette. 106 00:06:14,770 --> 00:06:17,450 >> Vi har et minustegn til å begynne med. 107 00:06:17,450 --> 00:06:21,550 Minustegnet kan være et plusstegn noen ganger basert på hva slags metode 108 00:06:21,550 --> 00:06:22,340 er det. 109 00:06:22,340 --> 00:06:25,000 Metoden er i utgangspunktet et annet navn for funksjon. 110 00:06:25,000 --> 00:06:26,760 Og vi kommer til å forklare det senere når 111 00:06:26,760 --> 00:06:30,580 vi snakker om objekt orientert programmering. 112 00:06:30,580 --> 00:06:34,300 Du først angi avkastning skriver inne i parenteser, 113 00:06:34,300 --> 00:06:37,450 etter som kommer metodenavnet. 114 00:06:37,450 --> 00:06:40,310 Du passerer en parameter. 115 00:06:40,310 --> 00:06:44,750 Og hvis du har flere parametre du trenger for å utvide metodenavnet 116 00:06:44,750 --> 00:06:46,770 og i utgangspunktet skrive noe mer her. 117 00:06:46,770 --> 00:06:48,090 >> Det kan være alt du vil. 118 00:06:48,090 --> 00:06:50,140 I vårt tilfelle er det med. 119 00:06:50,140 --> 00:06:56,160 Men du kan si slutt, eller eller eller abc full bar, hva du vil. 120 00:06:56,160 --> 00:06:59,500 Og så etter at du er passerer parameter b. 121 00:06:59,500 --> 00:07:01,750 Dette er en veldig merkelig konvensjonen, men vi er 122 00:07:01,750 --> 00:07:05,800 kommer til å se hvorfor Apple ønsket å gjøre det svært raskt. 123 00:07:05,800 --> 00:07:10,530 Så hvordan kan ringe deg funksjon? 124 00:07:10,530 --> 00:07:15,520 Kalle en funksjon i Objective C er også forskjellig fra C. 125 00:07:15,520 --> 00:07:18,170 >> Egentlig, ringer en funksjon i Objective C 126 00:07:18,170 --> 00:07:21,030 er mer som du snakker med noen. 127 00:07:21,030 --> 00:07:27,030 Her har vi selv, som kalles et objekt. 128 00:07:27,030 --> 00:07:33,830 Du i utgangspunktet fortelle protestere selv å si "Hello World!" 129 00:07:33,830 --> 00:07:36,830 Det er hvordan man skal kalle funksjonen. 130 00:07:36,830 --> 00:07:41,690 En gjenstand og en fremgangsmåte navn kombineres med hverandre. 131 00:07:41,690 --> 00:07:49,600 Og det er her den rare forlengelse for metodenavn virkelig kommer inn i bildet. 132 00:07:49,600 --> 00:07:52,150 >> La oss se på det andre eksempelet. 133 00:07:52,150 --> 00:07:56,780 Vi bare definert en metode som kalles addInt med blah blah blah. 134 00:07:56,780 --> 00:08:00,066 Så i dette tilfellet når du ringer den spesifikke [? meldingen?] det kommer 135 00:08:00,066 --> 00:08:02,035 å se ut som selv addInt: 10 med: 2. 136 00:08:02,035 --> 00:08:05,410 137 00:08:05,410 --> 00:08:08,070 Det høres ut som engelsk. 138 00:08:08,070 --> 00:08:11,980 Selv om funksjonen funksjon erklæring er rart, 139 00:08:11,980 --> 00:08:15,600 poenget med Objective C er metode erklæring mønster, 140 00:08:15,600 --> 00:08:18,830 er at når du ringer funksjonen eller metoden 141 00:08:18,830 --> 00:08:21,980 det vil høres ut som faktiske engelsk. 142 00:08:21,980 --> 00:08:25,270 Så det er veldig intuitivt når du kommer inn i det. 143 00:08:25,270 --> 00:08:28,740 >> Spesielt i dette tilfellet hvor du kan i utgangspunktet 144 00:08:28,740 --> 00:08:33,010 se at funksjonsnavnet er slags dokumentere seg selv. 145 00:08:33,010 --> 00:08:35,390 Du trenger ikke noen mer forklaring for å se 146 00:08:35,390 --> 00:08:42,770 hva som skjer, hva nøyaktig ett parameter gjør. 147 00:08:42,770 --> 00:08:48,470 Går utover det, la oss snakke litt litt om objektorientert programmering. 148 00:08:48,470 --> 00:08:52,160 Objektorientert programmering er en av de grunnleggende programmering 149 00:08:52,160 --> 00:08:57,110 teknikker eller mønstre som er brukes av Objective C. Objective C 150 00:08:57,110 --> 00:09:03,110 heter Objective C, ikke C, for en virkelig god grunn. 151 00:09:03,110 --> 00:09:07,560 >> Så før vi får inn Objective C syntaks, 152 00:09:07,560 --> 00:09:11,670 La oss virkelig raskt se på hva er egentlig et objekt. 153 00:09:11,670 --> 00:09:15,480 Vi har sikkert gjort noe som objekt før, noe som 154 00:09:15,480 --> 00:09:19,780 kalles struct når du er implementere et tre eller en lenket liste 155 00:09:19,780 --> 00:09:25,730 eller [? prøve. ?] Så det er i utgangspunktet som en struct, 156 00:09:25,730 --> 00:09:28,560 men det er mye kraftigere enn det. 157 00:09:28,560 --> 00:09:33,150 Et objekt har metoder og egenskaper. 158 00:09:33,150 --> 00:09:35,310 Metoder er i utgangspunktet funksjoner. 159 00:09:35,310 --> 00:09:39,480 I utgangspunktet fungerer som en spesifikk for et bestemt objekt. 160 00:09:39,480 --> 00:09:45,440 >> Og eiendommer er i utgangspunktet den felt du angir i struct. 161 00:09:45,440 --> 00:09:48,500 Så for hver enkelt objekt vi har noen eiendom 162 00:09:48,500 --> 00:09:53,160 som har noen variabler som er spesifikke for objektet. 163 00:09:53,160 --> 00:09:57,170 Og vi har noen funksjoner som er også bestemt til objektet. 164 00:09:57,170 --> 00:10:01,180 Og funksjonene kalles metoder og variablene kalles egenskaper. 165 00:10:01,180 --> 00:10:03,190 Det er bare et fancy navn. 166 00:10:03,190 --> 00:10:10,440 Mens du faktisk hver enkelt visning du ser mens du åpner en iOS-app, 167 00:10:10,440 --> 00:10:17,720 la oss bare si Twitter eller Facebook, hver enkelt visning du ser er et objekt. 168 00:10:17,720 --> 00:10:22,110 Og til og med hele app er et objekt til å begynne med. 169 00:10:22,110 --> 00:10:25,340 Veldig interessant konsept. 170 00:10:25,340 --> 00:10:28,480 >> Og hvorfor gjør vi ønsker objekt orientert programmering? 171 00:10:28,480 --> 00:10:33,530 Så du kan forestille deg at når du program det blir ganske komplisert. 172 00:10:33,530 --> 00:10:36,400 La oss bare si når du er implementere sjakkbrett, 173 00:10:36,400 --> 00:10:40,020 logikken skal bli veldig komplisert. 174 00:10:40,020 --> 00:10:43,280 Du har 36 forskjellige stykker, slik at hvis du 175 00:10:43,280 --> 00:10:48,370 ønsker å skrive logikk for alle 36 forskjellige brikker i sjakk, 176 00:10:48,370 --> 00:10:52,150 som kommer til å være mye ulike funksjoner og variabler. 177 00:10:52,150 --> 00:10:54,070 Det er en rekke problemer. 178 00:10:54,070 --> 00:10:58,980 Og sannsynligvis du kommer til å skrive en annen metode eller annen funksjon 179 00:10:58,980 --> 00:11:03,950 for hver av stykket til nøyaktig kontrollere hva de gjør. 180 00:11:03,950 --> 00:11:08,830 >> Men hvis du gjør objektorientert programmering, alle disse bitene 181 00:11:08,830 --> 00:11:12,440 kan abstrahert inn ett enkelt objekt. 182 00:11:12,440 --> 00:11:16,111 Og objektet vil ha noen felles egenskaper, som hva slags brikke 183 00:11:16,111 --> 00:11:16,610 er det? 184 00:11:16,610 --> 00:11:17,740 Hvilken farge er det? 185 00:11:17,740 --> 00:11:19,480 Hvordan kan det gå? 186 00:11:19,480 --> 00:11:24,660 Og på den måten du har i stor grad forenklet logikk det. 187 00:11:24,660 --> 00:11:28,480 Så det er bare en virkelig god måte å lage kompliserte programmer, 188 00:11:28,480 --> 00:11:33,700 og hierarkiske forholdet innen programmet, meget enkel. 189 00:11:33,700 --> 00:11:36,800 Som vi skal se hvorfor svært raskt når 190 00:11:36,800 --> 00:11:39,660 vi faktisk gjør programming-- når vi er faktisk 191 00:11:39,660 --> 00:11:42,830 gjør en S-kode programmering økten senere. 192 00:11:42,830 --> 00:11:48,120 >> Vel i tillegg til det, objektorientert programmering 193 00:11:48,120 --> 00:11:50,030 er bare en masse moro. 194 00:11:50,030 --> 00:11:51,990 Du fikk til å designe din egen objekt. 195 00:11:51,990 --> 00:11:56,080 Du fikk til å utforme hva gjør det se ut selv. 196 00:11:56,080 --> 00:11:58,250 Det er ingen rett svar på det. 197 00:11:58,250 --> 00:12:02,940 Og det er helt interessant. 198 00:12:02,940 --> 00:12:07,270 Så i objektorientert programmering, to grunnleggende begreper 199 00:12:07,270 --> 00:12:10,130 vil være klasse og instans. 200 00:12:10,130 --> 00:12:13,570 En klasse er i utgangspunktet en mal for objektet. 201 00:12:13,570 --> 00:12:18,070 Og en forekomst er i utgangspunktet ett bestemt objekt. 202 00:12:18,070 --> 00:12:21,090 >> La oss bare si at du gjør en cookie. 203 00:12:21,090 --> 00:12:24,800 I dette tilfellet er hver enkelt cookie du faktisk ende opp med 204 00:12:24,800 --> 00:12:27,310 kommer til å være et objekt. 205 00:12:27,310 --> 00:12:35,830 Men cookie plate du bruker til å bake alle cookies vil være en klasse. 206 00:12:35,830 --> 00:12:37,880 En klasse er i utgangspunktet en mal. 207 00:12:37,880 --> 00:12:46,170 Og forekomsten vil være ett bestemt objekt skapt ut av den klassen. 208 00:12:46,170 --> 00:12:49,970 >> Og en instans vil bli opprettet basert på klasse erklæring, 209 00:12:49,970 --> 00:12:56,760 som vi vil se i senere lysbilder. 210 00:12:56,760 --> 00:13:00,010 Så la oss faktisk gjør en virkelig rask eksempel [uhørbart]. 211 00:13:00,010 --> 00:13:04,280 La oss si at vi erklære et objekt for en katt. 212 00:13:04,280 --> 00:13:07,930 Objektet skal have-- katten klassen bør 213 00:13:07,930 --> 00:13:11,260 har noen egenskaper og metoder. 214 00:13:11,260 --> 00:13:17,300 Hva slags egenskaper bør de klasse have-- bør katten ha? 215 00:13:17,300 --> 00:13:20,580 >> For eksempel, fargen, alder og rase, de 216 00:13:20,580 --> 00:13:24,440 vil være variabler som er spesifikke for hver katt. 217 00:13:24,440 --> 00:13:27,790 Og de er noen ting at vi bruker for å beskrive en katt. 218 00:13:27,790 --> 00:13:31,880 Hva slags metode, eller hva kan en katt gjøre? 219 00:13:31,880 --> 00:13:37,160 Noen raske eksempler ville være jage mus, spiser fisk eller bare mjaue. 220 00:13:37,160 --> 00:13:40,900 Dette er en virkelig rask eksempel på katt klasse. 221 00:13:40,900 --> 00:13:46,920 Og en veldig spesifikk katt objekt vil være en katt 222 00:13:46,920 --> 00:13:50,930 hvor vi spesifisere farge, alder og rase. 223 00:13:50,930 --> 00:13:53,790 >> I så fall er vår objekt ikke lenger er en klasse lenger. 224 00:13:53,790 --> 00:14:00,010 Vi kopierer malen fra klassen og vi spesifisere hver spesifikk informasjon 225 00:14:00,010 --> 00:14:04,510 for det bestemte objektet for å gjøre den uavhengig. 226 00:14:04,510 --> 00:14:09,350 Og når du ringer en fremgangsmåte inne i et objekt, 227 00:14:09,350 --> 00:14:16,640 du bare ringe meow på objektet, som er katten du nettopp opprettet. 228 00:14:16,640 --> 00:14:19,020 >> Sannsynligvis vil du skrive ut noe sånt som "Hello World! 229 00:14:19,020 --> 00:14:20,000 Mjaue. " 230 00:14:20,000 --> 00:14:22,110 Ganske søt. 231 00:14:22,110 --> 00:14:24,500 Greit, la oss bare få inn noen detaljer 232 00:14:24,500 --> 00:14:30,650 og se hva betyr at sette til å være iOS programmering. 233 00:14:30,650 --> 00:14:36,500 Så i iOS programmering hver enkelt klasse vil bli gjennomført i to filer. 234 00:14:36,500 --> 00:14:41,420 En fil er her, som kalles grensesnittet. 235 00:14:41,420 --> 00:14:45,300 Annen fil er her, som kalles gjennomføring. 236 00:14:45,300 --> 00:14:48,890 >> Vanligvis grensesnittet vil ha extension.h 237 00:14:48,890 --> 00:14:51,740 som vi har sett i C-biblioteker. 238 00:14:51,740 --> 00:14:56,340 Og gjennomføring fil er kommer til å ha extension.n. 239 00:14:56,340 --> 00:14:57,260 Det er litt merkelig. 240 00:14:57,260 --> 00:15:01,270 Men .N betyr faktisk .c, er det ingen fundamental forskjell mellom de 241 00:15:01,270 --> 00:15:02,100 to. 242 00:15:02,100 --> 00:15:06,650 Så i dette tilfellet, kan vi se at vi er erklære grensesnitt, Cat: objekt. 243 00:15:06,650 --> 00:15:10,660 244 00:15:10,660 --> 00:15:13,760 Som kalles arv. 245 00:15:13,760 --> 00:15:19,170 Vi er i utgangspunktet arve katt klasse fra objektklassen. 246 00:15:19,170 --> 00:15:24,790 Så hver eiendom og metode som var tidligere definert i objektklasse 247 00:15:24,790 --> 00:15:28,560 vil automatisk bli definert i en katt klassen også. 248 00:15:28,560 --> 00:15:35,900 >> I tillegg til at vi definerer fargen, rase og alder, tre variabler. 249 00:15:35,900 --> 00:15:39,360 Som faktisk ser ut som noe du har gjort før. 250 00:15:39,360 --> 00:15:41,770 Det ser ut som struct. 251 00:15:41,770 --> 00:15:44,950 Det er i utgangspunktet syntaksen for struct erklæring, 252 00:15:44,950 --> 00:15:47,710 og som er helt korrekt. 253 00:15:47,710 --> 00:15:51,825 Og siden jeg nevnte tidligere, forskjellen en struct 254 00:15:51,825 --> 00:15:53,960 og et objekt, en av grunnleggende forskjeller 255 00:15:53,960 --> 00:15:59,080 er at et objekt har metoden mens en struct bare har variabler. 256 00:15:59,080 --> 00:16:03,450 Så i tillegg til egenskapene eller variabler vi har opprettet for objektet, 257 00:16:03,450 --> 00:16:05,700 vi spesifiserer noen metode. 258 00:16:05,700 --> 00:16:09,720 >> La oss bare si her vi har to metoder, en er mjaue, 259 00:16:09,720 --> 00:16:12,460 en annen er jage mus. 260 00:16:12,460 --> 00:16:18,600 Vi sannsynligvis vil være passerer en parameter basert på vår forrige metoden 261 00:16:18,600 --> 00:16:20,440 erklæring mønster. 262 00:16:20,440 --> 00:16:22,160 Du sannsynligvis vil være passerer en mus. 263 00:16:22,160 --> 00:16:25,180 Og du vil sannsynligvis ønske å returnere en bool til kjenne 264 00:16:25,180 --> 00:16:30,010 hvis katten din har lykkes fanget mus eller ikke. 265 00:16:30,010 --> 00:16:33,170 >> Dette er grensesnittet, men vi kan se at grensesnittet faktisk 266 00:16:33,170 --> 00:16:35,150 gjør ikke noe. 267 00:16:35,150 --> 00:16:40,800 Det bare forteller et program hva exists-- hva som finnes i katten klassen. 268 00:16:40,800 --> 00:16:43,640 Så for at det program for å gjøre noe, 269 00:16:43,640 --> 00:16:46,680 vi må ha gjennomførings filer. 270 00:16:46,680 --> 00:16:51,940 Så her er det første vi gjør selvsagt vi importerer grensesnittet. 271 00:16:51,940 --> 00:16:56,470 Etter at vi importerer grensesnittet, Vi definerer metoden. 272 00:16:56,470 --> 00:17:00,150 >> La oss bare si her meow ville bare skrive ut 273 00:17:00,150 --> 00:17:01,740 "Hello World!" til konsollen. 274 00:17:01,740 --> 00:17:04,319 275 00:17:04,319 --> 00:17:08,460 Og etter gjennomføringen fil, er vi ganske mye gjort. 276 00:17:08,460 --> 00:17:14,530 Dette er i utgangspunktet en klasse erklæring for en klasse. 277 00:17:14,530 --> 00:17:19,970 Så nå er spørsmålet blir, hvordan erklærer du en variabel? 278 00:17:19,970 --> 00:17:26,880 Måten du bruker en klasse for å skape en objekt i Objective C er skrevet her. 279 00:17:26,880 --> 00:17:30,730 >> Du først spesifisere at Dette er en katt peker, 280 00:17:30,730 --> 00:17:38,700 fordi hvert objekt i Objective C endelig er implementert som en peker. 281 00:17:38,700 --> 00:17:46,210 Og du kaller klassen, kaller dem som Alloc, som er utgangspunktet malloc, 282 00:17:46,210 --> 00:17:51,220 forteller operativsystemet at du trenger litt minne plass for dette objektet. 283 00:17:51,220 --> 00:17:55,780 Etter at du har et objekt allerede, og du bare initialisere den. 284 00:17:55,780 --> 00:17:56,780 Dette er bare konvensjonen. 285 00:17:56,780 --> 00:17:59,390 286 00:17:59,390 --> 00:18:04,410 Jeg vet det er er litt rart, men dette er faktisk hvordan Apple gjør ting. 287 00:18:04,410 --> 00:18:07,130 >> Tilordne egenskaper er faktisk ganske grei. 288 00:18:07,130 --> 00:18:09,250 Det er svært lik hva du gjør når 289 00:18:09,250 --> 00:18:13,780 du tildele noen spesifikke felt inne i struct. 290 00:18:13,780 --> 00:18:16,830 Du må bare variabelen navn, navnet på egenskapen, 291 00:18:16,830 --> 00:18:20,140 og tildele en bestemt verdi til det. 292 00:18:20,140 --> 00:18:24,120 Og kalle en metode er svært like. 293 00:18:24,120 --> 00:18:29,080 Det å kalle en metode er utgangspunktet hva jeg snakker om 294 00:18:29,080 --> 00:18:32,390 for å ringe noen metode i Objective C. 295 00:18:32,390 --> 00:18:36,660 >> Du sender et objekt, i dette tilfellet kommer det til å være myCat, 296 00:18:36,660 --> 00:18:42,490 og du passerer metodenavnet. 297 00:18:42,490 --> 00:18:47,130 Som om du snakker til objektet, myCat, som du bør mjaue. 298 00:18:47,130 --> 00:18:48,570 Det er ganske interessant. 299 00:18:48,570 --> 00:18:52,010 300 00:18:52,010 --> 00:18:55,680 Etter at det er ett mer grunnleggende design mønster 301 00:18:55,680 --> 00:18:59,940 at vi trenger å snakke om før de kommer til selve S-kode. 302 00:18:59,940 --> 00:19:03,300 At design mønster kalles hendelsesdrevet programmering. 303 00:19:03,300 --> 00:19:09,660 Dette er sannsynligvis også en av de mest grunnleggende ideer i iOS programmering. 304 00:19:09,660 --> 00:19:14,410 >> Så har du sannsynligvis ikke vet hva er hendelsen drevet programmering, 305 00:19:14,410 --> 00:19:16,990 men det er egentlig ikke så skummelt. 306 00:19:16,990 --> 00:19:20,400 Vel faktisk, har du allerede gjort det før. 307 00:19:20,400 --> 00:19:24,894 Dette er en av de linjene du har sikkert allerede skrevet i den siste [uhørbart] 308 00:19:24,894 --> 00:19:26,810 av CS50, google.maps.event.addListener (markør, 309 00:19:26,810 --> 00:19:27,810 "Klikk", function () {}) :. 310 00:19:27,810 --> 00:19:32,410 311 00:19:32,410 --> 00:19:37,620 Ved å kalle denne linjen du er hovedsak forteller datamaskinen 312 00:19:37,620 --> 00:19:42,650 at når arrangementet kalt "Klikk" som skjer på markør, 313 00:19:42,650 --> 00:19:43,630 bruke denne funksjonen. 314 00:19:43,630 --> 00:19:46,910 315 00:19:46,910 --> 00:19:50,950 >> Dette er veldig forskjellig fra hva du gjør i mario.c. 316 00:19:50,950 --> 00:19:56,670 I mario.c du bare kjøre programmet en gang, det gir deg en utgang, 317 00:19:56,670 --> 00:19:58,590 og du er ferdig. 318 00:19:58,590 --> 00:20:02,590 Dette er liksom som en skudd programmer. 319 00:20:02,590 --> 00:20:05,830 Hendelsesdrevet programmer er veldig, veldig forskjellige. 320 00:20:05,830 --> 00:20:10,230 La oss forestille seg, hvis Facebook er et ett shot program det er egentlig ikke bra. 321 00:20:10,230 --> 00:20:13,750 Du bare gå til Facebook en gang, og det er gjort. 322 00:20:13,750 --> 00:20:16,700 Det gir deg noen utgang og du aldri fikk den tilbake. 323 00:20:16,700 --> 00:20:19,380 Du fikk aldri noe mer. 324 00:20:19,380 --> 00:20:23,880 >> Så her, spesielt mønsteret vi bruker er 325 00:20:23,880 --> 00:20:26,940 hendelsesdrevet, slik at hver funksjon vil 326 00:20:26,940 --> 00:20:31,480 bli tatt ut fra hva hendelse har skjedd. 327 00:20:31,480 --> 00:20:34,670 For eksempel, dersom vi en knapp og vi spesifisere 328 00:20:34,670 --> 00:20:39,870 at når det klikkes, kaller funksjonen som heter "Hello World!" 329 00:20:39,870 --> 00:20:47,810 På den måten kan vi virkelig administrere funksjonen logikk 330 00:20:47,810 --> 00:20:50,560 flyte på en meget fleksibel måte. 331 00:20:50,560 --> 00:20:55,840 Brukeren kan gjøre eller ringe en funksjon som allerede har blitt kalt. 332 00:20:55,840 --> 00:20:59,900 Det er helt basert på hva brukerne gjør. 333 00:20:59,900 --> 00:21:04,080 >> Så vi kan se at dette er faktisk mye bedre enn mario.c. 334 00:21:04,080 --> 00:21:07,190 Og gode nyheten er at det er faktisk ikke et nytt konsept. 335 00:21:07,190 --> 00:21:12,140 Dere har allerede gjort at i det siste problemet definert. 336 00:21:12,140 --> 00:21:16,640 Så i Objective C er det tre ulike diagrammer 337 00:21:16,640 --> 00:21:19,030 for hendelsesdrevet programmering. 338 00:21:19,030 --> 00:21:21,970 Det første diagram er kalt target handling, 339 00:21:21,970 --> 00:21:26,990 hvor du binde en knapp trykk med noen funksjon. 340 00:21:26,990 --> 00:21:31,590 La oss bare si, når du klikker noen knapp, ringe deg noen funksjon. 341 00:21:31,590 --> 00:21:33,620 Dette er meget enkelt mål handling. 342 00:21:33,620 --> 00:21:35,580 >> Den andre er faktisk den vanskeligste, 343 00:21:35,580 --> 00:21:38,450 det heter delegasjon på protokollen. 344 00:21:38,450 --> 00:21:41,800 Vi kommer til å forklare som i stor detalj senere. 345 00:21:41,800 --> 00:21:44,420 Og den tredje måten er varselet. 346 00:21:44,420 --> 00:21:46,770 Dette er faktisk ikke veldig viktig så langt 347 00:21:46,770 --> 00:21:50,920 som vi er opptatt av, fordi sjansen at du kommer til å bruke varsling 348 00:21:50,920 --> 00:21:53,310 i det endelige prosjektet er ganske lav. 349 00:21:53,310 --> 00:21:56,440 Så vi kommer til å hoppe over den delen. 350 00:21:56,440 --> 00:21:59,460 >> Og vi kommer til å dykke inn delegasjon på protokollen. 351 00:21:59,460 --> 00:22:02,380 352 00:22:02,380 --> 00:22:04,470 Så hva er egentlig en protokoll? 353 00:22:04,470 --> 00:22:06,450 Eller hva er egentlig en delegasjon? 354 00:22:06,450 --> 00:22:09,670 La oss snakke om protokollen til å begynne med. 355 00:22:09,670 --> 00:22:13,360 Protokoller er ingenting, men hendelser. 356 00:22:13,360 --> 00:22:19,230 Men disse hendelsene er gitt til deg av Apple til å begynne med. 357 00:22:19,230 --> 00:22:22,640 For eksempel, jeg er ikke helt sikker på hvor mange av dere 358 00:22:22,640 --> 00:22:27,930 gutta bruke Apples originale app post eller kontakt, 359 00:22:27,930 --> 00:22:32,180 men hver gang du rulle bord og trykk på bestemt celle 360 00:22:32,180 --> 00:22:36,130 på bordet, som er en hendelse. 361 00:22:36,130 --> 00:22:38,330 >> Og hvis du ønsker å gjøre denne hendelsen selv, 362 00:22:38,330 --> 00:22:40,410 det er faktisk litt vanskelig. 363 00:22:40,410 --> 00:22:44,880 Så Apple har gitt det selv til deg slik at du bare kan direkte bruke 364 00:22:44,880 --> 00:22:49,610 Ved å gjøre noe på egen hånd. 365 00:22:49,610 --> 00:22:52,980 Protokoller er faktisk virkelig, virkelig mye brukt 366 00:22:52,980 --> 00:22:58,320 i Objective C. Vel i Faktisk hver eneste app 367 00:22:58,320 --> 00:23:00,870 har noe fanget app delegat. 368 00:23:00,870 --> 00:23:06,330 Innsiden av delikat er alle protokoller for å laste app. 369 00:23:06,330 --> 00:23:12,470 >> La oss bare si at det er en hendelse for app gjorde belastning. 370 00:23:12,470 --> 00:23:18,200 Så hva som skal skje etter at du har laget en app, etter at du åpner programmet, 371 00:23:18,200 --> 00:23:22,630 når du lukker programmet, eller etter du sette iPhone i dvale. 372 00:23:22,630 --> 00:23:27,480 Disse er alle hendelser som har allerede blitt gitt til deg. 373 00:23:27,480 --> 00:23:34,730 Og opprinnelig inne disse partiklene vil det ikke være implementeringen. 374 00:23:34,730 --> 00:23:39,750 Apple har nettopp fortalt deg at denne funksjonen vil skje når noen hendelse skjer, 375 00:23:39,750 --> 00:23:44,380 men hva du gjør med det Funksjonen er helt opp til deg. 376 00:23:44,380 --> 00:23:49,290 >> Delegasjon er i utgangspunktet fortelle klassen 377 00:23:49,290 --> 00:23:53,060 at du bør håndtere disse protokollene. 378 00:23:53,060 --> 00:23:55,340 Det er en liten bit forvirrende, men det vil være 379 00:23:55,340 --> 00:23:59,380 mye klarere når vi gjør S-koder i aksjon. 380 00:23:59,380 --> 00:24:04,760 Delegasjon på protokollen er faktisk en meget robust mekanisme i den forstand 381 00:24:04,760 --> 00:24:08,160 at hvis vi gjør delegasjon i en bestemt klasse, 382 00:24:08,160 --> 00:24:12,400 kan vi i hovedsak håndtere alle typer arrangementer 383 00:24:12,400 --> 00:24:17,040 bruker noen klasse vi har, svært praktisk verktøy. 384 00:24:17,040 --> 00:24:21,530 >> Så en rask eksempel for delegasjon på protokollen 385 00:24:21,530 --> 00:24:24,120 vil være hva jeg nettopp snakket om. 386 00:24:24,120 --> 00:24:26,720 387 00:24:26,720 --> 00:24:30,890 Denne protokollen spesifikt kalles Tableview [uhørbart] velge rolle 388 00:24:30,890 --> 00:24:35,480 på [? indeksen?] [? fortid. ?] Så dette en arrangement som ville være fanget når 389 00:24:35,480 --> 00:24:39,710 faktisk trykker på et bestemt celle i tabellvisning, 390 00:24:39,710 --> 00:24:43,570 la oss bare si i e-posten din eller i kontakt app. 391 00:24:43,570 --> 00:24:48,180 >> Inne i en funksjon det var opprinnelig å gjøre ingenting. 392 00:24:48,180 --> 00:24:51,950 Funksjonen gjør ikke gjøre noe som standard. 393 00:24:51,950 --> 00:24:55,540 Men du kan angi hva funksjonen gjør, 394 00:24:55,540 --> 00:24:59,610 gitt hva du vil ha ut av programmet ditt. 395 00:24:59,610 --> 00:25:01,610 Svært praktisk verktøy. 396 00:25:01,610 --> 00:25:06,840 Og med alt som blir sagt, jeg i utgangspunktet 397 00:25:06,840 --> 00:25:11,430 dekke noen helt grunnleggende syntaks og grunnleggende konseptet for Objective C 398 00:25:11,430 --> 00:25:15,860 programmering, og vi kan gjøre noen s-kode. 399 00:25:15,860 --> 00:25:17,980 Mye mer spennende. 400 00:25:17,980 --> 00:25:21,070 Så s kode er faktisk en litt overveldende 401 00:25:21,070 --> 00:25:23,330 når du åpner den for første gang. 402 00:25:23,330 --> 00:25:26,640 >> En rask notat, så hvis du ønsker å gjøre iOS utvikling, 403 00:25:26,640 --> 00:25:29,630 Jeg anbefaler at du har en Mac. 404 00:25:29,630 --> 00:25:33,930 Fordi du gjør iOS utvikling på Windows er veldig, veldig vanskelig. 405 00:25:33,930 --> 00:25:37,560 Det er gjennomførbart, men det er veldig vanskelig. 406 00:25:37,560 --> 00:25:40,610 Og du definitivt gjøre ikke ønsker å bruke g redigere. 407 00:25:40,610 --> 00:25:47,950 Så i s-kode har vi flere forskjellige områder. 408 00:25:47,950 --> 00:25:53,050 Når du først åpner opp s kode vil du se et navigeringsområdet 409 00:25:53,050 --> 00:25:57,470 som i utgangspunktet viser deg alle filer som er i det nåværende prosjektet. 410 00:25:57,470 --> 00:26:03,590 >> Du har en verktøylinje området, som er i utgangspunktet administrerende utsikt, 411 00:26:03,590 --> 00:26:08,570 eller noen litt rask verktøy om s koden selv. 412 00:26:08,570 --> 00:26:11,140 Og dette er selve redaktør området. 413 00:26:11,140 --> 00:26:15,900 Dette området er svært lik g redigere men mye bedre enn g redigere. 414 00:26:15,900 --> 00:26:21,150 Og i dette området til høyre, er kalt et bruksområde. 415 00:26:21,150 --> 00:26:27,170 Området blir virkelig hendig når du oppretter grensesnitt eller spesifisere 416 00:26:27,170 --> 00:26:30,070 noen raske oppsett for din app. 417 00:26:30,070 --> 00:26:34,570 >> Og det siste området er debugging. 418 00:26:34,570 --> 00:26:37,970 Dette området inneholder konsollen. 419 00:26:37,970 --> 00:26:43,170 Så når du sier printf, eller NSLog i vårt tilfelle, 420 00:26:43,170 --> 00:26:47,330 alle resultatene er kommer til å bli skrevet her. 421 00:26:47,330 --> 00:26:48,260 All right? 422 00:26:48,260 --> 00:26:52,090 Jeg antar vi kan veldig raskt gjøre et eksempel for iOS programmering. 423 00:26:52,090 --> 00:26:54,220 Og la oss faktisk åpne opp s kode. 424 00:26:54,220 --> 00:26:57,210 425 00:26:57,210 --> 00:27:01,346 Så hver gang du åpner opp s kode, er det kommer til å dukke opp noe sånt. 426 00:27:01,346 --> 00:27:03,220 Det kommer til å spørre deg hva ønsker du å gjøre? 427 00:27:03,220 --> 00:27:06,830 Du ønsker å starte noe gjør tilfeldig, en lekeplass, i utgangspunktet du 428 00:27:06,830 --> 00:27:11,250 kan bare teste koden uten faktisk binde seg til noen app. 429 00:27:11,250 --> 00:27:13,020 >> Ønsker du å opprette et nytt prosjekt? 430 00:27:13,020 --> 00:27:16,660 Eller ønsker du å fortsette arbeider på eksisterende prosjekt? 431 00:27:16,660 --> 00:27:20,270 I vårt tilfelle skal vi for å opprette et nytt prosjekt. 432 00:27:20,270 --> 00:27:22,980 Så det er veldig fint, s kode faktisk har allerede 433 00:27:22,980 --> 00:27:26,820 gitt deg noen maler for å lage objekter. 434 00:27:26,820 --> 00:27:32,680 Hvis du ønsker å gjøre et spill, s kode faktisk har et spill mal for deg, 435 00:27:32,680 --> 00:27:36,890 har side baserte applikasjoner, Kategorien basert program. 436 00:27:36,890 --> 00:27:39,280 I dette tilfellet skal vi å gjøre noe veldig enkelt, 437 00:27:39,280 --> 00:27:43,230 og vi kommer til å bruke en enkelt visning søknad. 438 00:27:43,230 --> 00:27:48,270 >> Etter det akkurat hva du vil kalle produktet, og hva er ditt navn, 439 00:27:48,270 --> 00:27:52,760 hva er din identifikator, og hvilket språk bruker du. 440 00:27:52,760 --> 00:27:57,060 Her ønsker ikke vi å sjekk bruke Core data. 441 00:27:57,060 --> 00:28:00,170 Kjernen data er i utgangspunktet en databasing iOS. 442 00:28:00,170 --> 00:28:05,360 Hvis du gjør kjernedata, s koden kommer til å definere 443 00:28:05,360 --> 00:28:07,710 en mye mer komplisert klasser for deg. 444 00:28:07,710 --> 00:28:12,740 Så for å holde alt enkelt, vi er bare kommer til å gjøre uten kjernedata 445 00:28:12,740 --> 00:28:15,290 akkurat nå. 446 00:28:15,290 --> 00:28:18,030 >> Problemet vi kommer til å være bruker er at-- problemet 447 00:28:18,030 --> 00:28:23,770 vi kommer til å være å skape er at vi utgangspunktet ønsker å importere Mario fra C 448 00:28:23,770 --> 00:28:25,437 til en iOS-app. 449 00:28:25,437 --> 00:28:26,645 Så la oss kalle det Mario-iOS. 450 00:28:26,645 --> 00:28:31,230 451 00:28:31,230 --> 00:28:34,880 Selvfølgelig du angi hva du ønsker å sette i prosjektet. 452 00:28:34,880 --> 00:28:37,870 Og der vi går. 453 00:28:37,870 --> 00:28:41,390 >> Så dette er en liten bit overveldende, men dette er faktisk 454 00:28:41,390 --> 00:28:43,540 hva vi nettopp så på lysbildene. 455 00:28:43,540 --> 00:28:49,710 Og det første området vi ser akkurat nå er i utgangspunktet prosjekt konfigurasjon. 456 00:28:49,710 --> 00:28:53,390 Så alt du ønsker å gjøre prosjektet, hva slags enhet, 457 00:28:53,390 --> 00:28:58,810 la oss bare si hva slags enhet ønsker du din app skal vises på? 458 00:28:58,810 --> 00:29:01,280 Er det iPhone, iPad eller universell? 459 00:29:01,280 --> 00:29:04,660 Slik enhet orientering, alt dette. 460 00:29:04,660 --> 00:29:08,490 Ikke veldig viktig, men kan være, men dette 461 00:29:08,490 --> 00:29:11,050 er et sted hvor du setter opp prosjektet ditt hvis du faktisk 462 00:29:11,050 --> 00:29:15,180 ønsker å distribuere til Apple Store. 463 00:29:15,180 --> 00:29:20,420 >> Greit, la oss se på noe som er inne i vår kode. 464 00:29:20,420 --> 00:29:22,360 La oss gå gjennom filen navigator. 465 00:29:22,360 --> 00:29:30,140 Og disse er alle filene som allerede kom med malen, veldig hyggelig. 466 00:29:30,140 --> 00:29:35,980 Så når vi klikker på en av dem dette er hva det ser ut. 467 00:29:35,980 --> 00:29:38,530 Svært lik g redigere. 468 00:29:38,530 --> 00:29:41,340 Men du kan se at den syntax highlighting er sannsynligvis 469 00:29:41,340 --> 00:29:42,780 en litt hyggeligere. 470 00:29:42,780 --> 00:29:45,610 Og det er faktisk mye mer kraftigere enn g redigering. 471 00:29:45,610 --> 00:29:49,970 Og du kan autofullfør en masse ting for deg, 472 00:29:49,970 --> 00:29:52,370 som vi vil se svært raskt. 473 00:29:52,370 --> 00:29:54,100 >> La oss åpne debugging området også. 474 00:29:54,100 --> 00:30:02,790 475 00:30:02,790 --> 00:30:07,000 All right, som vi kan se, konsollen er rett her. 476 00:30:07,000 --> 00:30:13,840 Dette er hva du kommer til å se hvor du er i printf eller nsloging noe. 477 00:30:13,840 --> 00:30:17,155 Så uten videre, la oss faktisk kompilere programmet og se hva som skjer. 478 00:30:17,155 --> 00:30:20,000 479 00:30:20,000 --> 00:30:23,410 En viktig funksjon for s kode, er at s-kode 480 00:30:23,410 --> 00:30:25,850 kommer med en iPhone simulator. 481 00:30:25,850 --> 00:30:29,820 Slik at du ikke trenger å ha en iPhone for å prøve prosjektet, 482 00:30:29,820 --> 00:30:34,440 s kode kan simulere at for du, som vi kan se akkurat nå. 483 00:30:34,440 --> 00:30:36,406 >> Det er ganske fin. 484 00:30:36,406 --> 00:30:38,640 Det er å ta litt litt tid til å kompilere 485 00:30:38,640 --> 00:30:43,040 og i utgangspunktet har vi en tom søknad, 486 00:30:43,040 --> 00:30:44,640 som faktisk gjør ingenting. 487 00:30:44,640 --> 00:30:46,175 Men det kompilerer. 488 00:30:46,175 --> 00:30:47,380 Det er ganske fantastisk. 489 00:30:47,380 --> 00:30:50,200 Det er mye bedre enn C, ikke sant? 490 00:30:50,200 --> 00:30:52,130 Greit, så la oss prøver å legge til noe. 491 00:30:52,130 --> 00:30:56,050 492 00:30:56,050 --> 00:31:02,650 En fil som er litt rare her kalles storyboard. 493 00:31:02,650 --> 00:31:08,020 Dette er faktisk en stor, fantastisk funksjon for s-kode. 494 00:31:08,020 --> 00:31:14,170 Fordi i s-kode, kan du faktisk dra og slippe elementer på grensesnittet 495 00:31:14,170 --> 00:31:17,430 og det vil direkte dukke opp. 496 00:31:17,430 --> 00:31:18,055 La oss prøve det. 497 00:31:18,055 --> 00:31:21,230 498 00:31:21,230 --> 00:31:27,236 >> Vi slippe en etikett her, "Hello World !!!" 499 00:31:27,236 --> 00:31:29,740 Vi kan sentrere det. 500 00:31:29,740 --> 00:31:30,970 Ganske kult. 501 00:31:30,970 --> 00:31:33,915 Nå la oss kjøre denne stop simulering. 502 00:31:33,915 --> 00:31:36,940 503 00:31:36,940 --> 00:31:38,700 Her har vi "Hello World !!!" 504 00:31:38,700 --> 00:31:40,810 Vi hadde ikke engang gjøre noe koding ennå. 505 00:31:40,810 --> 00:31:42,750 Hva pokker er det som skjer? 506 00:31:42,750 --> 00:31:45,880 Dette er hvor kraftig Interface Builder kan være. 507 00:31:45,880 --> 00:31:48,030 Noen sa til og med at Du kan sannsynligvis bare 508 00:31:48,030 --> 00:31:52,800 fullføre en app uten skriftlig trolig tusen linjer med kode 509 00:31:52,800 --> 00:31:54,820 bare ved hjelp av Interface Builder. 510 00:31:54,820 --> 00:31:59,680 Men det er nok ikke den beste måten å gjøre det. 511 00:31:59,680 --> 00:32:01,670 >> Nå la oss faktisk komme ned til koding. 512 00:32:01,670 --> 00:32:04,860 513 00:32:04,860 --> 00:32:08,330 Slik at strukturen for filen er faktisk veldig interessant 514 00:32:08,330 --> 00:32:15,610 fordi, som du kan se, er det er ikke hovedfunksjon hvor som helst. 515 00:32:15,610 --> 00:32:17,466 Se? 516 00:32:17,466 --> 00:32:19,340 Som vi har nevnt før, du kan se at dette 517 00:32:19,340 --> 00:32:22,830 er en implementering fil for en bestemt klasse. 518 00:32:22,830 --> 00:32:25,690 Men det er ingen hoved hvor som helst. 519 00:32:25,690 --> 00:32:27,490 Så hvor er hoved? 520 00:32:27,490 --> 00:32:31,970 Egentlig er det en hoved, men Hoved er faktisk skjult fra deg. 521 00:32:31,970 --> 00:32:34,560 Den viktigste er her. 522 00:32:34,560 --> 00:32:37,120 Det ser kjent ut. 523 00:32:37,120 --> 00:32:41,000 >> Så i utgangspunktet hva iOS gjør inne hoved 524 00:32:41,000 --> 00:32:43,540 er at når hoved er heter, som er utgangspunktet 525 00:32:43,540 --> 00:32:49,000 når programmet kjøres, det skaper et objekt kalt AppDelegate. 526 00:32:49,000 --> 00:32:52,980 527 00:32:52,980 --> 00:32:57,350 Som jeg nevnte tidligere, hele app er faktisk et objekt av seg selv. 528 00:32:57,350 --> 00:33:02,270 Så på denne måten, i utgangspunktet iOS app forteller kompilatoren 529 00:33:02,270 --> 00:33:05,540 at OK, jeg kommer til å skape et produkt som kalles AppDelegate, 530 00:33:05,540 --> 00:33:07,620 og som kommer til å være min app. 531 00:33:07,620 --> 00:33:09,640 Så du må gå gjennom at AppDelegate 532 00:33:09,640 --> 00:33:12,040 og se hva den fyren gjør. 533 00:33:12,040 --> 00:33:14,850 Min jobb er gjort for meg. 534 00:33:14,850 --> 00:33:22,070 >> Og i AppDelegate kan du se at er det noen virkelig rare funksjoner, 535 00:33:22,070 --> 00:33:25,290 vel faktisk metoder, som Apple har allerede gitt deg. 536 00:33:25,290 --> 00:33:27,464 Hva er dette? 537 00:33:27,464 --> 00:33:31,010 Dette er faktisk bare protokoller at jeg snakket om. 538 00:33:31,010 --> 00:33:35,670 Så dette er hendelser som Apple har gitt deg til å begynne med. 539 00:33:35,670 --> 00:33:38,050 Det er ingenting i noen av funksjonene akkurat nå, 540 00:33:38,050 --> 00:33:40,820 men hvis vi ønsker å initial noe for vår app 541 00:33:40,820 --> 00:33:46,140 før du får inn visning en visning, gjør vi det her. 542 00:33:46,140 --> 00:33:51,150 >> Du kan bare lese navnet og jeg antar arrangementet er faktisk veldig klar. 543 00:33:51,150 --> 00:33:54,160 544 00:33:54,160 --> 00:33:58,350 Så nå hoved har skapt et objekt for AppDelegate. 545 00:33:58,350 --> 00:34:05,220 Og hva AppDelegate kommer til å gjøre er faktisk også skjult for deg. 546 00:34:05,220 --> 00:34:09,250 Den AppDelegate kommer til å starte lasting av ViewController lager. 547 00:34:09,250 --> 00:34:13,170 Så det er i utgangspunktet kommer til å starte laste opp alle visninger som du har 548 00:34:13,170 --> 00:34:17,500 og bare gjengi utsikten basert på hierarkiet. 549 00:34:17,500 --> 00:34:21,280 >> Så i dette tilfellet har vi bare én visning, noe som er her. 550 00:34:21,280 --> 00:34:25,060 Så det er den eneste visningen som kommer til å bli kalt. 551 00:34:25,060 --> 00:34:28,159 Den ViewController logikken er riktig her. 552 00:34:28,159 --> 00:34:32,159 Dette er koden som faktisk styrer visningen vi nettopp så. 553 00:34:32,159 --> 00:34:33,679 Greit, la oss gjøre noe her. 554 00:34:33,679 --> 00:34:44,030 555 00:34:44,030 --> 00:34:50,560 Så viewDidLoad høres ut som en hendelse, når det faktisk er dette også en delegat, 556 00:34:50,560 --> 00:34:52,500 Dette er også en protokoll. 557 00:34:52,500 --> 00:34:56,350 >> Så uansett hva utsikten er lastet, alt inne i funksjon 558 00:34:56,350 --> 00:34:57,920 vil bli kalt. 559 00:34:57,920 --> 00:35:02,840 I dette tilfellet bør vi se "Hello Tianyu! "Hvis vi kjører programmet. 560 00:35:02,840 --> 00:35:09,820 561 00:35:09,820 --> 00:35:12,842 Det begynner å bli litt treg kompilering storyboard-filer. 562 00:35:12,842 --> 00:35:15,440 563 00:35:15,440 --> 00:35:18,190 Bra faktisk, ser vi en utgang for det. 564 00:35:18,190 --> 00:35:20,720 Det er ganske kult. 565 00:35:20,720 --> 00:35:22,000 Nå la oss faktisk gjør Mario. 566 00:35:22,000 --> 00:35:25,400 567 00:35:25,400 --> 00:35:27,625 Jeg kommer til å definere fungere svært raskt. 568 00:35:27,625 --> 00:35:31,510 569 00:35:31,510 --> 00:35:54,245 marioWithLevels: (int) nivå resultater. 570 00:35:54,245 --> 00:36:01,120 571 00:36:01,120 --> 00:36:06,410 >> Greit, dette er faktisk den utro funksjon av s-kode automatisk fullføring. 572 00:36:06,410 --> 00:36:10,680 Så når du skriver for og skriv inn, Det har allerede gitt opp malen 573 00:36:10,680 --> 00:36:12,325 for deg, som er ganske kult. 574 00:36:12,325 --> 00:36:50,480 575 00:36:50,480 --> 00:36:52,850 Det bør se virkelig kjent for dere. 576 00:36:52,850 --> 00:36:55,940 577 00:36:55,940 --> 00:36:59,680 Beklager, det er min feil. 578 00:36:59,680 --> 00:37:15,790 579 00:37:15,790 --> 00:37:18,120 All right, kult. 580 00:37:18,120 --> 00:37:22,710 Den logikken bør se virkelig kjent til dere, spesielt bare Mario. 581 00:37:22,710 --> 00:37:26,140 >> Men vi vil nå skrive ut til konsollen hver eneste gang, 582 00:37:26,140 --> 00:37:29,280 fordi vi ønsker å liksom holde oversikten over hva vi skriver. 583 00:37:29,280 --> 00:37:31,810 Vi kommer til å bruke den resulterer liksom senere, 584 00:37:31,810 --> 00:37:35,010 for å vise utskrifts ut føre til brukeren. 585 00:37:35,010 --> 00:37:37,730 Så i stedet er vi bare nslogging alt, 586 00:37:37,730 --> 00:37:42,410 som vi lagrer alt inn i et funksjonskall resultat 587 00:37:42,410 --> 00:37:44,070 men logikken er nøyaktig den samme. 588 00:37:44,070 --> 00:37:48,030 589 00:37:48,030 --> 00:37:51,800 Etter at vi er ferdig med det, vi bare skrive våre resultater. 590 00:37:51,800 --> 00:37:59,330 591 00:37:59,330 --> 00:38:04,970 >> Og her i stedet for å skrive ut min navn, skal vi kalle en funksjon. 592 00:38:04,970 --> 00:38:15,340 593 00:38:15,340 --> 00:38:18,090 La oss se hva som skjer. 594 00:38:18,090 --> 00:38:21,240 Oops, selvsagt. 595 00:38:21,240 --> 00:38:24,320 Vi har en fin liten pyramide her ute. 596 00:38:24,320 --> 00:38:28,370 Dette er i utgangspunktet C, vi er bare manipulere hvor du ringer en funksjon 597 00:38:28,370 --> 00:38:30,010 og hvordan en funksjon se ut. 598 00:38:30,010 --> 00:38:31,560 Det er ikke noe annerledes. 599 00:38:31,560 --> 00:38:34,040 Men dette er faktisk ikke veldig spennende her, 600 00:38:34,040 --> 00:38:37,500 fordi vi ikke ser noe fra iPhone-app. 601 00:38:37,500 --> 00:38:42,120 >> Så hvis du faktisk har en iPhone app-- hvis du faktisk har Mario iOS rett 602 00:38:42,120 --> 00:38:45,080 nå, kommer du ikke å se noe som 603 00:38:45,080 --> 00:38:49,450 har noe å gjøre med Mario fordi alle disse utgangene til en konsoll 604 00:38:49,450 --> 00:38:51,620 er skjult for brukeren. 605 00:38:51,620 --> 00:38:53,850 Dette er hva du ser, som er "Hello World !!!" 606 00:38:53,850 --> 00:38:55,720 Ikke bra. 607 00:38:55,720 --> 00:39:03,090 La oss nå prøve å gjøre brukeren se hva skal vi skrive ut. 608 00:39:03,090 --> 00:39:06,000 Så vi ikke trenger å merke lenger. 609 00:39:06,000 --> 00:39:09,800 La oss prøve og finne ut noe annet som kan være nyttig. 610 00:39:09,800 --> 00:39:12,140 >> Det er faktisk en element som kalles 611 00:39:12,140 --> 00:39:16,460 tekstfelt, noe som kunne være svært nyttig for oss. 612 00:39:16,460 --> 00:39:19,880 Den viser i utgangspunktet en region av tekst som kan redigeres. 613 00:39:19,880 --> 00:39:22,320 Så det ser virkelig nyttig. 614 00:39:22,320 --> 00:39:23,810 Nå la oss dra den og slippe den. 615 00:39:23,810 --> 00:39:26,880 616 00:39:26,880 --> 00:39:32,670 Wow, har vi en tekstvisning etter vårt syn, virkelig har lyst på. 617 00:39:32,670 --> 00:39:35,430 Det er litt for stor. 618 00:39:35,430 --> 00:39:38,150 La oss gjøre den mindre. 619 00:39:38,150 --> 00:39:40,290 Sett det inn i sentrum. 620 00:39:40,290 --> 00:39:43,760 Gjøre den mindre også. 621 00:39:43,760 --> 00:39:50,110 >> Nå har vi en tekst visning, som vi kunne brukes til å vise vår endelige resultat. 622 00:39:50,110 --> 00:39:52,860 Men akkurat nå er det definitivt ikke kommer til å fungere 623 00:39:52,860 --> 00:39:56,970 fordi det er no-- den ViewController vi bare 624 00:39:56,970 --> 00:40:03,010 defineres ikke vet at det er en tekstvisning ute. 625 00:40:03,010 --> 00:40:06,550 Så vi må liksom knytte tekstvisning vi bare 626 00:40:06,550 --> 00:40:11,660 opprettet med den klassen som har allerede kommet med oss. 627 00:40:11,660 --> 00:40:14,860 >> Måten vi gjør det er faktisk virkelig magisk. 628 00:40:14,860 --> 00:40:18,190 Så åpne opp storyboard. 629 00:40:18,190 --> 00:40:22,220 Det er en spesiell [uhørbart] kalt [? assistent?] [uhørbart]. 630 00:40:22,220 --> 00:40:25,190 Når du klikker på det, er det kommer til å åpne to filer. 631 00:40:25,190 --> 00:40:29,425 Den ene er en klasse og den andre er et tilsvarende syn for det. 632 00:40:29,425 --> 00:40:31,920 Det er veldig, veldig nyttig. 633 00:40:31,920 --> 00:40:35,950 Og la oss bare går gjennom .h fil. 634 00:40:35,950 --> 00:40:39,110 Kontroll, er dette [uhørbart] logikk. 635 00:40:39,110 --> 00:40:47,280 Trykk Kontroll og dra den tekst visning i erklæringen. 636 00:40:47,280 --> 00:40:48,780 Vi kommer til å kalle det outputView. 637 00:40:48,780 --> 00:40:52,189 638 00:40:52,189 --> 00:40:53,670 Koble. 639 00:40:53,670 --> 00:40:59,420 Så her har vi erklært en ny eiendom for vår ViewController klasse. 640 00:40:59,420 --> 00:41:02,300 Og den nye eiendommen er bare tekstvisning 641 00:41:02,300 --> 00:41:05,000 vi har laget i grensesnittet bygningen. 642 00:41:05,000 --> 00:41:07,990 Så på den måten vi kunne tilgang til alle data 643 00:41:07,990 --> 00:41:13,630 og manipulere alt som er inne utgangsvisningen, som er kjempebra. 644 00:41:13,630 --> 00:41:19,260 >> Så i vår faktiske koden, la oss gjøre noe med det. 645 00:41:19,260 --> 00:41:23,810 Så denne gangen når vi er som utskrifter ut det endelige resultatet for Mario, 646 00:41:23,810 --> 00:41:28,020 vi er i ikke logge noe. 647 00:41:28,020 --> 00:41:30,080 Jeg mener vi kunne holde logging uttalelse. 648 00:41:30,080 --> 00:41:41,490 I tillegg til at vi send avlesning vi bare 649 00:41:41,490 --> 00:41:47,622 skapt til utgangsvisningen, som er en UI textview vi nettopp opprettet. 650 00:41:47,622 --> 00:41:48,746 La oss nå se hva som skjer. 651 00:41:48,746 --> 00:41:54,470 652 00:41:54,470 --> 00:41:56,620 Wow. 653 00:41:56,620 --> 00:41:59,130 Vi har en pyramide i app akkurat nå. 654 00:41:59,130 --> 00:42:06,720 >> Slik at brukeren kan se vår utgang fordi vi har kopiert resultatet fra vår kode 655 00:42:06,720 --> 00:42:08,045 til vår grensesnitt. 656 00:42:08,045 --> 00:42:10,950 Det er ganske bra. 657 00:42:10,950 --> 00:42:14,990 Det er faktisk ikke så spennende fordi vi can-- 658 00:42:14,990 --> 00:42:18,250 All app gjør er viser en pyramide til deg, 659 00:42:18,250 --> 00:42:20,520 og det er ingenting du kan gjøre med det. 660 00:42:20,520 --> 00:42:22,330 Det er ikke spesielt spennende. 661 00:42:22,330 --> 00:42:27,840 Så nå la oss lage en knapp som vil klare utsikten. 662 00:42:27,840 --> 00:42:30,290 Synes at en knapp vil være nyttig. 663 00:42:30,290 --> 00:42:33,270 Dra og slipp. 664 00:42:33,270 --> 00:42:33,900 Knappen én. 665 00:42:33,900 --> 00:42:36,730 666 00:42:36,730 --> 00:42:37,320 Button to. 667 00:42:37,320 --> 00:42:49,170 668 00:42:49,170 --> 00:42:52,052 >> Så når vi klikker på venstre knapp, bør utsikten fjerne. 669 00:42:52,052 --> 00:42:53,635 Det bør være noe på skjermen. 670 00:42:53,635 --> 00:42:56,970 Og når vi klikker på høyre knapp, Mario, 671 00:42:56,970 --> 00:42:59,740 utsikten kommer til å dukke opp igjen. 672 00:42:59,740 --> 00:43:05,510 Så denne måten vi også gjøre magiske ting, kontroll og dra 673 00:43:05,510 --> 00:43:08,740 til klassen deklarasjon i assistent director-- 674 00:43:08,740 --> 00:43:11,600 i assistent betrakteren. 675 00:43:11,600 --> 00:43:18,620 I dette tilfellet er vi spesifisere at det bør være en handling. 676 00:43:18,620 --> 00:43:19,120 clearMario. 677 00:43:19,120 --> 00:43:21,650 678 00:43:21,650 --> 00:43:26,830 >> Så her har vi allerede opprettet en handling som heter clearMario, 679 00:43:26,830 --> 00:43:34,210 som er den metode som vil bli kalt når vi trykker på knappen klart. 680 00:43:34,210 --> 00:43:41,030 Så i vår faktisk kode, la oss bare sette output teksten og utgangsbilde 681 00:43:41,030 --> 00:43:44,620 til ingenting, og på den måten det vil synes å være klart. 682 00:43:44,620 --> 00:43:47,500 683 00:43:47,500 --> 00:43:57,230 I tillegg til det, la oss skape en annen metode som kalles runMario. 684 00:43:57,230 --> 00:44:00,140 685 00:44:00,140 --> 00:44:03,436 Oh sorry, det bør ikke være en eiendom. 686 00:44:03,436 --> 00:44:12,107 687 00:44:12,107 --> 00:44:13,940 All right, som bør være en handling også. 688 00:44:13,940 --> 00:44:25,780 689 00:44:25,780 --> 00:44:34,740 >> Og når denne funksjonen er kalt, vi bare kjøre Mario ti. 690 00:44:34,740 --> 00:44:37,620 691 00:44:37,620 --> 00:44:39,780 Forhåpentligvis som vil være i orden. 692 00:44:39,780 --> 00:44:41,120 Betyr kompilere det? 693 00:44:41,120 --> 00:44:43,920 Ja. 694 00:44:43,920 --> 00:44:45,090 Nå har vi en visning. 695 00:44:45,090 --> 00:44:46,560 Vi har et utgangssignal. 696 00:44:46,560 --> 00:44:50,040 Og la oss bare se hva som skjer. 697 00:44:50,040 --> 00:44:52,590 Som er gått. 698 00:44:52,590 --> 00:44:54,500 Er det tilbake igjen. 699 00:44:54,500 --> 00:44:57,620 Så her har vi spesifisert hva slags funksjon 700 00:44:57,620 --> 00:45:00,400 vil bli kalt når vi skriver inn noe, 701 00:45:00,400 --> 00:45:03,160 når vi trykker på en bestemt knapp. 702 00:45:03,160 --> 00:45:07,890 Dette er i utgangspunktet target handling ordningen 703 00:45:07,890 --> 00:45:12,510 for event drevet programmering i Objective C. 704 00:45:12,510 --> 00:45:15,030 >> I tillegg til det, det er ikke veldig spennende 705 00:45:15,030 --> 00:45:19,810 fordi vi kan egentlig ikke endre hvor høy pyramide vil bli, 706 00:45:19,810 --> 00:45:23,640 så vi sannsynligvis vil liksom får en inngang fra brukeren 707 00:45:23,640 --> 00:45:29,490 og endre høyden av pyramide basert på hva de utgang. 708 00:45:29,490 --> 00:45:32,900 Så vi kommer til å gjøre det. 709 00:45:32,900 --> 00:45:38,720 Så denne gangen når vi kaller runMario, vi ikke bare kalle Mario direkte. 710 00:45:38,720 --> 00:46:06,280 711 00:46:06,280 --> 00:46:07,000 Dette en tittel. 712 00:46:07,000 --> 00:46:22,180 713 00:46:22,180 --> 00:46:23,700 >> Deleger. 714 00:46:23,700 --> 00:46:25,160 Dette er veldig interessant. 715 00:46:25,160 --> 00:46:26,720 Hva er en delegat? 716 00:46:26,720 --> 00:46:28,950 Jeg kommer til å sette seg selv her. 717 00:46:28,950 --> 00:46:31,038 Og vi kommer til å se hva det betyr senere. 718 00:46:31,038 --> 00:46:46,380 719 00:46:46,380 --> 00:46:51,120 Så her har vi i utgangspunktet opprettet en konkrete tilfellet kalles en UI varsling 720 00:46:51,120 --> 00:46:52,210 visning. 721 00:46:52,210 --> 00:46:54,440 En UI varsling syn er innerst inne hva du vil 722 00:46:54,440 --> 00:46:58,940 se hver gang noe spretter opp og spør deg for innspill, 723 00:46:58,940 --> 00:47:03,080 som hva som vil skje når du prøver å kjøpe noe på en app store. 724 00:47:03,080 --> 00:47:14,250 >> I tillegg til det, etter at du har lage det, viser vi bare varselet. 725 00:47:14,250 --> 00:47:20,090 726 00:47:20,090 --> 00:47:22,568 Greit, la oss bare raskt test vil at arbeid eller ikke. 727 00:47:22,568 --> 00:47:31,105 728 00:47:31,105 --> 00:47:32,140 Det er veldig kult. 729 00:47:32,140 --> 00:47:55,370 730 00:47:55,370 --> 00:47:59,120 La oss nå faktisk lage en inntastingsfelt for UI varselet. 731 00:47:59,120 --> 00:48:01,170 Dette er hvordan vi gjør det. 732 00:48:01,170 --> 00:48:07,490 Og vi bør ha en inngangsbildet for varselet. 733 00:48:07,490 --> 00:48:09,020 Veldig kul. 734 00:48:09,020 --> 00:48:12,330 La oss bare si 10. 735 00:48:12,330 --> 00:48:14,900 >> Det er ikke å gjøre noe riktig nå fordi samtalen faktisk 736 00:48:14,900 --> 00:48:17,770 endret seg ikke for å gjennomføre mario. 737 00:48:17,770 --> 00:48:23,470 Så dette har blitt litt litt rart fordi når 738 00:48:23,470 --> 00:48:30,790 vi trykker på en knapp ned, når vi trykker på en knapp i varselet utsikt, 739 00:48:30,790 --> 00:48:35,560 noe skulle skje, men det skjer ikke. 740 00:48:35,560 --> 00:48:37,220 Hvordan fange vi det? 741 00:48:37,220 --> 00:48:41,280 Hvordan vet vi at en bruker har avvist et varsel utsikt 742 00:48:41,280 --> 00:48:45,630 og allerede lagt inn et nummer, fordi akkurat nå ingenting som egentlig skjer. 743 00:48:45,630 --> 00:48:50,450 >> Vel, har du kanskje gjettet det riktig, delegering. 744 00:48:50,450 --> 00:48:55,440 Så i tillegg til alle disse erklæringer, 745 00:48:55,440 --> 00:49:03,190 vi må legge til en ny delegasjon til det heter UI varsling utsikt delegat. 746 00:49:03,190 --> 00:49:06,440 Slik at hver enkelt interaksjon eller hendelse 747 00:49:06,440 --> 00:49:10,190 at vi kommer til å ha med UI varsling utsikt 748 00:49:10,190 --> 00:49:14,100 kommer til å bli håndtert av klassen vår også. 749 00:49:14,100 --> 00:49:26,297 >> Så i tillegg til det, vil være varsling utsikt klikkeknapp på indeksen. 750 00:49:26,297 --> 00:49:34,260 751 00:49:34,260 --> 00:49:37,730 Dette er nådd. 752 00:49:37,730 --> 00:49:42,020 Så i dette tilfellet har vi already-- så vi har 753 00:49:42,020 --> 00:49:46,210 fant ut en protokoll som vil håndtere hendelsen når 754 00:49:46,210 --> 00:49:51,320 vi klikker på Ferdig-knappen på vakt visning. 755 00:49:51,320 --> 00:49:55,976 Så hver gang vi avvise varsling syn bør dette skje. 756 00:49:55,976 --> 00:49:57,350 La meg bare teste det svært raskt. 757 00:49:57,350 --> 00:50:16,220 758 00:50:16,220 --> 00:50:19,300 Bra faktisk, har vi nådd her. 759 00:50:19,300 --> 00:50:22,210 >> Så her, hva vi vil ikke faktisk får er faktisk 760 00:50:22,210 --> 00:50:43,120 få the-- Så vi ønsker å få ut teksten som vi tidligere har 761 00:50:43,120 --> 00:50:45,350 angitt i varselet utsikt. 762 00:50:45,350 --> 00:50:48,505 Og basert på tekst, vi er kommer til å vise Mario. 763 00:50:48,505 --> 00:50:52,336 764 00:50:52,336 --> 00:50:55,480 Dette slår veldig fort ut hvis det faktisk fungerer eller ikke. 765 00:50:55,480 --> 00:50:59,476 Så i så fall, hvis vi innspill, la oss si, 10, bør vi se 10. 766 00:50:59,476 --> 00:51:02,740 767 00:51:02,740 --> 00:51:05,210 >> Veldig bra, vi har et tall her. 768 00:51:05,210 --> 00:51:06,470 Det er ganske bra. 769 00:51:06,470 --> 00:51:16,840 Nå er den siste trinnet vil be-- Så siste trinnet vi trenger å gjøre akkurat nå 770 00:51:16,840 --> 00:51:21,100 er bare en ringe Mario med nivå basert på inngangs 771 00:51:21,100 --> 00:51:23,270 at vi har lagt inn varsling utsikt. 772 00:51:23,270 --> 00:51:26,920 Så trenger vi å konvertere denne strengen i iOS. 773 00:51:26,920 --> 00:51:33,820 774 00:51:33,820 --> 00:51:35,496 Statisk overløp er veldig awesome. 775 00:51:35,496 --> 00:51:44,930 776 00:51:44,930 --> 00:51:51,182 Og da har vi bare ringe selv marioWithLevels verdi. 777 00:51:51,182 --> 00:51:54,550 778 00:51:54,550 --> 00:51:56,284 La oss se vil at faktisk fungerer eller ikke. 779 00:51:56,284 --> 00:51:59,070 780 00:51:59,070 --> 00:52:01,550 >> Vi har allerede gitt en pyramide. 781 00:52:01,550 --> 00:52:04,785 La oss prøve å endre høyden. 782 00:52:04,785 --> 00:52:06,530 Som faktisk fungerer. 783 00:52:06,530 --> 00:52:07,610 Det er ganske kult. 784 00:52:07,610 --> 00:52:10,420 Slik at nå kan du bare innspill noen verdi du vil. 785 00:52:10,420 --> 00:52:12,440 La oss bare si fire. 786 00:52:12,440 --> 00:52:14,260 Det er ganske fantastisk. 787 00:52:14,260 --> 00:52:17,090 Så dette er i utgangspunktet en virkelig rask eksempel 788 00:52:17,090 --> 00:52:23,170 for hvordan du oppretter et prosjekt i s-kode og hvordan du virkelig raskt wire opp 789 00:52:23,170 --> 00:52:26,220 noen virkelig enkle hendelser og funksjoner. 790 00:52:26,220 --> 00:52:28,840 >> Så kilden kommer å bli satt på nettet senere. 791 00:52:28,840 --> 00:52:33,400 Så hvis du er interessert i hvordan iOS Mario fungerer, 792 00:52:33,400 --> 00:52:38,360 Jeg kommer til å sette akkurat det samme prosjektene bort på CS50 nettsiden senere. 793 00:52:38,360 --> 00:52:41,260 Vi er i utgangspunktet ferdig med sommer, og før vi er ferdig 794 00:52:41,260 --> 00:52:45,190 Jeg vil bare peke dere til noen virkelig fantastisk ressurser som 795 00:52:45,190 --> 00:52:47,550 er tilgjengelig på nettet. 796 00:52:47,550 --> 00:52:52,270 >> Tydeligvis Apple dokumentasjon kommer til å være svært nyttig. 797 00:52:52,270 --> 00:52:57,630 Men i tillegg til at jeg spesielt anbefaler fire kilder, kode skole, 798 00:52:57,630 --> 00:53:02,120 trehytte, AppCoda og WWDC-videoer. 799 00:53:02,120 --> 00:53:07,270 Kode skole og trehytte er to online utdanne nettsteder, 800 00:53:07,270 --> 00:53:10,210 som spesifikt fokuserer på software engineering. 801 00:53:10,210 --> 00:53:16,930 Spesielt for kode skolen, de har veldig god tutorial på iOS. 802 00:53:16,930 --> 00:53:19,550 >> Det er en veldig rask eksempel for det. 803 00:53:19,550 --> 00:53:22,980 De faktisk skape en virkelig cute-- se på den lille søte iPhone 804 00:53:22,980 --> 00:53:24,920 fyr der borte, det er ganske fantastisk. 805 00:53:24,920 --> 00:53:31,010 Og måten de forklarer Objective C syntaks er helt klart. 806 00:53:31,010 --> 00:53:32,230 Trehytte er den samme. 807 00:53:32,230 --> 00:53:34,660 Og AppCoda er et forum. 808 00:53:34,660 --> 00:53:38,130 Det er faktisk en blogg som ble kjørt av en virkelig opplevd Objective C 809 00:53:38,130 --> 00:53:39,120 programmerer. 810 00:53:39,120 --> 00:53:43,950 Og alle disse tutorials i AppCoda er ganske kort og enkelt å implementere, 811 00:53:43,950 --> 00:53:45,390 sterkt anbefalt. 812 00:53:45,390 --> 00:53:47,700 >> Og hvis du er en utvikler, definitivt gå sjekk 813 00:53:47,700 --> 00:53:55,660 hvordan WWDC videoer der du kan lære om de nyeste iOS programmering 814 00:53:55,660 --> 00:53:58,250 teknikker, APIer og biblioteker. 815 00:53:58,250 --> 00:54:02,850 Så det er ganske mye det for seminaret. 816 00:54:02,850 --> 00:54:03,820 Takk så mye. 817 00:54:03,820 --> 00:54:08,040 Og jeg håper du har det gøy lage din egen iOS app. 818 00:54:08,040 --> 00:54:09,302