En introduksjon til Swift: Del 1

An Introduksjon til Swift: Del 1
168
Del
38
Del
Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

På WWDC 2014, Apple har introdusert en av de største oppdateringene til iOS siden 2008 fra en utviklers ståsted. De introduserte HomeKit, HealthKit, CloudKit, og utvidelser, bare for å nevne noen. Men den største overraskelsen av WWDC 2014 var innføringen av et helt nytt programmeringsspråk, Swift.

Swift er en fantastisk programmeringsspråk som er bygget fra grunnen av for å være effektiv og trygg. Den bruker de samme APIer som Objective-C gjør. Eller, hva du kan gjøre i Objective-C, kan du gjøre i Swift. Det introduserer også noen nye konsepter årige programmerere vil sette pris på og noen som jeg vil dekke i denne innledende serie på Swift.

I denne serien, jeg kommer til å anta at du allerede er kjent med Objective-C. I den første artikkelen i denne serien, snakker jeg om Swift filosofi, filstrukturen, og syntaks. I den andre artikkelen, jeg zoome inn på mer avanserte aspekter av Swifts syntaks, for eksempel optionals og minnehåndtering. Henge på dine hatter, folkens, det kommer til å bli en doozy.

1. Filosofi

For å bedre forstå Swift, Apple har vært conditioning oss med strukturelle forbedringer i Objective-C i løpet av de siste årene. Objective-C forbedringer som kodeblokker, bokstavelig utvalg og ordbøker, og ARC (Automatic Reference Counting) er bare noen få ting Apple lagt til Objective-C som lette overgangen til Swift.

En viktig pilar i Swifts filosofi er kode initialisering. Alle objekter og variabler når definert i Swift må initialiseres i kode. En initialisert objekt eller variabel vil resultere i en kompilering feil i Swift. Dette sikrer en gjenstand eller variabel har alltid en verdi. Det er en spesiell sak i Swift for når en initial verdi ikke kan defineres. I dette spesielle tilfellet er din variabel kalles en valgfritt
. Vi vil dekke optionals i den andre delen av denne serien.

En annen viktig pilar er gren fullstendighet. Alle betingede grener, det være seg om eller switch /case, må dekke alle forhold. På denne måten kan ingen kode falle gjennom uten at det blir dekket. Mangler en tilstand i din gren uttalelsen vil bli fanget og generere en kompilering feil.

Et siste element av Swift filosofi er dens preferanse til konstanter enn variabler. Swift definerer variabler og konstanter på følgende måte:
la someConstant: String = "Dette er en konstant" var someVariable: String = "Dette er en variabel"

I eksempelet ovenfor, la
nøkkelordet brukes til å definere en konstant mens Var
søkeord definerer en variabel. Ved å gjøre definisjonen av konstanter denne enkle, oppfordrer Apple bruk av konstanter når det er mulig. Dette fører til tryggere kode i en flertrådet miljø og bedre kode optimalisering som kompilatoren vet en konstant verdi vil ikke endres.

Nå er det mye mer å Swift enn noen syntaks og formateringsforbedringer. Swift ble bygget fra grunnen av for å løse mange vanlige C /C ++, og iboende Objective-C, kilder krasjer. Problemer som:

out-of-bundet indekser i arrays

initialisert data

ukontrollert retur typer

ukontrollert pekeren tilgang
< li> implisitt fall gjennom

goto feil

som en som programmer for både iOS og Android, vet jeg første hånd hvor mye mer moro koding for iOS-plattformen virkelig er med Cocoa og UIKit. Denne serien vil vise deg hvor mye mer moro
koding kan være ved å legge Swift til mix.

2. Filstruktur

I Objective-C, har vi header
filer ( .h
) og implementering
filer ( .m
). Dette er noe Objective-C arvet fra C-språk.

I Swift, er en klasse definert i en enkel implementering fil ( .swift
) som inkluderer alle de definisjoner og implementeringer av klassen . Dette minner om andre språk som Java og C #.

Borte er behovet for sjonglering header-filer og legge den pesky #IFNDEF
på toppen av header-filer.

3. Syntax

Det første du vil legge merke til om Swift er forsvinningen av semikolon på slutten av hver setning. I Swift, blir hver linje regnes som en uttalelse, og vi gjør ikke ha for bedriften legge til et semikolon på slutten av hver linje.

Jeg understreker ha for bedriften, fordi ingenting stopper deg fra å legge til semikolon på slutten av dine uttalelser. Jeg vil fortsette å legge semikolon på slutten av hver setning som jeg tror det øker lesbarheten. Dessuten er det veldig vanskelig å bli kvitt en vane å legge semikolon som Cocoa utviklerne har gjort i årevis.

En annen viktig endring i Swift er at klammeparentes er obligatoriske for hvis uttalelser. Det betyr ikke mer Heartbleed bugs.

Syntax kan være et komplekst tema å skrive om. Swift har en rekke finesser som kan ta svært lang tid å gå over, men det er ikke målet med denne artikkelen. For korthets skyld vil jeg konsentrere meg om hvilke endringer et Objective-C utbygger ville legge merke til.

4. Likheter med Objective-C

Jeg vil starte med å vise deg tre kodesnutter som illustrerer noen av likhetene med Objective-C. Det vil hjelpe deg i din forståelse av Swift språket
//Objective-Cfor (int index = 0; index < 5; i ++). {NSLog (@ "% d", indeks);} //Swiftfor index i en .. < 5 {plrintln ( "\\ (indeks)");} //Objective-Cswitch (indeks) {case 0: break; case 1: break; Standard: break;} //Swiftswitch (indeks) {case 0: case 1: standard:} //ingen pause uttalelse //Objective-Cif (indeks == 0) {} //Swiftif indeks == 0 {} //parentes er valgfritt //klammeparentes er pålagt

Objective-C programmerere vil finne at Swift har samme gren og iterasjon uttalelser du allerede er kjent med, for eksempel hvis /annet, for looper, for..in looper, og slå uttalelser

Swift inkluderer to utvalg operatører, .. <.; og ..., for å spesifisere en rekke verdier. I over for loop, bruker vi halv lukket område operatør
.. <, til å angi en rekke verdier som inkluderer 1, 2, 3 og 4, men det utelukker 5. Den andre rekkevidde operatør er lukket område operatør
, .... den spesifiserer en rekke verdier som inkluderer verdien på begge sider av den lukkede område operatør. For eksempel, en ... 5. spesifiserer en rekke verdier fra 1 til 5, inkludert 5.

5. . Definere variabler og konstanter

La oss se eksempelet jeg viste deg tidligere
la someConstant: String = "Dette er en konstant"; Var someVariable: String = "Dette er en variabel"; < p> i Swift, definerer vi konstanter ved å la søkeord og variabler etter VaR søkeord. Tykktarmen,: er en markør for å definere typer. I eksempelet ovenfor, skaper vi en konstant og en variabel av type String.

Vi er også oppstart av den konstante og variable med en streng. I Swift, er strenger definert akkurat som C strenger i Objective-C, de er ikke innledes med en @ -symbolet.

Objective-C er et sterkt skrevet språk, noe som betyr at den type en variabel eller parameter må alltid oppgis. Swift er også et sterkt skrevet språk, men Swift er litt smartere som kompilatoren vil antyde en variabel type. Kompilatoren gjør også at ingen feil støping av variablene skjer uten din uttrykte kunnskap og intervensjon

Hvis vi omskrive eksemplet ovenfor la typen slutning gjøre sitt arbeid, da kodebiten ser ut som følger:.
la someConstant = "Dette er en konstant"; Var someVariable = "Dette er en variabel", la someInt = 1, la someFloat = 1,0;

Dette er mye bedre og koden er mye renere. Kompilatoren er smart nok til å forstå at someInt er en Int og someFloat er en dobbel.

6. Strings

En måte å få en idé om styrken i et språk er ved å utforske hvordan den håndterer streng manipulasjon. Objective-C har mange funksjoner og finesser som lar oss håndtere strenger, bedre enn de fleste språk, men de har en tendens til å være detaljert og forvirrende fra tid til annen.

La oss starte med en Objective-C eksempel. Å sette sammen to strenger i Objective-C, gjør vi følgende:
NSString * string = @ "Hello"; NSString * hilsen = [streng stringByAppendingString: "World" @];

I Swift, for å legge en strengen til en annen streng, bruker vi operatoren +. Så enkelt er det
la string = "Hello" la hilsen = streng + "World!"

Strings i Swift er Unicode, noe som betyr at vi kan skrive.
La string = "你好 世界" < p> Vi kan iterere tegnene i en streng ved hjelp av en for..in regnskapet som vist i følgende eksempel. Vi kan bruke en for..in løkke for å iterere Unicode-strenger også. Det er faktisk så kult
la str = "Hei";. For røye i str {println (char);} //utganger //H //e //l //l //o

En siste ting jeg ønsker å dekke om strenger før du går videre er streng interpolasjon. I Objective-C, hvis vi ønsker å sende ut en streng med variabler, vi påberope [NSString stringWithFormat:]. I Swift, kan variabler bygges. Ta en titt på følgende eksempel
la x = 4;. La y = 5; println ( "\\ (x) x \\ (y) = \\ (x * y)") //utganger //4 x 5 = 20

for å bruke string interpolering, pakk deg variabel eller funksjon samtale i parentes og ha en skråstrek foran den, \\ (uttrykk).

7. Arrays & Ordbøker

Array & Ordbok

Som en Objective-C programmerer, er du allerede kjent med matriser og ordbøker. Swift har også samling klasser og legger til noen ekstra funksjoner til dem.

Hvordan du bruker samlinger i Swift? I Swift, blir de kalt Array og ordbok. Erklærte en matrise i Swift er lik erklære en rekke bokstavelig i Objective-C, ved hjelp av et sett med klammer, [], men uten @ -symbolet før dem
la someArray. [String] = [ "en", "to", "tre"]; Var someOtherArray: [String] = [ "alpha", "beta", "gamma"];

Det samme gjelder for ordbøker. Men i stedet for å bruke klammeparentes, bruker du hakeparenteser
la someDictionary: [String: Int] = [ "one": 1, "to": 2, "tre": 3];. Var someOtherDictionary: [String : Int] = [ "cats": 1, "hund": 4, "mus": 3];
mutability

Hvis en Array objekt tilsvarer en NSArray objekt og en ordbok objekt tilsvarer til en NSDictionary objekt, så hvordan kan vi skape foranderlig arrays og ordbøker i Swift?

svaret er veldig enkelt, erklærer objektet som en variabel. Med andre ord, i forrige eksempel someArray tilsvarer en NSArray forekomst og someOtherArray det av en NSMutableArray eksempel. Dette gjelder også ordbøker. I forrige eksempel, er someDictionary tilsvarer en NSDictionary forekomst og someOtherDictionary det av en NSMutableDictionary eksempel. Det er ryddig, ikke sant?

Mens Objective-C arrays og ordbøker kan kun inneholde objekter, i Swift, kan samlingene inneholder gjenstander samt primitive datatyper som heltall og flyter. En annen viktig forskjell med Objective-C er at samlingene i Swift blir skrevet, eksplisitt eller gjennom typen slutning ved kompilering. Ved å angi hvilken type objekter i en samling, legger Swift ekstra sikkerhet til disse samlingene.

Selv om vi kan utelate en variabel type når erklære det, det endrer ikke det faktum at kompilatoren vil tildele typer til objektene i en samling. Ved hjelp av typen slutning bidrar til å holde koden leselig og lett

