vadÄrvar1273398/fulltext01.pdfplats: "l ada nummer 1" , eller "den bruna l...

15
TVE-F18035 Examensarbete 15 hp December 2018 VadÄrVar - en organistationsapp Jona Lövheim

Upload: others

Post on 12-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

TVE-F18035

Examensarbete 15 hpDecember 2018

VadÄrVar - en organistationsapp

Jona Lövheim

Page 2: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

Teknisk- naturvetenskaplig fakultet UTH-enheten Besöksadress: Ångströmlaboratoriet Lägerhyddsvägen 1 Hus 4, Plan 0 Postadress: Box 536 751 21 Uppsala Telefon: 018 – 471 30 03 Telefax: 018 – 471 30 00 Hemsida: http://www.teknat.uu.se/student

Abstract

VadÄrVar - en organisationsapp

Jona Lövheim

Arbetet utforskar möjligheten att skapa en iOS-applikation och undersöker Apples programmeringsspråk Swift. Appen syftar till att ge föräldrar en möjlighet att organisera undanlagda barnkläder och skor genom att lägga in dem i ett register. Slutprodukten är en app där användaren lägger in föremål som definieras av fem kategorier. Appen sorterar föremålen och presenterar en trädvy som visar de gemensamma kategorierna.Data i appen sparas permanent som JSON-filer.

ISSN: 1401-5757, TVE-F18035Examinator: Martin SjödinÄmnesgranskare: Martin SjödinHandledare: Carl Nettelblad

Page 3: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

Innehall

1 Popularvetenskaplig sammanfattning 4

2 Introduktion 42.1 Det har ar Swift . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Varfor ett helt nytt sprak? . . . . . . . . . . . . . . . . . . . . . . 52.3 Xcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.3.1 Interface Builder . . . . . . . . . . . . . . . . . . . . . . . 62.3.2 Kallkod . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.4 Persistens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.4.1 JSONEncoder() . . . . . . . . . . . . . . . . . . . . . . . . 82.4.2 PropertylistEncoder() . . . . . . . . . . . . . . . . . . 8

3 Resultat 83.1 Vyer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.2 Kallkod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.2.1 redigeringsvy.swift . . . . . . . . . . . . . . . . . . . . 103.2.2 delegate.swift . . . . . . . . . . . . . . . . . . . . . . 103.2.3 presentationsvy.swift . . . . . . . . . . . . . . . . . . 103.2.4 foremal.swift . . . . . . . . . . . . . . . . . . . . . . . . 11

3.3 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.3.1 Lagring av data . . . . . . . . . . . . . . . . . . . . . . . . 113.3.2 Persistens . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.3.3 Kod kontra Interface Builder . . . . . . . . . . . . . . . . 113.3.4 Kondensering av data till tradvy . . . . . . . . . . . . . . 12

4 Diskussion 134.1 Presentation av data . . . . . . . . . . . . . . . . . . . . . . . . . 134.2 Kod kontra Interface Builder . . . . . . . . . . . . . . . . . . . . 134.3 Testning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.4 Swift kontra Java . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5 Slutsatser 14

3

Page 4: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

Sammanfattning

Arbetet utforskar mojligheten att skapa en iOS-applikation och un-dersoker Apples programmeringssprak Swift. Appen syftar till att ge foraldraren mojlighet att organisera undanlagda barnklader och skor genom attlagga in dem i ett register. Slutprodukten ar en app dar anvandaren laggerin foremal som defineras av fem kategorier. Appen sorterar foremalen ochpresenterar en tradvy som visar de gemensamma kategorierna.Data i ap-pen sparas permanent som JSON-filer.

1 Popularvetenskaplig sammanfattning

Arbetet utforskar mojligheten att skapa en telefonapp dar anvandaren laggerin en lista over exempelsvis barnklader de har liggandes i forrad for att pa sasatt fa overblick over sina saker och slippa onodiga inkop. Arbetet beskriverutvecklingen av en app till iPhone och en kort introduktion till Apples pro-grammeringssprak Swift.

For att styra exempelvis en smartphone anvands ett programmeringssprak.Med spraket kan en programmerare exempelvis bestamma att “Om anvandarentrycker pa hemknappen Sa ska skarmen slas pa“. Liksom med naturliga spakhar programmeringsspraken olika syntax for att formedla information, vilka allahar sina for- och nackdelar. Arbetet kommer att utforska och anvanda sig avApples nya programmeringssprak Swift.

