Quick Tips: Oppramsinger i Swift

Quick Tips: Oppramsinger i Swift
21
Del
9
Del

Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.

Oppramsinger er et felles design mønster i mange programmeringsspråk. Selv om du kan bli kjent med enumerations i C og Objective-C, er Swift implementering av enumerations betydelig mer kraftig og fleksibel. I denne rask spiss, vil du lære hva som er spesielt med enumerations i Swift, hvordan du bruker dem i prosjekter, og hva som gjør dem så kraftig.

1. Hva er en Enumeration?

Oppramsinger er ikke ny, og de er absolutt ikke unikt for Swift. Men hvis du er kjent med enumerations i C, så du kommer til å elske Swift kraftige ta på enumerations.

Hvis enums eller enumerations er nytt for deg, så du ikke kan bli kjent med hva de har å tilby. I Swift, enumerations er førsteklasses typer som definerer en liste over mulige verdier for denne typen.

Et eksempel kan være mulige tilstander av en nettverkstilkobling. De mulige tilstander kan være:

frakoblet

koble

koblet

Vi kan legge til en fjerde tilstand for saken staten er ukjent. Med dette eksempelet i tankene, la oss se hvordan å definere og implementere en slik opplisting.

Basics

Som jeg sa, enumerations er førsteklasses typer i Swift. En opplisting definisjon ser veldig lik en klasse eller struktur definisjon. I eksempelet nedenfor, vi definerer ConnectionState telling.
Enum ConnectionState {}

Navnet opptellingen er innledes med enum søkeord og etterfulgt av et par klammeparentes. Den ConnectionState opplisting vil definere de mulige tilstander av en nettverkstilkobling. Å definere disse statene, legger vi til medlems verdier eller medlemmer til opplisting definisjon. Definisjonen av en verdi medlem starter alltid med saken søkeordet.
Enum ConnectionState {case Ukjent tilfelle Koblet tilfelle Koble tilfelle Koblet}

I C eller Objective-C, de ovennevnte opplisting ville se litt annerledes som vist i Eksemplet nedenfor. Hver verdi av opptellingen korresponderer med et heltall, for eksempel ConnectionStateUnknown lik 0, ConnectionStateDisconnected lik 1, etc.
typedef enum: NSUInteger {ConnectionStateUnknown, ConnectionStateDisconnected, ConnectionStateConnecting, ConnectionStateConnected} ConnectionState;

Dette er ikke sant i Swift. Medlemmene av en oppregning ikke automatisk samsvarer med en heltallsverdi. Medlemmene av ConnectionState oppregning er verdier seg selv og de er av typen ConnectionState. Dette gjør arbeidet med enumerations tryggere og mer eksplisitte.

Rå Verdier

Det er mulig å eksplisitt angi verdiene av medlemmene i en oppregning. I følgende eksempel medlemmene av ConnectionState oppregning har en rå verdi av typen Int. Hvert medlem er tildelt en rå verdi, tilsvarende med et heltall
enum ConnectionState. Int {tilfelle Unknown = -1 tilfelle Disconnected = 0 tilfellet Koble = 1 tilfelle Connected = 2}

Merk at vi angir hvilken type rå verdier i opptellingen definisjon, og at ikke to medlems verdier kan ha samme rå verdi. Hvis vi bare spesifisere en verdi for den ukjente medlem, så Swift vil automatisk øke verdien til den ukjente medlem og tilordne unike verdier til de andre medlemmene av opptellingen. For bedre å illustrere dette, er under eksempel identisk med den forrige definisjonen av ConnectionState opplisting
enum ConnectionState. Int {tilfelle Unknown = -1 tilfelle Koblet tilfelle Koble tilfelle Koblet}
2. Arbeide med Oppramsinger

initialisering

Bruke ConnectionState oppregning er lik ved hjelp av en annen type i Swift. I det neste eksempelet, erklærer vi en variabel, connectionState, og sette verdien til ConnectionState.Connecting.
Var connectionState = ConnectionState.Connecting

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

Swift type slutning er veldig praktisk når du arbeider med enumerations. Fordi vi erklært connectionState å være av typen ConnectionState, kan vi nå tildele en ny verdi ved hjelp av stenografi dot syntaks for enumerations.
ConnectionState = .Connected
Kontroll Flow

