Swift Tutorial: Komme i gang med iOS-utvikling ved hjelp av Swift



I denne Swift-opplæringen får du en introduksjon til iOS-utvikling ved hjelp av Swift og vil også forstå alle programmeringskonseptene til Swift.

I denne Swift Tutorial-bloggen skal jeg introdusere deg for noen av de grunnleggende konseptene til Swift. Men før jeg går videre, vil jeg gjøre dere kjent med 'Hva er Swift' og hvordan kan du installere Swift på systemet ditt. Så la oss komme i gang nå !!

I denne bloggen på Swift Tutorial, vil jeg dekke følgende emner:





Swift Tutorial: Hva er Swift?

Swift er et programmeringsspråk som bruker det beste av C og Objective-C, og er utviklet av Apple Inc. for iOS / OS X-utvikling for å kjøre på mange eksisterende iOS 6 og OS X 10.8-plattformer.

Swift opplæring: Hvordan installerer jeg Swift?

For å bruke Swift trenger du Xcode-programvare for å kjøre Swift-kodingen på Playground, og når du er komfortabel med Swift, kan du bruke Xcode IDE for iOS / OS x applikasjonsutvikling.



Så forutsatt at du har en konto på Apple Developer-nettstedet, må du bare gå til Last ned for Apple-utviklere.

En gang går du til lenken, velger den nyeste tilgjengelige Xcode-versjonen og laster den ned ved å klikke på den gitte lenken nær platen.

Etter at du har lastet ned dmg-filen, kan du installere den ved å dobbeltklikke på den.



Ok!! Så når du har fått xCode, er det bare å dobbeltklikke på den for å åpne den og deretter gå til Fil -> Ny og velg Lekeplass . Velg deretter iOS og nevn lekeplassens navn. Når du er ferdig med det, klikker du på Skape.

Xcode IDE - Swift Tutorial - Edureka

Figur 1: Opprette lekeplass i Xcode IDE - Swift Tutorial

Så nå som lekeplassen din er klar, la oss komme i gang med litt koding!

Så, først, begynner vi med grunnleggende syntaks og la oss deretter skrive et hei-verdensprogram.

Swift opplæring: Grunnleggende syntaks

  • Poletter - Et token er enten et nøkkelord , en identifikator, en konstant, en streng bokstavelig eller et symbol.
  • Semikolon - I Swift trenger du ikke å skrive et semikolon () etter hver setning i koden. Bare når du bruker flere utsagn på samme linje, brukes et semikolon som avgrenser.
  • Nøkkelord - Nøkkelord er reserverte ord på kodingspråkene som ikke kan brukes som konstanter eller variabler eller andre identifikasjonsnavn med mindre de er unnslapt med backticks (`& hellip`).
  • Bokstaver - En bokstav er hovedsakelig kildekoden som representerer en verdi av et heltall, flytende nummer eller strengtype. Så, en bokstavelig kan være en hel bokstavelig, flytende bokstavelig, streng streng eller en boolsk bokstavelig.
  • Kommentarer - Kommentarer hjelper kompilatorer å ignorere tekstene som ikke skal kompileres. Flere linjekommentarer starter med / * og avsluttes med * / mens kommentarer på en linje skrives med // i begynnelsen av kommentaren.
  • Identifikatorer - Swift er et skift mellom store og små bokstaver og tillater ikke spesialtegn som @, $ og% i identifikatorer. En identifikator starter med et alfabet A til Å eller a til z eller en understrek _ etterfulgt av flere bokstaver, understrekninger og sifre (0 til 9).
  • Hvite mellomrom - Whitespace brukes i Swift til å beskrive blanks, faner, newline-tegn, kommentarer og skille også en del av en uttalelse fra en annen. Dette hjelper kompilatoren til å identifisere hvor ett element i en uttalelse slutter og neste element begynner.

Hei verdensprogram

/ * Hello World Program * / import UIKit // Siden vi lager programmet for iOS-lekeplass, må vi importere UiKit var myString = 'Hello World!' -Utskrift (myString) // Semikolon brukt siden 2 utsagn brukes sammen

Produksjon :

Hei Verden!

Nå som du har skrevet ditt første program, la oss forstå mer om variabler og datatyper.

Bli sertifisert med industriprosjekter og følg karrieren raskt

Swift opplæring: Variabler, datatyper og TypeCasting

Variabler

Variabler er ikke annet enn reserverte minneplasser for å lagre verdier. Dette betyr at når du oppretter en variabel, reserverer du litt plass i minnet.

var a = 42 // Erklæringsvariabel var a: Int = 42 // Du kan også erklære variabel ved å spesifisere datatypen. la b = 32 // Deklarere en konstant utskrift (varA)

Datatyper

Som alle andre programmeringsspråk, gir swift de innebygde datatypene, som du kan se i følgende tabell:

Type Typisk bitbredde Typisk rekkevidde
Int8 1 byte- 127 til 127
UInt8 1 byte0 til 255
Int32 4 byte-2147483648 til 2147483647
UInt32 4 byte0 til 4294967295
Int64 8 byte-9223372036854775808 til 9223372036854775807
UInt64 8 byte0 til 18446744073709551615
Flyte 4 byte1.2E-38 til 3.4E + 38 (~ 6 sifre)
Dobbelt 8 byte2.3E-308 til 1.7E + 308 (~ 15 sifre)

La meg fortelle deg et interessant faktum her borte.

I Swift trenger du ikke nødvendigvis å definere datatypen når du erklærer en variabel.

Anta at du erklærer en variabel var b = 'Hei' , så vil Swift automatisk forstå det b er en String type variabel, basert på inngangen du har gitt.

Type Casting

Nå kan du til og med utføre typekonvertering eller typecasting.

For eksempel kan du konvertere heltallverdien til en flytverdi og omvendt.

Tenk på eksenrikelig nedenfor:

la a: Int = 5679 // Deklarer 2 konstanter la b: Flyte = 2,9999 // Konvertere flyt til int-utskrift (“Dette tallet er et Int nå (Int (b))”) // Konvertering av Int til flyt-utskrift (“Dette nummer er en flyt nå (flyt (a)) ”)

Produksjon:

Dette tallet er en Int nå 2 Dette tallet er en Float nå 5679.0

Swift opplæring: Operatører

Operatører er konstruksjonene som kan manipulere verdiene til operandene. Tenk på uttrykket 7 + 3 = 10, her er 7 og 3 operander og + kalles operator.Swift støtter følgende typer operatører:

Fig 2: Ulike operatører i Swift - Swift Tutorial

Nå skal jeg ikke gå i dybden, men la meg vise deg noen enkle operasjoner i Swift. Tenk på eksemplet nedenfor:

print ('5 + 3 = (5 + 3)') // Addisjonstrykk ('5 - 3 = (5 - 3)') // Subtraksjonstrykk ('5 * 3 = (5 * 3)') // Multiplikasjonsutskrift ('5/3 = (5/3)') // Divisjonsutskrift ('5% 3 = (5% 3)') // Modulus

Produksjon:

5 + 3 = 8 5 - 3 = 2 5 * 3 = 15 5/3 = 1 5% 3 = 2.3 

Ok!! Nå som dere kjenner de grunnleggende operatørene, la oss komme i gang med betingede uttalelser.

Swift opplæring: Betingede uttalelser

Betingede uttalelser brukes til å utføre en uttalelse eller en gruppe påstander når noen vilkår er oppfylt.Det er nemlig tre betingede uttalelser - Hvis, Hvis-annet og Bytte om uttalelser.

Så, la oss begynne med If-uttalelsen nå.

Hvis uttalelse

En, hvis uttalelse kan være enten bare en enkel hvis, eller en nestet hvis uttalelse.

Så, enkelt Hvis uttalelse er den mest enkle beslutningsuttalelsen som avgjør om en bestemt uttalelse eller blokk med uttalelser vil bli utført eller ikke.

Fig 3: Flytskjema over hvis betinget uttalelse - rask veiledning

Tenk på eksemplet nedenfor:

var x: Int = 10 hvis x<20 { print('x is less than 20') } print('Value of variable x is (x)') 

Produksjon:

x er mindre enn 20 Verdien av variabelen x er 10

Nestet-Hvis

Nå, nestet hvis er en if-uttalelse eller en if-else-uttalelse i en if-uttalelse.

Fig 4: Flytskjema over nestet hvis betinget uttalelse - rask veiledning

Tenk på eksemplet nedenfor:

var x: Int = 100 var y: Int = 200 hvis x == 100 {utskrift ('Første betingelse er oppfylt') hvis y == 200 {utskrift ('Andre betingelse er også oppfylt')}} utskrift ('Verdi av variabel x er (x) ') utskrift (' Verdien av variabel y er (y) ')

Produksjon:

Første betingelse er oppfylt Andre betingelse er tilfredsstiller Verdien av variabelen x er 100 Verdien på variabel y er 200

Hvis-annet uttalelse

Hvis annet uttalelse tester tilstanden, og hvis tilstanden er falsk, utføres 'annet' uttalelse.

Fig 5: Flytskjema over If - Else Conditional Statement - Swift Tutorial

Tenk på eksemplet nedenfor:

var x: Int = 10 hvis x<20 { print('x is less than 20') } else { print('x is not less than 20')} print('Value of variable x is (x)') 

Produksjon:

x er mindre enn 20

Hvis-annet..hvis-annet (Hvis-annet-stige)

Nå kan du også ha en hvis ikke stige.Så hvis If-else-if-stige tillater brukeren å bruke mange hvis annet uttalelser i en sløyfe, og i tilfelle en av tilstandene stemmer, blir resten av løkkene forbigått.

Fig 6: Flytskjema over If - Else Ladder Conditional Statement - Swift Tutorial

Tenk på eksemplet nedenfor:

var x: Int = 100 var y: Int = 200 hvis xy {/ * Hvis tilstanden er sann, skriv ut følgende * / print ('x er større enn y')} ellers {/ * Hvis tilstanden er falsk, skriv ut følgende * / print ('x er lik y')} print ('Verdien av variabelen x og y er: (x) og (y)')

Produksjon:

x er mindre enn y Verdien av variabelen x og y er: 100 og 200

S heks

Brytererklæringen gir en enkel måte å utføre forhold til forskjellige deler av koden.

Fig 7: Flytskjema over bryterbetinget uttalelse - rask veiledning

Tenk på eksemplet nedenfor:

var a = 20 switch index {case 10: print ('Value of index is 10') fallthrough case 15,20: print ('Value of index is either 15 or 20') fallthrough case 30: print ('Value of index is 30 ') standard: utskrift (' standard sak ')}

Produksjon:

hva er markørgrensesnitt i java
Verdien på indeksen er enten 15 eller 20 Verdien på indeksen er 30

Nå, hvis du observerer utdataene, selv etter at tilstanden vår er tilfredsstilt, får vi også neste uttalelse skrevet ut. Det er fordi vi bruker uttalelsen faller gjennom . Så hvis du ikke bruker en faller gjennom uttalelse, så kommer programmet ut av bytte om uttalelse etter å ha utført matchende saksuttalelse.

Interessert i å bygge dine egne iOS-apper ??

La oss gå videre til iterative sløyfer.

Swift opplæring: Iterative sløyfer

Generelt sett utføres uttalelser sekvensielt. Den første setningen i en funksjon utføres først, etterfulgt av den andre og så videre.Det kan være en situasjon når du trenger å utføre en blokk med kode flere ganger.

En løkkeerklæring lar oss utføre en uttalelse eller en gruppe utsagn flere ganger. Så, iterative løkker er hovedsakelig For i , Samtidig som og Gjør mens Løkke.

For-In Loop

For-in-sløyfen gjentas over samlinger av elementer, for eksempel tallområder, elementer i en matrise eller tegn i en streng.

Fig 8: Flytskjema med For-In Loop - rask veiledning

Tenk på eksemplet nedenfor:

for i i 1 ... 3 {print ('Hello world! and Value of i is (i)')}

Produksjon:

Hei Verden! og verdien av i er 1 Hei Verden! og verdien av i er 2 Hello world! og verdien av i er 3

Mens Loop

En stund-sløyfesetning i Swift-programmeringsspråket utfører gjentatte ganger en måluttalelse så lenge en gitt tilstand er oppfylt.

Fig 9: Flow Chart Of While Loop - Swift Tutorial

Tenk på eksemplet nedenfor:

var gjeldende: Int = 0 // Initialiser variabler var slutt: Int = 3 la Fullført = sann mens (gjeldende<= final) // condition { //play game if Completed { print('You have passed the level (current)') current = current + 1 //statement to be executed if the condition is satisfied } } print('The while loop ends') //Statement executed after the loop ends 