For att skapa en app anvader sig programmerare av olika datorprogram ochApples fall heter programmet Xcode. I programmet bestams dels de visuelladetaljerna som vilka knappar appen ska inehalla och sen skriver programmera-ren, med hjalp av programmeringsspraket, vad som ska handa nar anvandarentrycker pa en viss knapp.

I appen kommer anvandaren att ha mojlighet att lagga till, redigera och tabort foremal. Nar anvandaren lagger till ett nytt foremal inordnas det automa-tiskt sa att det som visas ar en lista med etiketter exempelvis “sko“ for alla skoroch “overall“ for alla overaller.

2 Introduktion

De flesta flerbarnsforaldrar har en diger samling barnklader, skor, stovlar, regnklader,vinterklader m.m. De klader och skor som inte langre passar laggs undan foratt invanta nasta barn. Nar ett barn vuxit ur ett plagg aker det ut i forradetmen nar sedan nasta barn har vuxit i den storleken ar det inte latt att kommaihag vilka klader som finns sparade. I varsta fall koper man nya saker, trots attdet redan finns nagot som passar i forradet och i ”basta” fall far man vandaupp och ner pa alla lador for att inventera vad som egentligen finns. For und-vika denna inventering, och for att kunna utnyttja sina resurser pa basta sattkommer detta arbete att utforska mojligheterna att skapa en mobilapplikationdar anvandaren kan lagga in sina saker i ett register. Objekten laggs in med ettantal egenskaper som till exempel : namn: ”stovel” , arstid: ”sommar” och enplats: ”lada nummer 1” , eller ”den bruna ladan”. Darefter sorteras de automa-tiskt, och visas som en tradvy. Anvandaren ska kunna lagga till, redigera och ta

4

Page 5: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

bort foremalen. Arbetet utforskar skapandet av appen for iOS i utveklingsmiljonXcode och med det realtivt nya programmeringsspraket Swift.

2.1 Det har ar Swift

Att skriva appen i Java hade varit det naturliga valet da kurser i Java ingar iutbildningen. Arbetet syftar dock inte endast till att skapa en app utan ocksaatt fa en inblick i ett nytt sprak och en ny utvecklingsmiljo och darfor valdesApples sprak Swift och utvecklingsmiljon Xcode. Swift ar liksom Java ett objekt-orienterat hognivasprak. Det introducerades forsta gangen 2014 (Swift 1.0), ochsedan dess har en ny version av spraket kommit ut en gang per ar. Nuvarandekonfiguration ar Swift 4.0 [3]. Tidigare skrevs iOS-applikationer i Objective-C,som da var Apples standardsprak. Trots att det ar forenat med betydande riskeratt skapa ett helt nytt sprak ansag Apple till slut att fordelarna overvagde.

2.2 Varfor ett helt nytt sprak?

1. Pa egna benNar Apple lanserade Swift beskrev de spraket som “Objective-C withoutthe C“. Det var ocksa en av de stora anledningarna till att de valde attskapa ett helt nytt sprak, for aven om Apple utvecklade och modifieradeObjective-C sag de alltid till att det var bakatkompatibelt med C. NarSwift lanserades valde man att franga det kravet och pa sa vis kundede sjalva bestamma grundlaggande designval utan att vara beroende avnagon annan.

2. Enkel syntaxApple har jobbat mycket med att forenkla syntaxen och lasbarheten iSwift. Nagra skillnader mellan Java och Swift ar:

• Arrayer I Swift ar Arrayer som en blandning av Arraylist och Arrayi Java. En Array i Swift innehaller bland annat metoder for utokaarrayen.

• Typinferens Till skillnad fran Java kan Swift sjalv rakna ut vilkentyp en variabel har, forutsatt att den ges ett varde i deklarationen.

• Inga semikolon Apple valt att ta bort behovet av semikolon eftervarje sats. Istallet tolkar kompilatorn varje rad som en sats.

• Variabler i strangar For att skriva ut en variabel inuti en strangi Swift skrivs : “strang \(variabel) strang \(variabel) strang“. Tillskillnad fran i Java : “strang“ + variabel + “strang“ + variabel +“strang“

• Sjalvforklarande returtyp i metodhuvud I Java maste man vetaatt returtypen star efter synligheten i metodhuvudet. I Swift skrivsreturvardet efter symbolen “− >“ vilket ger anvandaren en hint omvad returtypen betyder.

