[MUSIK SPELA] DAN AMRMENDARIZ: Alla, välkommen till CS50 seminariet iOS App utveckling med Swift. Jag är Dan Armendariz, och jag är en handledare datavetenskap här på Harvard. Och nästa timme kommer att vara en virvelvind rundtur i så mycket grejer om detta ämne som vi kan passa. Jag kommer att lägga all källkod att du kommer att se i dag på nätet. Vi kanske inte kunna faktiskt gå över allt att jag är att jag är visar dig i denna stund. Men åtminstone förhoppningsvis genom kommentarerna från källkoden, du kommer att kunna försöka räkna ut vad exakt händer med dessa saker att vi inte riktigt får till. Sammantaget struktur dagens föredrag kommer att vara följande. Vi kommer att börja göra vissa grundläggande syntax med Swift språket, gå in i några av de mer avancerade syntax Swift språket. Eftersom språket är verkligen moderna och det har mycket hög nivå funktioner, saker som vi har inga sett i C hela CS50, eller även några andra språk att vi har börjat använder i CS50 som PHP, så jag kommer att behöva försöka introducerar också några ämnen som är relaterade till språk högre nivå att du inte kan se i djup i CS50, men du kommer att se senare datavetenskap klasser. Så det kommer att bli en tätt packade timme. Och är du välkommen att låta mig vet om du har några frågor. Så om du är intresserad att göra utveckling med Swift, eller egentligen alla iOS applikationsutveckling, Det finns ett par krav. Först av allt måste du använda en Mac som kör i exemplen att vi kommer att använda i dag, en relativt ny version av operativsystemet X. I det här fallet, jag kör X 10.5. Du kan köra 10.11 om du vill. Men allt som du kommer att se är involverar Xcode 7 och senare, som har den senaste versionen Swift, som är Swift 2.0. Detta är faktiskt en ganska viktig skillnad. En hel del av syntaxen har förändrats ganska signifikant i vissa fall från Swift 1.0, som släpptes förra året, Swift 2,0, vilket bara kom ut i höst. Så vi kommer att visa Swift 2.0. En hel del av de saker som du söker efter på nätet när du försöker att få ytterligare information om en mängd olika saker, du kanske vill uttryckligen Sök efter Swift 2 snarare än bara vanliga gamla Swift att göra Se till att du får syntaxen korrekt. I själva verket är detta generellt sant. Det finns en snabb mängd utveckling händer i Swift språk ända sedan Apple släppte det, tror jag vad, det har varit lite över ett år nu. Och saker har förändrats dramatiskt under den tiden. Och så bli inte frustrerad om, när du tittar runt för ämnen på Swift eller hur man åstadkomma något med hjälp av några exempel kod eller något som den inte faktiskt arbetar på Swift 2.0. Se till att du söker specifikt för den versionen att försöka minimera effekterna av olika versioner och den sortens saker. Jag ska försöka att peka ut bara några saker som skiljer sig från äldre versioner. Men det är något att se upp för. Det är antagligen kommer att bli en av de största huvudvärk att du kommer att ha med Swift är att hitta exempelkod som är äldre, även bara med några månader, försöker använda den i mer moderna projektet. Och det helt enkelt inte fungerar. Du får kompileringsfel, syntax fel, alla typer av galna grejer. Så bara ha tålamod med det, och du kommer förhoppningsvis har en ganska trevlig upplevelse med Swift totalt. Nu kan du faktiskt join-- och jag hoppas vi faktiskt fortfarande har denna denna year-- CS 50 Apple App utvecklingsteam, som gör att du kan installera några appar som du skapar på dina iOS-enheter. Så ta en titt på den här webbadressen om du är intresserad av att göra det. Så bara ett par saker om Swift själv. Det är en kompilerad språk. Men du kommer att se att vissa av de funktioner som vi använder tillåta att den kan användas även i en bit som en tolkad sätt också. En hel del av syntaxen är lånad från C. Den är baserad och skriven i C. Och så kommer vi att se till att Det finns en hel del takeaways från befintlig kunskap från C som vi kan port till Swift. Men det finns saker som göra det mycket annorlunda från C. Det är mycket starkt skrivit. Det finns automatisk minneshantering. Du kommer inte att behöva använda malloc eller fri någonstans. Den är utformad för generalitet. Så med andra ord kan du använda den i alla typer av sammanhang, från Apple Watch till iPhone hela vägen upp till OS X, och även vissa servrar, även några skript. Men vi får se att stöd för skript är inte riktigt där ännu som det är i andra språk. Så mest troligt att du kommer att använda detta enbart för utveckling på din Mac eller din iPhone. Och det har en hel del moderna funktioner. Och en hel del av dessa saker är saker som vi kommer att försöka ta itu med i dag, men även våra ämnen som uppriktigt sagt, vi kan ägna hela kurser. I själva verket, CS 51, som är erbjuds nästa termin, fokuserar mycket på dessa frågor som beskrivs nedan. Så du kan spendera en hel termin förstå dessa saker. Men vi ska försöka att få igenom dem åtminstone nog att du kan förstå vad som är händer när du ser vid en Swift program och kunna hacka din väg genom det för det slutliga projektet. Nu en av de bästa sätten att du kan få ytterligare information om detta är ärligt talat bara via Apples lämnat dokumentation för Swift. Det finns en hel del API som finns tillgängliga. Och detta är en bra bas för dig för att leta efter specifika saker som du vill göra med ett API som involverar iOS. Om du vill använda kameran för Exempelvis kan du börjar leta här, och även använda Google och Stack Overflow som vanligt. Eventuella frågor om denna innan vi hoppa rätt in? Okej. Låt oss gå vidare. Så först, har jag en antal exempelfiler. Och jag kommer att försöka steg genom dem relativt snabbt. Detta är Hello World-fil för Swift. Det är väldigt enkelt. Det finns sätt fler kommentarer än det finns faktiska koden. Lägg märke till den faktiska koden är på allra längst ner på ledningen 14. Det säger print. Och då är det ett funktionsanrop. Vi passerar in i den en sträng som kallas Hej CS50. Lägg märke till att det inte finns några semikolon. Lägg märke till att det inte finns någon int main. Det finns ingen av de cruft som vi hade med C. När vi använder Swift på detta sätt, som bara är skriven i en textfil och lagras på min dator, sedan Jag kan kompilera den och köra den. Lägg märke till att här är jag inte använder CS50 IDE. Detta förutsätter att jag är igång och att jag är på OS X, och att jag har Xcode redan installerat på den här datorn för att detta att faktiskt funktion. Men detta är bara en vanlig textfil att vi då kan sammanställa och redigera. Så låt oss se hur det faktiskt fungerar. Vad gör jag om jag vill kompilera det? swiftc 1.swift. Efter en stund eller två, det kommer att se att vi har nu sammanställt detta i en fil som heter 1. Och nu har vi tryckt vår CS50, vår Hello World-programmet i stället. Lägg märke till en annan sak som bra är att som standard, vi inte behövde input a / n för att skriva ut en ny linje. Som standard utskriftsfunktionen i Swift kommer att skriva en ny linje för dig. Du kan skicka en eventuell ytterligare parameter för att tala om den inte att göra detta. Men Google för mer information om detta. Som standard kommer den göra skrivraden. Okej, så låt oss gå vidare sedan till några andra saker. Så hur kan vi faktiskt definiera variabler? Vi kan göra det är att använda en av två metoder. Och det som jag vill berätta om första är denna låt definition. Och detta är viktigt eftersom ett effektivt vad vi gör är att definiera en konstant. Vi ska skapa en variabel, eller snarare ett konstant kallas namn, förse det några data-- i detta fall strängen Dan. Men genom att använda denna låt nyckelord, säger vi att detta variable-- eller igen constant-- kallas Namnet kommer aldrig att ändras. Det kommer att vara oföränderliga i hela varaktigheten av detta program eller genom hela varaktighet av sammanhanget att denna variabel är tillgänglig. Detta är verkligen viktigt att när du har någon information som inte är kommer att förändras i ditt program, och du kommer att se en mängd olika exempel om när vi vill använda låt kontra andra syntaxen, Det är viktigt att du använder låter där så är möjligt eftersom detta meddelar språket som det är inte kommer att ändras, och det kan faktiskt göra en massa optimeringar för att förbättra hastigheten och säkerheten för ditt program. Och säkerhet, menar jag inte låta IT-kraschen med galna fel att vi kan vara vana vid att se i C. Då kan vi använda sträng interpolation att kapsla in detta inom en sträng. Så vi kan se i denna utskrifts linje, skriva hej, och sedan använda omvända snedstreck öppna parens, och sedan namnet på min variabel, i detta fall konstant, stänga parentes. Jag huvudsak sedan sätta Innehållet i denna variabel som heter namn insidan av strängen och sedan utskrift resultatet där. Det finns en annan förändring till den här filen vilket är att jag har, högst upp, sätta i en Shebang linje, som i princip bara anger som jag vill använda Swift tolk, som innebär att jag inte längre behöver sammanställa detta program. Jag kan bara köra det som sitt eget manus. Men detta är, i det här fallet, bakom kulisserna sammanställs och sedan körs. Det är bara osynlig för oss. Okej, så låt oss gå vidare. Så det finns lite knep som just hänt förut. Jag visade att jag skulle kunna definiera en konstant. Och jag kunde ge några uppgifter att göra det. Men i det här fallet, märker att jag inte faktiskt ange vilken typ av uppgifter att det är. Och det beror på att kompilator, Swift kan härleda vilken typ av data som bara baseras på de uppgifter som jag lagt ned på det. Eftersom det vet att genom att utvärdera detta variabel här, denna data direkt här, vet den att det är en sträng. Och så denna ständiga namn är därför kommer att vara en sträng liksom. Men vi kan också vara explicit om den typ som är vi kommer att använda för konstanter eller variabler genom att använda denna syntax instead-- låt namn kolon Sträng lika Dan, som i detta fall innebär att vi är kommer att definiera en konstant som heter namn. Det kommer att vara av typen String. Och värdet kommer att vara Dan. Nu den andra vägen som vi kan skapa variables-- och dessa är föränderliga variabler, som innebär att vi i själva verket gå att ändra deras innehåll gång i varaktigheten av sammanhang att den variabeln defined-- vi Använd nyckelordet var i stället för låt. Men återigen, som standard, om du inte vet att du måste manipulera dessa data, försöker använda låt för prestandaförbättringar. I det här fallet kan jag då ange vilken typ av uppgifter att vi räknar med att vara inne i denna nya variabel kallad etikett. Det kommer att vara en sträng. Och vi kommer att sedan slå samman två strängar tillsammans, strängen hej, och strängen som representeras av variabel, eller snarare den ständiga namn. Så det här är trevligt eftersom detta är något PHP liknande genom att vi har mycket lätt strängsammanfogning. Vi behöver inte automatiskt använda någon form av minneshantering för att öka storleken och göra någon form av roliga saker där. Detta fungerar som vi faktiskt förväntar. Okej, några frågor om detta? Nu den andra anledningen till att Vi behöver du har förmågan för att kunna definiera vad typ av datavariabler är beror ibland gör vi inte vill initiera variabler med vissa uppgifter på punkt definitionen. Så i detta fall, låt oss säga att jag vill börja mata vissa kvaliteter i en klass bok. Jo jag vet att en av de variabler som jag vill vara kommer att bli en föränderlig klass. Och vi vet också att vi vill att det ska vara ett heltal. Men kanske vi gör ännu inte har den kvalitet som finns. I Swift, måste du definiera vilken typ av data som är associerad med en variabel eller en låt konstant innan du kan faktiskt använda den variabeln. Eftersom det är starkt skrivit, du måste associera en typ med dessa variabler. Så i detta fall, om jag har inte riktigt initialiseras först med ett visst värde, då jag måste tala om Swift vad Jag förväntar mig att den typ av data för att vara. Och det kommer att förbli samma datatyp hela historien av detta program. Nu kanske du frestas så snart Jag har skapat denna klass variabel och under förutsättning att det en heltal 100, nu om jag vill försöka sammanfoga en sträng med det heltal, kan frestas att fortfarande använda den strängen operatorn som vi gjorde bara några rader innan. Men tyvärr, Detta kommer faktiskt inte arbete, eftersom du är väsentligen utför en operation på två olika typer. Nu skiljer sig mycket från andra språk som PHP som är riktigt loosey goosey med deras typ av typer. De är precis som, ja, vad som helst, jag bryr mig inte. Ge mig bara en typ, och kanske jag ska göra det rätta. I det här fallet, är Swift mycket stränga om vilka typer att du har att göra med. Denna summerings operatör eller operatorn har väsentligen ett par olika möjliga alternativ. Du kan göra summering med heltal, eller kan göra strängsammanfogning, och kanske en del andra saker också. Men om operatören inte känner igen vad som finns på vardera sidan av det, eller snarare en kombination av de två typer, är inte vad det förväntar sig, då det kommer att orsaka ett misslyckande. Så i detta fall, vad betyder det att ha en sträng plus ett heltal? Väl i samband med detta har vi antagligen att göra en strängsammanfogning operation. Men naturligtvis datorn har inte den sortens sammanhang. Och så måste vi ge att ytterligare information att låta den veta vad det är att vi vill göra. Så med andra ord, det faktum att Swift är starkt skrivit innebär att du måste göra en lite extra arbete att få det att manövrera sätt som du vill. Men som ett resultat, är det säkrare. Och när du har ta hänsyn till dessa typer, saker bara uppriktigt börja att fungera ganska bra. Så i detta fall, då skulle vi utföra strängsammanfogning genom att uttryckligen gjutning heltalet till en sträng genom att linda det i detta huvudstad S String funktion, och sedan använda strängsammanfogning operatör att ändra vår etikett variabel, och sedan skriva ut den. Hittils är det bra? Okej, låt oss gå vidare. Nu finns det en mängd data typer som vi kan använda i Swift. Som ni har vant sig, Vi kan skapa en föränderlig array. Och att matrisen endast kan innehålla en enda typ. Så i det här fallet, kommer vi att skapa ett muterbart arrayer av heltal, som Vi kommer att ringa betyg, och vi kommer att kunna att lagra det i denna hakparentes format som du har vant att i en mängd olika andra språk. Men märker att här är vi definierar ett par saker. kvaliteter är en föränderlig variable-- Vi använder inte låt sökord. Så det innebär att vi kan sedan ändra innehållet i denna matris. Det är av typen Array Int, och vi kan säga att baserade på dessa hakparenteser här. Nu en av de fina sakerna om detta är att vi har tillgång till en hel del ytterligare information om arrayen bara använda några enkla punktnotation. Så till exempel, grades.count ger oss antalet objekt som finns i den array, som vi sedan kan komma ganska lätt att bara använda den punktnotation. Om du vill lägga till ytterligare objekt till denna samling, du kan inte göra PHP stil där du bara uttryckligen definiera, vid ett givet index, ett visst värde som du vill infoga. Använd i stället append metod typen array att lägga den posten, 95, till denna lista. Så nu denna array har följande contents-- 100, 0, 90, 85. Och nu har vi bifogat 95 till det också. Det finns andra sätt vi kan lägga saker. Du kan faktiskt använda en summerings operatör, som kommer att tolkas som en array append operation. Och du kan sedan lägga en annan matris, vars innehåll är 70 och 80, till den arrayen. Så nu har vi Innehållet i denna variabel grades-- 100, 0, 90, 85, 95, 70, och 80. Detta är bara en trevlig liten syntaktiskt socker som Swift ger till oss. Så om vi vill summera kvaliteter, vi är kanske kommer att vilja upprepa över varje objekt i denna slinga. Och vi har, i Swift, begreppet av en for-loop som du förväntar dig. Men det sätt som vi anger ett intervall är något annorlunda. Så i detta fall, till Sammanfattningsvis allt, vi ska kommer att skapa en temporär variabel som kallas summa för att vi att upprätthålla denna räkning. Och lägg märke till vår för loop konstruktion här. För index 0 ..