Produksjon:

Du har bestått nivå 0 Du har bestått nivå 1 Du har bestått nivå 2 Du har bestått nivå 3 Mens løkken slutter

Gjør mens / gjenta mens du løkker

I motsetning til for og mens sløyfer, som tester sløyfetilstanden på toppen av sløyfen, gjentar ... mens sløyfen kontrollerer tilstanden nederst på sløyfen.

Fig 10: Flytskjema over gjør-mens-løkke - rask veiledning

Tenk på eksemplet nedenfor:

var val = 5 gjenta {print ('Value is (val)') val = val + 1} mens indeks<10 

Produksjon:

overstyring vs overbelastning c ++
Verdien er 5 Verdien er 6 Verdien er 7 Verdien er 8 Verdien er 9

OK, gutter! Det er en slutt på løkkene, nå kan vi raskt hoppe inn i Arrays & Tuples.

Swift opplæring: Arrays & Tuples

Arrays

En matrise er en datastruktur som inneholder en liste over elementer. Disse elementene er av samme datatype, for eksempel et heltall eller en streng.Anta at hvis du vil lagre navnene på vennene dine. Du kan skrive et program som følger:

var venner: Array = ['Akash', 'Sanjana', 'Avinash', 'Swatee']

Du kan også legge til nye elementer i matrisen ved hjelp av metoden append (). Se eksemplet nedenfor:

friends.append ('Aayushi') print (venner)

Produksjon:

Akash Sanjana Avinash Swatee Aayushi

Tuples

Tuples brukes til å gruppere flere verdier i en enkelt sammensatt verdi. Tenk på eksemplet nedenfor:

var failure404 = (404, “Gateway ikke funnet”) utskrift (“Koden er (failure404.0)”) print (“Definisjonen av feil er (failure404.1)”) var failure404 = (failureCode: 404, beskrivelse: “Gateway ikke funnet”) utskrift (failure404.faliureCode) // skriver ut 404.

Produksjon

Koden er 404 Definisjonen av feil er Gateway ikke funnet 404

Greit, nå som dere har forstått Arrays, er det på tide å komme i gang med sett og ordbøker.

Vil du bli sertifisert i iOS-utvikling ??

Swift opplæring: Sett og ordbøker

Settene

Sett brukes til å lagre forskjellige verdier av samme type, uten å ha noen bestemt rekkefølge som for matriser. Så du kan bruke sett i stedet for matriser hvis du vil sikre at det ikke er dupliserte verdier, eller hvis ordren av elementer ikke er et problem .
Et sett opprettes ved å plassere alle elementene (elementene) i krøllete bukseseler [], atskilt med komma. Tenk på eksemplet nedenfor:

la evenNumber: Set = [2,4,6,8,12]

La meg fortelle deg at du også kan utføre de angitte operasjonene som Union, Intersection, Subtraction.

Union: Union av A og B er et sett med alle elementene fra begge settene. Foreningen utføres ved hjelp av .union () metode.

Jeg kryss: Skjæringspunktet mellom A og B er et sett med elementer som er vanlige i begge settene. Et kryss utføres ved hjelp av .kryss() metode.

Trekk fra: Forskjellen mellom A og B (A - B) er et sett med elementer som bare er i A, men ikke i B. Tilsvarende er B - A et sett med elementer, dvs. i B, men ikke i A.Se koden nedenfor:

la evenNumber: Set = [10,12,14,16,18,20] la oddNumber: Set = [5,7,9,11,13,15] let primeNumber: Set = [2,3,5,7, 13,17,19] oddNumber.union (evenNumber) .sorted () oddNumber.intersection (evenNumber) .sorted () oddNumber.subtracting (primeNumber) .sorted ()

Produksjon:

[5,7,9,10,11,12,13,14,15,16,18,20] [] [9, 11, 15]

Ordbøker

Ordbøker brukes til å lagre uordnede lister over verdier av samme type, og Swift tillater ikke at du skriver inn feil type i en ordbok.Tenk på eksemplet nedenfor.

var exampleDict: [Int: String] = [1: 'One', 2: 'Two', 3: 'Three'] // Opprette ordbøker var accessval = exampleDict [1] // Få tilgang til ordboksverdier ut ('Value of key = 1 er (accessVal ') print (' Value of key = 2 is (exampleDict [2]) ') print (' Value of key = 3 is (exampleDict [3]) ')