3. OptionalsEn viktig del av Swift ar implementationen av optionals. En optional aren typ vilken maste “packas up“ for att komma at dess varde. Syftet med

5

Page 6: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

en optional ar att hantera en situation dar programmeraren har definie-rat en variabel, men nar den i ett visst lage inte pekar pa nagot objekt.Genom att definiera variabeln som optional kan variabeln antingen in-nehalla en referens/varde eller “null“ . Darmed kan programmeraren und-vika NullPointerException som ar vanligt i Java [4] och en kalla tillsvarupptackta fel i C-baserade sprak over lag.

4. Open SourceI decemeber 2015 meddelade Apple att Swift skulle goras open source[2].Darmed bjod de in alla som sa onskar att hjalpa till att utveckla spraketoch felsoka nya funktioner. Genom att gora Swift Open Source kunde delocka till sig nya utvecklare, vilket har lett till att spraket fatt en storrespridning. I dagslaget ar Swift kompatiblet med MacOS och Ubuntu (Li-nux) men det finns inget som hindrar att det ocksa skulle kunna anvandasfran exempelvis Windows. Beslutet att oppna kallkoden har sannolikt va-rit en bidragande faktor till att gora Swift till det populara sprak det aridag[6].

5. PlaygroundsEn funktion som Swift haft sedan lanseringen ar Playgrounds, vilket aren utvecklingsmiljo dar anvandaren kan testa enskilda algoritmer utanatt behova skriva ett helt program. Anvandaren kan aven testa enskildakodrader da varje kodrad exekveras omedelbart nar den har matats in.

2.3 Xcode

Xcode ar en sa kallad IDE (Integrated Development Environment), ett programsom anvands for att utveckla applikationer. I stora drag bestar Xcode av endel dar anvandaren visuellt skapar de olika vyer som appen ska innehalla vil-ken heter Interface Builder, samt en “editor area“ dar programmeraren oppnarkallkoden dar programmet skrivs.

2.3.1 Interface Builder

Interface Builder anvands for att bygga upp den del av appen som anvandarenkommunicerar med. Dar kan programmeraren till exempel lagga till ett faltdar anvandaren kan lasa eller sjalv fylla i information, eller lagga till en knappmed vilken anvandaren kan styra appens beteende. For att lagga till “Cancel“-knappen i redigeringsvyn ( figur 1) dras ett “knapp - objekt“ till den plats darknappen ska vara. Darefter kopplas knappen till kallkoden for att dar definieravad som ska handa nar anvandaren trycker pa knappen.

En app inehaller inte sallan flera olika vyer (i det aktuella fallet en vy meden lista over foremal och en annan vy for att lagga till ett nytt foremal). Vy-erna skapas genom att lagga till onskat antal viewControllers ( Figur 2 ).De separata vyerna lankas samman av Segues. En Segue ar ett objekt som han-terar den visuella overgangen fran en vy till en annan. Nar anvandaren gorett val som innebar att vyn ska bytas, anropar den forsta viewControllern

funktionen prepare(for: ,sender:) vilken ser till att ge seguen den infor-mation som behovs fran den forsta viewControllern till nastkommande

6

Page 7: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

Figur 1: En tableView med tva celler

Figur 2: Viewcontrollers. I mitten presentationsvyn och till hoger redigeringsvynsamt “redigera foremal “-Segue och “nytt foremal“- segue (de tva pilarna mellanvyerna)

viewControllern . I appen finns tva olika Segues, en for nar anvadaren tryckerpa “lagg till foremal“-knappen och en for “redigera foremal“-knappen.

2.3.2 Kallkod

Varje vy kopplas till en motsvarande .swift-fil med den kallkod som styr vynsfunktionalitet.

Eftersom Swift inehaller ett stort bibliotek av funktioner ar den huvudsakligauppgiften vid skapandet av en app ar att utoka (“override“) de redan existerandefunktionerna. I figur 3 ser vi funktionen tableView som kommer fran bibloteket

7

Page 8: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

UIKit (UI star for User Interface, alltsa anvandargranssnitt). Genom att utokaTableView-klassen far vi tillgang till en lang rad funktioner vilka kan skapa entabellvy innehallande scrollbara celler (figur 1). I figur 3 ser vi att funktionentableView bland annat utokas genom att kalla funktionen configureText, vilkenandrar texten som cellen visar.

