Rask Tips Opptellingen i Swift

Tall er et vanlig mønster i mange programmeringsspråk. Mens du kanskje er kjent med tall i C og Objective-C, er Swifts implementering av tallene betydelig mer kraftig og fleksibel. I dette raske tipset lærer du hva som er spesielt med tall i Swift, hvordan du bruker dem i prosjektene dine, og hva som gjør dem så kraftige.

1. Hva er en oppregning?

Tallene er ikke nye, og de er absolutt ikke unike for Swift. Men hvis du er kjent med tall i C, så kommer du til å elske Swifts kraftige påføring av tall.

Hvis enums eller antall tall er nye for deg, kan du ikke være kjent med hva de har å tilby. I Swift er opptellingene førsteklasses typer som definerer en liste over mulige verdier for den typen.

Et eksempel kan være de mulige tilstandene til en nettverkstilkobling. De mulige tilstandene kan være:

  • frakoblet
  • kobler til
  • tilkoblet

Vi kan legge til en fjerde stat for saken staten er ukjent. Med dette eksempelet i tankene, la oss se hvordan du definerer og implementerer en slik opptelling.

Grunnleggende

Som sagt, er tallrike tall i Swift. En oppsummeringsdefinisjon ser veldig ut som en klasse- eller strukturdefinisjon. I eksemplet nedenfor definerer vi ConnectionState oppregning.

enum ConnectionState 

Navnet på opptellingen er på forhånd av enum søkeord og etterfulgt av et par krøllete braces. De ConnectionState oppsummering vil definere mulige tilstander for en nettverkstilkobling. For å definere disse statene legger vi til medlemsverdier eller medlemmer til opptellingenes definisjon. Definisjonen av en medlemsverdi starter alltid med sak søkeord.

enum ConnectionState tilfelle Ukjent tilfelle Avkoblet tilfelle Tilkoblingstilkobling Tilkoblet

I C eller Objective-C vil ovennevnte tall bli litt annerledes som illustrert i eksemplet nedenfor. Hver verdi av oppsummeringen tilsvarer et heltall, for eksempel, ConnectionStateUnknown er lik 0, ConnectionStateDisconnected er lik 1, etc.

typedef enum: NSUInteger ConnectionStateUnknown, ConnectionStateDisconnected, ConnectionStateConnecting, ConnectionStateConnected ConnectionState;

Dette er ikke sant i Swift. Medlemmene av en oppsummering samsvarer ikke automatisk med et heltall. Medlemmene av ConnectionState opptelling er verdier selv og de er av typen ConnectionState. Dette gjør arbeidet med oppføringer sikrere og mer eksplisitte.

Råverdier

Det er mulig å spesifisere verdiene til medlemmene av en oppsummering eksplisitt. I følgende eksempel, medlemmer av ConnectionState opptelling har en rå verdi av typen int. Hvert medlem er tildelt en rå verdi, tilsvarende med et heltall.

enum ConnectionState: Int tilfelle Ukjent = -1 tilfelle Avkoblet = 0 tilfelle Tilkobling = 1 sak Tilkoblet = 2

Vær oppmerksom på at vi spesifiserer typen av råverdiene i opptellingenes definisjon, og at ingen toverdier kan ha samme råverdi. Hvis vi bare angir en verdi for Ukjent medlem, vil Swift automatisk øke verdien av Ukjent medlem og tilordne unike verdier til de andre medlemmene av opptellingen. For bedre å illustrere dette, er eksemplet nedenfor identisk med den forrige definisjonen av ConnectionState oppregning.

enum ConnectionState: Int sak Ukjent = -1 tilfelle Avkoblet tilfelle Tilkoblingstilkobling Tilkoblet

2. Arbeide med tall

initialisering

Bruker ConnectionState Oppsummering ligner på bruk av en hvilken som helst annen type i Swift. I det neste eksemplet erklærer vi en variabel, connectionState, og sett verdien til ConnectionState.Connecting.

var connectionState = ConnectionState.Connecting

Verdien av connectionState er ConnectionState.Connecting og variabelen er av typen ConnectionState.

Swifts typegivelse er veldig praktisk når du arbeider med opptellingene. Fordi vi erklærte connectionState som å være av typen ConnectionState, Vi kan nå tilordne en ny verdi ved å bruke syntetisk syntetisk syntetikk for antall tall.

connectionState = .Connected

Kontrollflyt

Bruke tall i en hvis eller bytte om erklæringen er grei. Husk at bytte om uttalelser må være uttømmende. Legg til en misligholde tilfelle om nødvendig.

enum ConnectionState case Ukjent tilfelle Avkoblet tilfelle Tilkoblingstilkobling Tilkoblet var connectionState = ConnectionState.ConnectingState = .Konfigurert bryterforbindelseState case .Diskonnected: println ("Disconnected") tilfelle. Koble til: println ("Tilkobling") tilfelle. Tilkoblet: println ("Connected") standard: println ("Ukjent tilstand")

Følgende eksempel viser hvordan ConnectionState Enum kan brukes. Det viser også hvordan du får tilgang til den tilknyttede verdien av en enummedlem. De canConnect funksjonen aksepterer a ConnectionState forekomst og returnerer a bool.

func canConnect (connectionState: ConnectionState) -> Bool varresultat = falsk bryterforbindelseState case .Connected (let port): hvis port == 3000 result = true default: result = false returresultat la state = ConnectionState. Tilkoblet (3000) hvis canConnect (state) // ...

De canConnect funksjonen returnerer bare ekte hvis ConnectionState forekomst overført til funksjonen er lik .Tilkoblet og den tilhørende verdien er en int lik 3000. Merk at den tilhørende verdien av Tilkoblet medlem er tilgjengelig i bytte om uttalelse som en konstant navngitt havn, som vi da kan bruke i det tilsvarende sak.

3. Tilknyttede verdier

En annen overbevisende funksjon av Swift enums er tilknyttede verdier. Hvert medlem av en enum kan ha en tilknyttet verdi. Tilknyttede verdier er svært fleksible. For eksempel trenger ikke tilknyttede verdier av forskjellige medlemmer av samme enum å være av samme type. Ta en titt på følgende eksempel for å bedre forstå begrepet tilknyttede verdier.

enum ConnectionState case Ukjent tilfelle Avkoblet tilfelle Tilkobling (Int, Double) -stilkobling Tilkoblet (Int)

De Ukjent og koblet Medlemmene har ikke en tilknyttet verdi. DeKobler til medlem har en tilknyttet verdi av typen (Int, Double), angir portnummer og tidsavbruddsintervall for tilkoblingen. De Tilkoblet medlem har en tilknyttet verdi av typen int, angir portnummeret.

Det er viktig å forstå at en tilknyttet verdi er knyttet til eller knyttet til et medlem av opptellingen. Medlemmets verdi forblir uendret. Det neste eksemplet illustrerer hvordan du lager en ConnectionState forekomst med tilhørende verdi.

var connectionState = ConnectionState.Connecting (3000, 30.0)

4. Metoder og verdier

metoder

Tallene er ganske kraftige i Swift. Opptellingen kan til og med definere metoder, for eksempel en initialiserer for å velge en standard medlemsverdi hvis ingen er spesifisert.

enum ConnectionState case Ukjent tilfelle Avkoblet tilfelle Tilkobling (Int, Double) tilfelle Tilkoblet (Int) init () self = .Unknown var connectionState = ConnectionState () // .Unknown

I dette eksemplet initierer vi en forekomst av ConnectionState oppsummering uten å spesifisere spesifikt en verdi for den. I initialiseringen av oppsummeringen setter vi imidlertid forekomsten til Ukjent. Resultatet er at connectionState variabel er lik ConnectionState.Unknown.

Verdityper

I likhet med strukturer er tallene verdiverdier, noe som betyr at en oppsummering ikke er bestått ved referanse, som klasseeksempler, men av verdi. Følgende eksempel illustrerer dette.

var connectionState1 = ConnectionState () var connectionState2 = connectionState1 connectionState1 = .Connected (1000) println (connectionState1) // .Connected (1000) println (connectionState2) // .Unknown

Selv om vi tildeler connectionState1 til connectionState2, verdiene til connectionState1 og connectionState2 er forskjellige på slutten av eksemplet.

Når connectionState1 er tildelt til connectionState2, Swift lager en kopi av connectionState1 og tilordner det til connectionState2. Med andre ord, connectionState1 og connectionState2 referer til to forskjellige ConnectionState forekomster.

Konklusjon

Enums i Swift er utrolig kraftige sammenlignet med for eksempel enums i C. En av de mest kraftfulle aspektene av tallene er at de er en førsteklasses typer i Swift. Type sikkerhet er et viktig aspekt av Swift-språket, og tallene passer perfekt i den tankegangen.