Ved hjelp enumerations i en if eller bryter uttalelse er grei. Husk at bryteren uttalelser må være uttømmende. Legg en standard sak om nødvendig
enum ConnectionState {case Ukjent tilfelle Koblet tilfelle Koble tilfelle Koblet} Var connectionState = ConnectionState.ConnectingconnectionState = .Connectedswitch connectionState {tilfelle .Disconnected. Println ("Disconnected") case .Connecting: println (" Connecting ") case .Connected: println (" Connected ") standard: println (" Ukjent State ")}

Følgende eksempel viser hvordan ConnectionState enum kan brukes. Den viser også hvordan du får tilgang tilhørende verdi av en enum medlem. Den canConnect funksjon godtar en ConnectionState forekomst og returnerer en Bool
func canConnect. (ConnectionState: ConnectionState) - > Bool {var resultat = false bryter connectionState {tilfelle .Connected (la port): if port == 3000 {resultat = true} standard: resultat = false} retur resultat} la staten = ConnectionState.Connected (3000) hvis canConnect (stat) {//...}

canConnect funksjon returnerer true hvis ConnectionState eksempel sendes til funksjonen er lik .Connected og tilhørende verdi er en Int lik 3000. Merk at den tilhørende verdien av Connected medlem er tilgjengelig i bryteren uttalelse som en konstant heter port, som vi deretter kan bruke i den aktuelle saken.

3. Assosiert Verdier

En annen spennende funksjon i Swift enums er knyttet verdier. Hvert medlem av en enum kan ha en tilhørende verdi. Tilknyttede verdiene er svært fleksibel. For eksempel, i forbindelse verdier av forskjellige medlemmer av samme enum ikke trenger å være av samme type. Ta en titt på følgende eksempel for å bedre forstå begrepet tilknyttede verdiene.
Enum ConnectionState {case Ukjent tilfelle Koblet tilfelle Connecting (Int, Double) tilfelle Connected (Int)}

The Unknown og frakoblede medlemmer ikke har en tilhørende verdi. TheConnecting medlem har en tilhørende verdi av type (Int, Double), angi portnummeret og timeout intervall på tilkoblingen. Connected medlem har en tilhørende verdi av typen Int, angi portnummeret.

Det er viktig å forstå at en tilhørende verdi er knyttet til eller assosiert med et medlem av opptellingen. Medlemmet verdi forblir uendret. Det neste eksemplet viser hvordan du oppretter en ConnectionState eksempel med en tilhørende verdi.
Var connectionState = ConnectionState.Connecting (3000, 30,0)
4. Metoder og verdityper

Metoder

Oppramsinger er ganske kraftig i Swift. Enumerations kan selv definere metoder, for eksempel en initializer å velge en verdi standard medlem hvis ingen ble spesifisert.
Enum ConnectionState {case Ukjent tilfelle Koblet tilfelle Connecting (Int, Double) tilfelle Connected (Int) init () {selv =. Ukjent}} Var connectionState = ConnectionState () //.Unknown

I dette eksemplet initial vi en forekomst av ConnectionState opplisting uten å spesifisere en verdi for det. I initializer av opptellingen, men setter vi forekomsten til Ukjent. Resultatet er at connectionState variabelen er lik ConnectionState.Unknown.

Verdi Typer

Som strukturer, enumerations er verdityper, noe som betyr at en oppregning ikke er vedtatt av referanse, som klasse tilfeller , men av verdi. Følgende eksempel illustrerer dette.
Var connectionState1 = ConnectionState () Var connectionState2 = connectionState1connectionState1 = .Connected (1000) println (connectionState1) //.Connected (1000) println (connectionState2) //.Unknown

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

Når connectionState1 er tilordnet connectionState2, skaper Swift en kopi av connectionState1 og tildeler det til connectionState2. Med andre ord, connectionState1 og connectionState2 referere til to forskjellige ConnectionState instanser.

Konklusjon

enums i Swift er utrolig kraftig i forhold til, for eksempel, enums i C. En av de kraftigste aspektene enumerations er at de er en førsteklasses typer i Swift. Type sikkerhet er en sentral del av Swift språk og enumerations passer perfekt i den tankegangen.



Previous:
Next Page: