Conversie in Swift

  • een paar jaar geleden /
  • Door Roelf
Conversie in Swift

In de praktijk zul je merken dat je waarden regelmatig moet ‘omzetten’ van het ene datatype naar het andere, een fenomeen dat conversie wordt genoemd: je converteert een waarde door hem toe te wijzen aan een variabele dat een ander datatype heeft (de inhoud van Int-variabele a converteer je naar een Double-variabele b, bijvoorbeeld). Conversie in Swift is niet ingewikkeld, maar er zijn wel wat dingen die je wilt weten om niet voor verrassingen komen te staan.

Hoe werkt conversie in Swift?

Conversie is het ‘omzetten’ van een waarde naar een ander datatype. Liever gezegd: het kopiëren van een waarde naar een variabele met een ander datatype. Een voorbeeld: variabele a is een Int, maar je hebt de inhoud ervan nodig in Double-formaat. In Swift kun je het datatype van variabelen achteraf niet meer kunt wijzigen. Maar wat je wél kunt doen is de inhoud van de variabele kopiëren, naar een andere variabele met het Double-datatype.

Conversie van Double naar Int en omgekeerd

Conversie van het ene numerieke datatype naar het andere is eenvoudig. De volgende Playground laat zien hoe dit gaat:

Let met name op bij het converteren van Double-waarden naar Int-waarden. Omdat Int-waarden alleen gehele getallen kunnen bevatten, verlies je dus alles wat er achter de decimale komma staat.

In de afbeelding hieronder zie je dat dit tot verwarring kan leiden.

Conversie in Swift: van Double naar Int en terug

Op de Resultaatbalk bij regel 2 is duidelijk te zien dat het om een Double– (of Float-) waarde gaat; immers, er staat een decimale punt in het getal. Maar… op regel 4 staat 5 en niet 5.0, hoewel het hier óók om een Double-waarde gaat! Eigenlijk zou hier 5.0 moeten worden getoond, maar in plaats zie je hier dus 5 staan. Het verschil tussen een Double-waarde (regel 4) en een Int-waarde (regel 5) is dus niet altijd zo gemakkelijk te zien!

Conversie in Swift: van numerieke waarden naar strings

Met interpolatie kun je de (de inhoud van) een numerieke variabele omzetten in een String:

Conversie in Swift: van numeriek naar String en terug

Op de eerste twee regels worden twee constanten gedeclareerd en geïnitialiseerd: intWaarde die een Int-getal bevat en doubleWaarde waarin een Double-getal wordt opgeslagen.

Op de derde regel wordt interpolatie toegepast: \(intWaarde) maakt van het in intWaarde opgeslagen getal een string en dat gebeurt met \(doubleWaarde) ook, maar dan voor doubleWaarde. Tot zover niets nieuws onder de zon: om van een numerieke waarde een string te maken, zet je hem tussen aanhalingstekens en tussen de interpolatie-code:

Als je dit in een Playground plaatst, zie je op de Resultaatbalk “8″ verschijnen; Swift heeft beide waarden bij elkaar opgeteld en het resultaat in een string gezet.

Er is overigens ook een andere manier om een numerieke waarde in een String om te zetten, via de property .description. Zoals je ziet kun je .description achter de naam van een variabele plaatsen, maar je kunt dit ook meteen achter een getal (of achter een rekenkundige bewerking) zetten. In de volgende afbeelding zie je hoe dit werkt.

De .description-property in Swift

Conversie in Swift, van strings naar numerieke waarden

Met Swift is het gemakkelijk om van een string een numerieke waarde te maken. Er is slechts één voorwaarde: de inhoud van de string moet wel een getal voorstellen. Om te voorkomen dat je programma crasht omdat een string die je probeert te converteren geen getal bevat, gebruikt Swift optionals bij het converteren. Een optional is een variabele die wel of geen waarde bevat; als er een waarde is, is die ‘ingepakt’. Is er geen waarde, dan is de variabele gelijk aan nil.

Van string naar Int-waarde

Een String-waarde kan op een speciale manier worden omgezet naar een Int-waarde: via een initialiser. Een initialiser is een functie die ‘bij een datatype hoort’ en waarmee je een waarde met dat datatype kunt maken. De ‘getal’-datatypes Int, Double, Float enzovoort hebben een initialiser om de inhoud van een String om te zetten in een getalwaarde. Int dus ook: die initialiser heet Int().

Alle initialisers die bedoeld zijn een String-waarde om te zetten in een getal, dus ook Int(), retourneren optionals. Hieronder zie je twee voorbeelden:

Allereerst worden er twee String-constanten gedeclareerd en geïnitialiseerd. De eerste, stringMetGetal, bevat een string-weergave van een numerieke waarde: 123. De tweede string bevat geen getal.

Op de Resultaatbalk zie je wat er gebeurt als de Int()-initialiser met deze strings wordt aangeroepen. In het eerste geval komt er een waarde terug; in het tweede geval niet.

Conversie in Swift: van String naar Int

Van String naar Double-waarde

Ook het Double-datatype bevat een initialiser om een String om te zetten in een Double: Double(). En ook hier retourneert de Double()-initialiser een optional als het argument een String is, zoals je in het volgende voorbeeld ziet:

Conversie in Swift: van String naar Double

Swift leren: het eBook

Heeft dit artikel je enthousiast gemaakt en wil je meer over Swift leren? Dit artikel is afkomstig uit het eBook iOS Apps bouwen met Swift – Programmeren met Swift: ruim 400 pagina’s met alles wat je moet weten om zelf apps te kunnen bouwen – ook als je nog nooit eerder hebt geprogrammeerd.

Klik hier voor meer informatie over het eBook iOS Apps bouwen met Swift – Programmeren met Swift.