Produksjon:

Verdien på nøkkelen = 1 er valgfri ('One') Verdien på nøkkel = 2 er valgfri ('To') Verdien på nøkkel = 3 er valgfri ('Tre')

Swift opplæring: Funksjoner

En funksjon er i utgangspunktet et sett med utsagn organisert sammen for å utføre en bestemt oppgave. Du kan ringe en funksjon, ha en funksjon med / uten parametere, ha en funksjon med / uten returverdier, ha funksjonstyper, og også bruke nestede funksjoner.Se eksemplet nedenfor for å forstå hvordan du definerer og ringer funksjoner. Tenk på eksemplet nedenfor:

func Ansatt (empname: String) -> String {// Definere en funksjon return empname} print (Employee (empname: 'Sayantini')) // Calling a function print (Employee (empname: 'Kislay'))

Produksjon:

Sayantini Kislay

La oss nå gå til neste del av bloggen, dvs. Closures & Structures.

Swift opplæring: Stengninger og strukturer

Stengninger

Stengninger forvirrer generelt alle, men de er bare selvstendige koder, som funksjon organisert som blokker. De kan være anonyme, mens funksjonen må ha et funksjonsnavn. Tenk på eksemplet nedenfor.

let name = {print ('Welcome to Swift Closures')} name ()

Produksjon:

Velkommen til Closures

Strukturer

Swift gir en fleksibel bygning i hvilken som helst kodeplattformsblokk for å bruke konstruksjoner som strukturer. Ved å bruke disse strukturene kan en gang definere konstruksjonsmetoder og egenskaper. Tenk på eksemplet nedenfor.
struct employeeDetails {// Definere en struktur var name = 'Bob' var id = 11021 varphonenumber = 9876543210} let details = employeeDetails () // Å få tilgang til strukturen og egenskapene skrives ut ('Navn på medarbeider er (details.name)') ('Id for ansatt er (detaljer.id)') utskrift ('Ansattes telefonnummer er (detaljer.telefonnummer)')

Produksjon:

Navnet på den ansatte er Bob Id for ansatt er 11021 Telefonnummer til ansatt er 9876543210

Nå som dere har forstått strukturene, la oss forstå Klasser og arv.

Swift opplæring: Klasser og arv

Klasser

Klasser i Swift er i utgangspunktet byggesteinene til fleksible konstruksjoner. Så, i likhet med konstanter, variabler og funksjoner, kan brukeren definere klasseegenskaper og metoder.

klasse DetailsStruct {// Definere en klasse var id: Int init (id: Int) {self.id = id}} class studentDetails {var id = 125612} let studentid = studentDetails () print ('Student id is (studentid.id ) ')

Produksjon:

Student-id er 125612

Arv

Arv er prosessen med å lage nye klasser, fra eksisterende klasser. Den avledede klassen arver alle funksjonene i basisklassen og kan også legge til sine egne funksjoner.

Klasser kan videre kategoriseres til underklasse og superklasse .

Underklasse: Hvis en klasse arver egenskaper, metoder og funksjoner fra en annen klasse, kalles den som en underklasse.

Superklasse : En klasse som inneholder egenskaper, metoder og funksjoner for å la de andre klassene arve fra seg selv, kalles en superklasse. Tenk på eksemplet nedenfor.

klasse EmployeeDetails {var id: Int var number: Int init (detail1: Int, detail2: Int) {id = detail1 number = detail2} func print () {print ('Employee id is: (id), ansatte telefonnummer er: (nummer) ')}} klassevisning: EmployeeDetails {init () {super.init (detalj1: 94567, detalj2: 9876543210) // super søkeord brukes til å kalle parametrene og metodene fra superklassen}} la medarbeiderinformasjon = visning ( ) ansattes informasjon.avtrykk ()

Produksjon:

Ansattes ID er94567, ansattes telefonnummer er9876543210

Nå som dere har en idé om hovedkonseptene i Swift. La oss nå begynne å lære de utvidede emnene, for eksempel protokoller, utvidelser, generiske og oppregninger.

Swift opplæring: Protokoller

Protokoller er som grensesnitt på andre språk for metoder, egenskaper og andre kravfunksjonaliteter. Tenk på eksemplet nedenfor:
protokoll Fly {var flies: Bool {get set} func flyable (milesCovered: Double) -> String} class Vehicle: Fly {var flies: Bool = false var name: String = 'Standard name' func flyable (milesCovered: Double) - > Streng {if (self.flies) {return '(self.name) flies (milesCovered) miles'} ellers {return '(self.name) kan ikke fly'}}} var BMWX1 = Vehicle () BMWX1.name = ' BMW X1 'BMWX1.flies = falsk utskrift (BMWX1.flyable (34))
Produksjon:
BMW X1 kan ikke fly

Swift opplæring: Utvidelser

Utvidelser brukes i utgangspunktet for å legge til funksjonalitetene til en eksisterende klasse, struktur eller oppregningstype. Med utvidelser kan du legge til beregnede egenskaper og beregnet typeegenskaper, definere og bruke nye nestede typer, definere forekomst- og typemetoder, gi nye initialiserere, definere abonnement og også gjøre en eksisterende type i samsvar med en protokoll.

Tenk på eksemplet nedenfor:

utvidelse Int {var legg til: Int {returnerer + 10} varsubtract: Int {returnerer selv- 34} var multipliser: Int {returnerer selv * 5} var divide: Int {returnerer selv / 5}} la tillegg = 3. legg til utskrift ('Verdien etter tilsetning er (legg til) ') la subtraksjon = 120. trekke ut (' Verdien etter subtraksjon er (subtraksjon) ') la multiplikasjon = 25. multipliser utskrift (' Verdien som multipliseres er (multiplikasjon) ') la divisjon = 55 .del utskrift ('Verdien etter divisjon er (deling)') la blanding = 10. legg til + 34. trekke utskrift ('Beregnet verdi er (blanding)')

Produksjon:

Verdien etter tilsetning er 13 Verdien etter subtraksjon er 86 Verdien som multipliseres er 125 Verdien etter divisjon er 11 Verdien beregnes er 20

Swift opplæring: Generiske

Generiske typer brukes til å skrive fleksible og gjenbrukbare funksjoner og typer. Så, kan i utgangspunktet bruke generiske midler for å unngå duplisering. Tenk på eksemplet nedenfor:

funk swap (x: inout T, y: inout T) {let temp = xx = yy = temp} var str1 = 'Hello' var str2 = 'Edureka' print ('Before Swapping String values ​​are: (str1) and (str2 ) ') bytte (x: & str1, y: & str2) utskrift (' Etter bytte strengverdier er: (str1) og (str2) ') var num1 = 1996 var num2 = 1865 print (' Before Swapping Int-verdier er: (num1 ) og (num2) ') bytte (x: & num1, y: & num2) utskrift (' Etter bytte av Int-verdier er: (num1) og (num2) ')

Produksjon:

Før bytte av strengverdier er: Hei og Edureka Etter bytte av strengverdier er: Edureka og Hello Før bytte av strengverdier er: 1996 og 1865 Etter bytte av strengverdier er: 1865 og 1996

Swift opplæring: Oppregninger

En oppregning i enkle termer er en brukerdefinert datatype som består av et sett med relaterte verdier. Nøkkelordet enum brukes til å definere den oppregnede datatypen. Tenk på eksemplet nedenfor:

enum Color: Int {case blue case green case red case gul init () {self = .red} func getDetails () -> String {switch (self) {case .blue: return 'Color is blue' case .green: return 'Farge er grønn' sak. Rød: retur 'Farge er rød' sak. Gul: retur 'Farge er gul' standard: retur 'Farge ikke funnet'}}} var selectColor = Color print (selectColor.rawValue) var favColor = Color .grønn utskrift (favColor.rawValue) hvis (favColor == Color.green) {print ('Favorite color is green')} print (favColor.getDetails ())

Produksjon:

2 en Favorittfargen er grønn grønn

Jeg håper du har likt å lese denne Swift-opplæringen. Vi har dekket alt det grunnleggende om Swift, slik at du kan begynne å øve nå.

For å få inngående kunnskap om Swift sammen med de forskjellige applikasjonene, kan du for live online trening med 24/7 support og levetidstilgang.

Lær av eksperter på bransjenivå

Har du et spørsmål til oss? Nevn dem i kommentarfeltet til “ Swift Tutorial ”Og vi kommer tilbake til deg.