App maken: ook jij kunt het leren!

 

de iOS Academie Forums

Forums - App-ontwikkeling - Swift en iOS: UIViewcontroller

Johan  Johan heeft nog geen Studiekaart. Klokje04 aug 2015, 17:36
Avatar
Avatar
Berichten:64


Weet iemand waarom van de Class 'UIViewcontroller' in Swift (bijna) altijd een subclass wordt gemaakt en geen object (via een instantie)? Dit vindt nagenoeg in elk project in Swift zodanig plaats.  Bij objectorientatie is het gebruikelijk om van een class een of meer objecten te maken. 

Groet, Johan 

Reageer


Rbojanssen  Ronald heeft nog geen Studiekaart. Klokje05 aug 2015, 08:47
Avatar
Avatar
Berichten:12


Ik denk dat dit is omdat je meestal je eigen variabelen, functies, etc wilt toevoegen in de subclass. UIViewController moet je zien als een "sjabloon" class.

Reageer


Johan  Johan heeft nog geen Studiekaart. Klokje05 aug 2015, 15:24
Avatar
Avatar
Berichten:64


Ja dat klopt, maar dan nog wordt er (zover ik weet) geen object van deze subclass van gemaakt, het blijft een subclass lijkt het. Dit is mij namelijk niet helemaal duidelijk (ik zou een object verwachten). Ik heb hiervoor met Java gewerkt, misschien zoek ik teveel de vergelijking op met Java. Maar  dan nog wil ik het graag weten hoe het werkt in Swift.

 

Reageer


Rbojanssen  Ronald heeft nog geen Studiekaart. Klokje05 aug 2015, 15:34
Avatar
Avatar
Berichten:12


Ik denk dat dit komt doordat de voorbeelden die je tot nu toe gezien hebt allemaal gebruik maken van het storyboard en dat xcode dit op de achtergrond regelt. Op het moment dat jij viewcontrollers via code gaat definieren zul je deze ook moeten instantieren.

Zie bv bldz 324, voor zover ik weet is dat eerst plaats in het boek waar de viewcontroller via code gamaakt wordt in tegen stelling tot de hoofstukken ervoor waar steeds het storyboard gebruikt werd.

Reageer


Rbojanssen  Ronald heeft nog geen Studiekaart. Klokje05 aug 2015, 15:37
Avatar
Avatar
Berichten:12


Voor zover ik het zie (en ik kan ernaast zitten hoor, ben ook pas beginende met xcode) kun je het als volgt voorstellen:

 

Als jij via het storyboard een viewcontroller toevoegd dan is dat hetzelfde als ergens in je code "let viewcontroller = UIViewController()" te typen, alleen xcode verbergt dat standaard voor je.

Reageer


Johan  Johan heeft nog geen Studiekaart. Klokje05 aug 2015, 16:39
Avatar
Avatar
Berichten:64


ViewContoller: UIviewController (hier wordt ViewController een subclass van UIviewController) is wat anders dan

Let ViewConroller = UIViewContoller (hier wordt ViewConroller een object gemaakt van de class UIViewController)

, dit is zoals ik het intepreteer uit het boek. Jouw onderbouwing lijkt dus niet te kloppen, of heb ik het fout?  

Als Storyboard een object maakt van de subclass ViewController dan moet dat ergens zichtbaar moeten zijn lijkt mij. 

Groet, Johan 

Reageer


Rbojanssen  Ronald heeft nog geen Studiekaart. Klokje05 aug 2015, 19:16
Avatar
Avatar
Berichten:12


Ms niet geheel duidelijk, ik probeer het even opnieuw (tis voor mij ook allemaal nieuw, haha)

Als ik het goed begrijp stel je eigenlijk 2 vragen:

1 - waarom wordt van de UIViewController class zo vaak een subclass gedeclareerd?

2 - waarom zie je zo weinig dat van deze class (of het nu subclass is of de basis class) ook een object geinstantieerd / gemaakt wordt.

Antwoord 1

Wat er vaak gebeurd, omdat je je eigen feel aan een ViewController wilt geven, is dat er een subclass van UIViewController wordt gemaakt. De UIViewController is tenslotte een class met maar basis functionaliteit, je wilt (denk ik) in 90% vd gevallen er een eigen draai aan geven.

Antwoord 2

Je kunt in XCode een class definieren, als dit een class is van het type UIViewController of een subclass daarvan, dan kun jij deze in de interface builder aan een ViewController koppelen (identity inspector -> class) en XCode zal dan bij het runnen van de app zelf het object creeeren.

 

Resumerend

- Definieer een subclass van UIViewController als je er meer in kwijt wilt dan de standaard class je te bieden heeft

- Bij het daadwerklijk gebruiken van de (al dan niet sub)class heb je de keuze: via code instantieren bv: "let mijnEigenViewController = UIViewController" OF koppel hem via de interface builder aan de ViewController op het storyboard door bij IdentityInspector -> class" de naam van je class te selecteren.

 

Reageer


Johan  Johan heeft nog geen Studiekaart. Klokje07 aug 2015, 14:12
Avatar
Avatar
Berichten:64


Thanx voor je heldere toelichting. Toch is voor mij de vraag nog niet helemaal beantwoord. Indien via Storyboard de classnaam wordt aangegeven, dan nog zou het object (die Xcode/Swift naar verwachting dan zelf aanmaakt) benaderd moeten kunnen worden lijkt mij. Daarnaast is het opnemen van de classnaam (via attributes inspector) m.i. altijd nodig om de class te linken met de user interface. 

Reageer


AppChanger  Laurens heeft nog geen Studiekaart. Klokje10 aug 2015, 20:36
Avatar
Avatar
Berichten:301
Fans:13


Hallo Johan,

Je kan het object (viewcontroller) in beperkt mate bekijken, dit doe je door op de plaats waar de class wordt gedefinieerd (bovenaan je viewcontroller file) op "

UIViewController" te klikken met de alt toets in gedrukt, nu kan je kiezen voor "Declared in "UIKit"". Misschien geeft dit je wat meer info over de werking.

 

Waarom UIViewcontroller subclassen? Deze vraag is al redelijk goed verduidelijkt, je wil regelmatig je eigen stijl, ... in je App steken. Dit is niet altijd mogelijk met d standaard functies van een UIViewcontroller. Deze bevat bvb. een property voor het instellen van de achtergrondkleur. Maar doet nog niet alles wat jij wilt. Je wil dus de class ombouwen zodat ze volgens jouw gedacht werkt.

En het benaderen van de standaard functies kan je zonder probleem. Ik denk weer aan het veranderen van de achtergrond kleur. Hier benader je de standaard mogelijkheden van de viewcontroller.

Daarnaast wordt inderdaad bij ervaren programeurs gebruik gemaakt van veel meer subclasses die bvb een label een text laten zien, de kleur, ... wordt dan in de class gedefinieerd. Daarom heet het ook objectgeorienteerd programmeren. De meeste objecten hebben hun eigen code. Dit maakt het gemakkelijker om door grootte code te lezen,  het dient uitsluitend om programma's beter te structureren en maakt  herbruikbaarheid van componenten mogelijk. Niet alles wordt in één class geschreven zoals dit wel het geval is in de meeste cursussen van Roelf. Roelf doet dit omdat de meeste mensen nog geen of weinig ervaring hebben. Dit zou het te moeilijk maken in het begin. 

Maar er wordt stilletjes aan wel wat aandacht aan gegeven.

Hopelijk is je vraag nu nog iets meer beantwoord.

Indien je nog vragen hebt hoor ik het graag.

Met vriendelijke groeten,

Laurens

 

Reageer