Vi kan redeclare Array og ordbok stedene vi erklært tidligere som følger:.
La someArray = [ "en", "to", "tre" ]; Var someOtherArray = [ "alpha", "beta", "gamma"], la someDictionary = [ "one": 1, "to": 2, "tre": 3]; Var someOtherDictionary = [ "cats": 1, "hund": 4, "mus": 3];

kompilatoren vil inspisere samlinger i løpet av oppholdet initialisering og antyde riktig type. Med andre ord, forstår det som someArray og someOtherArray er en samling av String-objekter og someDictionary og someOtherDictionary er ordbøker med nøkler typen String og verdier av typen Int.

Samling Manipulasjon

Legge til et objekt eller en annen matrise til en matrise er svært lik streng sammensetning i at vi også bruke operatoren +
Var rekke = [ "en", "to", "tre"].; //Foranderlig arrayarray + = "fire"; //Legger element til arrayarray + = [ "fem", "seks"]; //Legge array å rekke

Manipulere ordbøker er like enkelt
Var ordboken = [ "cat": 2, "hund": 4, "snake": 8].; //Foranderlig dictionarydictionary [ "løve"] = 7; //Legger element til dictionarydictionary + = [ "bear": 1, "mus": 6]; //Legger ordboken til i ordliste
skrev samlinger

Tidligere nevnte jeg at samlingene i Swift blir skrevet, men hva betyr det? Hvis vi definerer en samling som inneholder String objekter, kan du bare legge String objektene til samlingen. Unnlate å gjøre dette vil resultere i en feil.

La oss se på et eksempel for å avklare dette. Vi definerer en samling av bil stedene. Følgende kodebit viser Car klassen definisjonen og en foranderlig array-biler, som inneholder tre Bil tilfeller
//Car classclass Car {var hastighet = 0,0 func akselerere (av: Double = 1.0.) - ≫ Bool {hastighet + = av; return true; }} Var biler = [Car (), Car (), Car ()];

Bak kulissene, vil kompilatoren antyde hvilken type av tabellen. Hvis vi ønsker å legge til en ny bil eksempel til samlingen, kan vi bare bruke operatoren + som vist nedenfor
biler + = Car ();.

Men legger et objekt av en annen type vil . resultere i en feil
biler + = "Noen String"; //Dette vil føre til en kompilator feil

Dette har den ekstra fordelen av type sikkerhet for å hente gjenstander fra samlinger. Det eliminerer også behovet for støping samling gjenstander før du bruker dem.

I vårt eksempel har en bil objekt en akselerere metoden. Fordi en samling er skrevet, kan vi ta et element fra tabellen og umiddelbart påkalle en metode på objektet, i en linje med kode. Vi trenger ikke å bekymre deg for elementtype siden samlingen inneholder bare Bil gjenstander
biler [0] .accelerate (av: 2,0);

For å oppnå det samme i Objective-C med samme nivå. av sikkerhet, ville vi trenger å skrive følgende:
id pekeren = biler [0]; if ([peker isKindOfClass: [Car klasse]]) {Car * bil = (Car *) peker; [Bil accelerateBy: 2,0];}

Til slutt, for å gjenta en array, bruker vi en for..in sløyfe:
for bil i biler {car.accelerate (av: 2,0);}

for å iterere en ordbok, bruker vi også en for..in sløyfe:
for (nøkkel, verdi) i someDictionary {println ( "Key \\ (key) har verdi \\ (verdi)"}

Som du kan se, skrevet samlinger er en kraftig funksjon i Swift språket.

Konklusjon

Vi har allerede lært mye om Swift språket, og du bør ta deg tid til å la det synke inn. jeg anbefaler at du laster ned Xcode 6 så snart som mulig og begynne å bruke det du har lært i denne artikkelen i Xcode nye Playground
funksjonen. Lekeplasser lar deg spille med Swift i sanntid.

det var det for denne artikkelen. i neste avdrag av denne serien, tar vi en titt på tupler, funksjoner, nedleggelser, klasser og sist men ikke minst, optionals. Du vil også lære hvordan minnehåndtering fungerer i Swift. Hold følg med.