Figur 3: En utokning av funktionen tableView() som kommer med i biblioteketUIKit

2.4 Persistens

Swift innehaller sedan version 4.0 funktioner for “encoding“ och “decoding“ vil-ket gor det enkelt att spara datan permanent. Tva av dessa funktioner ar arJSONEncoder() och PropertyListEncoder(). Som namnen antyder sa skaparden ena funktionen en JSON- fil och den andra en Propertylist. De bada for-maten har manga likheter, och ar i grund och botten satt for ett program attserialisera sina data, vilket innebar att datan omformas sa att de kan sparaspermanent.

2.4.1 JSONEncoder()

JSON[8] star for Java Script Object Notation. Det ar i dag det popularastefilformatet for overforing av information mellan enheter over internet. [9] Somappen nu ar beskaffad stannar alla data pa den enhet dar den ar installerad,men om en senare version skulle erbjuda anvandare att dela information medandra anvandare over internet vore JSON ett bra val av datastruktur.

2.4.2 PropertylistEncoder()

Property list var en del av NeXT-STEP arkitekturen som ar basen till macOSoch har alltsa funnits sedan 1989 [5]. Stodet for propertylist ar bra, och en avfordelarna med Property list ar just att det har ett val utvecklat stod i Xcodevilket gor dem lattoverskadliga. Property list anvands endast av Apple och arsaledes inte lampat for applikationer som vill komunicera med icke-iOS-enheter.

3 Resultat

3.1 Vyer

Appen bestar av tva separata vyer ( viewControllers ) dar den forsta hante-rar representationen av foremalen (har kallad presentationsvyn) och den andra

8

Page 9: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

hanterar hur nya objekt laggs in eller redigeras (har kallad redigeringsvyn).

Redigeringsvyn (figur 4) innehaller fem redigerbara falt vilka motsvarar de femkategorierna: “kategori“, “sasong“ , “farg“ , “storlek“ och “plats“. Anvandarenkan vaja att antingen trycka “Done“ och lagga till foremalet, eller “Cancel“for att avbryta inlaggningen. Presentationsvyn (Figur 5) visar en lista overforemalens gemensamma kategorier Har finns en “bakat-pil“ for att backa tillen overkategori och en “+“- knapp for att lagga till ett nytt foremal. Vyernasammanlankas med hjalp av Segues.

Figur 4: Redigeringsvyn med ett exempelforemal inskrivet

Figur 5: Presentationsvyn med tre kategorier

9

Page 10: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

3.2 Kallkod

Appen bestar av 4 st .swift-filer: en fil for redigeringsvyn, en fil som ar nodvandigfor att kunna skapa delegater, en for presentationsvyn samt en fil dar foremalendefinieras.

3.2.1 redigeringsvy.swift

I redigeringsvyn lagger anvandaren till eller redigerar ett formal. Nar anvandarentrycker pa “+“ i ovre hogra hornet pa presentationsvyn ( figur 1) visas istallet re-digeringsyn . Istallet for att visa de foremal som finns inlagda sa ser anvandarenen skarm med fem stycken redigerbara falt for att skapa ett nytt objekt. Efteratt ha fyllt i uppgifter om foremalet i fraga, trycker anvandaren pa “done“, redi-geringsvyn stangs da och det nya objektet skickas med genom en delegat-metodtill presentationsvyn.

3.2.2 delegate.swift

Delegatmetoder ar ett satt att skicka information mellan olika viewControllers.Dessa skapas som ett protokoll i den klass som ska skicka informationen och im-plementeras darefter i den klass som onskar ta emot. Genom att skapa en delegatnar anvandaren exempelvis trycker pa en knapp skapas en handelsekedja somdriver programmet framat.

3.2.3 presentationsvy.swift

Presentationsvyn ar den fil dar merparten av appen definieras. Nar anvandarenskapat ett nytt objekt i redigeringsvyn skickas det tillbaka till presentationsvynmed en delegat. Har skapas en arrray som tar emot de objekt som skapats iredigeringsvyn. I kallkoden till presentationsvyn finns bland annat:

• redigeringsvyVC(controller: redigeringsvy didFinishAdding item:

foremal)

Eftersom presentationsvyn implementerar delegatprotokollet fran redige-ringsvyn maste den innehalla vissa specifika funktioner. En av dessa funk-tioner ar ovanstaende funktion och som namnet “didFinishAdding“ im-plicerar sa anropas funktionen nar anvandaren lagt till ett nytt foremal.Genom att det ar en delegatmetod sa kan redigeringsvyn skicka med enreferens till det tillagda foremals-objektet.

• tableView( tableView: UITableView, cellForRowAt indexPath: IndexPath)

-> UITableViewCell

Detta ar sjalva huvudfunktionen for represenationen av celler i tabellvyn.Den gar igenom cellerna en efter en, lagger till den information som skavisas och returnerar cellen.

• @IBAction func ...

IB star for Interface builder. IBAction ar en markor, som kopplar tillexpempel en knapp i Interface Builder med en viss funktion i kallkoden.Nar anvandaren trycker pa knappen kors koden som hor till den funktio-nen. Det kan jamforas med implementationen av Interfacet ActionListeneri Java. Dar implementeras interfacet i en klass och lyssnaren kopplas till

10

Page 11: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

ett objekt, till exempel en knapp. Nar anvandaren trycker pa knappenexekeveras en viss kod.

3.2.4 foremal.swift

Filen innehaller den klass som skapar ett objekt for resprektive foremal. Objek-tet innehaller i sin tur en Dictionary med 5 kategorier samt functioner for attlagga till och ta bort kategorier. Nar anvandaren fyller i falten i redigeringsvynskapar den ett nytt foremalsobjekt genom att anropa objektvyn.

3.3 Metod

De storsta utmaningarna under projektets gang har dels varit hur datan skullelagras permanent men framst hur listan med foremalen skulle kondenseras saatt anvandaren far se en tradvy, istallet for en lista med samtliga objekt.

3.3.1 Lagring av data

Ett forsta val stod mellan att lagra foremalens egenskaper som instansvariablereller i en Dictionary. Valet foll pa en Dictionary da malet med appen ar attanvandaren forutom att lagga till nya formal aven ska kunna lagga till egnakategorier. I den nuvarande konfigurationen hade det dock rackt med att varjeforemal hade haft fem stycken instansvariabler vilka anvandaren kunde satta dadet inte ar mojligt for anvandaren att lagga till kategorier. Utover Dictionaryanvands Arrays for lagring av objekt och strangar.

1. Array

Till skillnad fran exempelvis Java, kan en Array i swift andra storlek. Detgor att en array ar det sjalvklara valet for att lagra enskilda data (heltal,strangar, objekt osv.). I appen anvandes en Array for att spara de foremalsom anvandaren lagt in och de etiketter som representerar kategoreier.

2. Dictionary

En dictionary anvands for att lagra en nyckel med ett motvarande varde,eller mer generellt for att spara tva sorters data som hanger ihop. KlassenDictionary kommer i sin tur med en rad inbyggda funktioner, dariblandcount() , som returnerar antalet nyckel-varde-par.

3.3.2 Persistens

For att astadkomma permanent lagring av datan stod valet mellan JSON ellerPropertylist, dar bada utan problem uppfyller de (blygsamma) krav som fannsi den aktuella appen, namligen att lagra en Array av objekt. Anlednigen attJSON anda valdes var att inte utesluta mojlighten att i framtiden kunna laggatill funktioner som skickar data till andra enheter over internet.

3.3.3 Kod kontra Interface Builder

I den nuvarnade versionen av appen har redigeringsvyn ett fast antal kategorier.For att skapa den anvands med fordel Interface Builder viket gor det latt attlagga till onksat antal celler direkt i Interface Builder. Det hade varit onskvart

11

Page 12: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

att anvandaren skulle kunna lagga till nya kategorier. Det innebar att redige-ringsvyns utseende skulle andras under korning. Da ar det inte langre mojligtatt skapa cellerna i Interface Builder, utan de maste skapas fran kallkoden. Avden anledningen blev valet att inom ramen for detta arbete endast ha fastakategorier.

3.3.4 Kondensering av data till tradvy

Syftet med kondenseringen ar att anvandaren, istallet for att se en lista oversamtliga objekt, ska presenteras med en lista over kategorier, sasom “sko“ foralla skor, “overall“ for alla overaller och sa vidare.

Det forsta vagvalet stod mellan att skapa en separat viewControllerfor tradstrukturenmed kategorierna och en annan viewController dar de faktiska foremalen finnsrepresenterade. Att valja tva separata vyer skulle underlatta da de olika vyernakunde skraddarsys med anpassade knappar. Varje vy skulle da endast hanteraen sorts objekt vilket skulle underlatta kodningen. Nackdelen vore att det skullekravas en hel del arbete for att sammanlanka de olika vyerna och bygga uppden grundlaggande strukturen. Den sistnamda faktorn vagde tyngst och darfortogs beslutet att ha en vy.

En nackdel med att ha en gemensam vy ar att den da maste hantera tva skildavarianter av listobjekt, en dar varje listobjekt motsvaras av ett foremal och endar listobjekten ar en etikett som representerar en samling av objekt. I det forrafallet ska anvandaren ha mojlighet att redigera objekten, men i det senare ardet inte meningsfullt att kunna redigera, da det i detta fall endast ar en eti-kett. Detta lostes genom att knappen for att redigera ett foremal endast visasnar vyn innehaller referenser till faktiska objekt. Eftersom det ar onskvart attanvandaren har mojlighet att lagga till ett objekt oavsett var i appen hen ar,sa behover ingen justering goras for “lagg till nytt foremal“-knappen.

En implementation som testades var att da ett nytt foremal lades till i redi-geringsvyn hamnade det dels i en array med samtliga objekt, och utover detlades det in i en array som representerade de kategorier som skulle visas. Narett nytt objekt hade samma kategori som ett tidigare las detta endast till i ar-rayen for samtliga objekt. Ett stort problem med den typen av layout var attalla nivaer i tradvyn behovde en egen array, nagot som snabbt blev ohallbart.Det hade forsvarat sparprocessen da ett stort antal arrayer skulle sparas, ochdessutom skulle det inneara svarigheter att hitta ratt objekt nar de skulle tasbort, laggas till eller redigeras. I stallet for flera arrayer blev losningen istalletatt samla alla objekt i en array. Darefter skapades en separat funktion vid namnObjektAttVisa() som vid varje tillfalle soker igenom arrayen med samtliga ob-jekt och returnerar de objekt som anvandaren onskar se.

Funktionen ObjektAttVisa() tar listan av samliga objekt och skapar en Ar-ray med etiketter for fallet med kategorier eller objekt nar de faktiska objektenska visas. For att ObjektAttVisa() ska veta vilken variant som efterfragasinfordes en raknare vilken okar for varje gang anvandaren valjer en kategori.Nar raknaren nar ett visst varde byter ObjektAttVisa() fran att visa kategori-etiketter till att istallet visa foremal.

12

Page 13: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

1. Korexempel: Anvandaren har lagt till 4 st skor. Dessa representeras i denforsta representationsvyn av kategorin “sko“. Nar anvandaren trycker pakategorin “sko“ , skickas ett anrop till ObjektAttVisa(), vilket ber densoka igenom alla objekt vilka har kategori “sko“ och darefter kondense-ra dessa objekt med hjalp av nastkommande kategori i tradstrukturen,namligen “sasong“. Saledes visas anvandaren till exempel kategorierna“vinter“ och “sommar“. Om anvandaren sedan valjer katergorin “som-mar“ och om vi antar att kategorin “sommar“ ar den nast sista, skulle ettanrop till ObjektAttVisa() returnera en lista over sommarskor.

4 Diskussion

4.1 Presentation av data

I appens nuvarande konfiguration skapas en tradvy dar foremalen till en borjankondenceras efter deras gemensamma kategorier, och darefter efter gemensamsasong. Nar anvandaren klickar pa respektive sasong visas en lista over deforemal som stammer in pa den beskrivningen. En intressant forbattring vo-re att anvandaren far mojlighet att valja mellan en tradrepresentation och attse en lista over de formal som som stammer in pa den beskrivningen. En sadanlosning skulle ge en bra balans mellan att anvandaren a ena sidan inte behoverklicka for manga ganger och att det heller inte blir en allt for lang lista medforemal som visas. Ett alternativ vore att appen sjalv anpassar antalet steg saatt foremalen inte overstiger ett visst antal objekt. For en komplett app skulledet aven vara pa sin plats med en sokfunktion, dar anvandaren kunde hittaenskilda objekt, eller se vad som fanns pa en specifik plats.

4.2 Kod kontra Interface Builder

Stora delar av appen har kunnat skapas direkt i Interface Builder. Det blir docktydligt att detta ger begransningar och for att forbattra appen ytterligare skulledet i manga fall behova goras programmatiskt. Da arbetet endast skrapat paytan av vad Swift och Xcode ar , har begransningarna i Interface Builder ocksatillatits begransa projektet.

4.3 Testning

Efter att appen fardigstallts har den testats av betatestare for att upptackaeventuella buggar, men aven for att fa feedback vad galler anvandarvanlighet ochupplagg. Det blev uppenbart att det finns manga olika satt pa vilket anvandareonskar organisera sina foremal. For att mota det vore det intressant att goraappen sa pass “formbar“ att olika anvandare kan lagra sina foremal pa detsatt som passar dem bast. I den nuvarande konfigurationen innehaller appende fasta kategorierna : “kategori“, “sasong“ , “farg“ , “storlek“ , “plats“ . Ensadan indelning fungerar bra vid ett relativt litet antal foremal, men det blevtydligt under testningen att det ar mojligt att forfina bade vilka kategorier somfinns och hur foremalen sen struktureras. En variant for mer formbarhet vore attrubrikerna for kategorierna var mer overgripande sa som “kategori“ och darefter“underkategori“. Med en sadan losning skulle anvandaren sjalv fa valja om henonskade lagga till “Babyklader“ som kategori och “Body“ som underkategori,

13

Page 14: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

eller om hen hellre onskade att lagga in “jacka“ som kategori och “host“ somunderkategori.

4.4 Swift kontra Java

Overgangen far Java till Swift var en positiv upplevelse. Skillnaderna i syntax varinte sa besvarande, medan de forenklingar som finns i Swift gjorde stor skillnad.Sma detaljer som hur man skriver ut variabler i strangar gor stor skillnad forhelhetsintrycket. Att slippa semikolon i slutet av satserna ar aven det nagot somgor storl skillnad for helheten da koden blir “renare“ och darmed lattare attoverblicka. Anvandningen av Interface Builder var mycker positiv, men nagonegentlig jamforelese kan inte goras da erfarenhet saknas av motsvarande verktygi Java som exempelvis Java Swing.

5 Slutsatser

Arbetet undersokte mojligheten att skapa en telefonapp for organisering avbarnklader. Malet har uppfyllts men samtidigt finns stora mojligheter att ute-veckla och forbattra produkten. Den storsta utmaningen forutom att satta sig ini och lara sig utvecklingsmiljo och sprak var att skapa en givande tradrepresentationav foremalen utifarn gemensamma kategorier. Programmeringsspraket Swift gorskal for namnet. Det kanns latt och roligt att anvanda.

14

Page 15: VadÄrVar1273398/FULLTEXT01.pdfplats: "l ada nummer 1" , eller "den bruna l adan". D arefter sorteras de automa-tiskt, och visas som en tr advy. Anv andaren ska kunna l agga till,

Referenser

[1] Apple, The Swift Programming Language, revised 2018-03-29, Apple Inc, 1Infinite Loop. last november 2018.

[2] Weber, Steven. The Sucess of open source, Harvard University Press, Cam-bridge Massachussets. 2004.

[3] “Swift Has Reached 1.0“ Apple Developer official blog, September 9, 2014.developer.apple.com/swift/blog/?id=14

[4] Zhitnitsky, Alex. “Java NullPointerException: The One Tiny Thing That’sKilling Your Chances of Solving It“, OverOpsBlog, August 11, 2016,blog.takipi.com/java-nullpointerexception-the-one-tiny-thing-thats-killing-your-chances-of-solving-it/

[5] Singh,Amit. “A Brief History of Mac OS X“, osx-book, Singh Mac OS X Internals , December 2003, osx-book.com/book/bonus/ancient/whatismacosx/history.html

[6] “TIOBE Index for December 2018“, December, 2018, tiobe.com/tiobe-index/

[7] Dua, Kinjal. “8 Advantages of Using Swift for iOS Development“. Clear-BridgeMobile, February 14, 2017, clearbridgemobile.com/8-advantages-choosing-swift-objective-c-ios/

[8] Crockford, Douglas. Introducing JSON. December 14, 2018, json.org

[9] “The Rise and Rise of JSON“. Two-Bit History, 21 Sep 2017,twobithistory.org/2017/09/21/the-rise-and-rise-of-json.html

15