• Wenn du alle Inhalte sehen, oder selber eine Frage erstellen möchtest, kannst du dir in wenigen Sekunden ein Konto erstellen. Die Registrierung ist kostenlos, als Mitglied siehst du keine Werbung!

Verständnisfrage zu Optionals in Swift

Klaber

Mitglied
Thread Starter
Mitglied seit
14.09.2016
Beiträge
32
Hallo,

ich arbeite mich derzeit in Swift ein und mir ist soweit das Prinzip der Optionals verständlich.

Mir ist derzeit nur nicht ganz klar, warum Optionals bzgl. UIKit geprüft werden müssen. Als Beispiel mal folgender Codeschnipsel:

Code:
Inhalt nur für registrierte User sichtbar  Logge dich ein oder registriere dich jetzt.
Hier wird, wenn ich es richtig verstanden habe, per guard geprüft ob die optinale property "imageView.image" einen Wert hat oder nicht. Wenn ja, wird dieser "image" zugewiesen ansonsten erfolgt ein return.

Mir kam die Idee, daß man dies doch per force unwrap vereinfachen könnte, also:

Code:
Inhalt nur für registrierte User sichtbar  Logge dich ein oder registriere dich jetzt.

Der Compiler akzeptiert dies und das Programm funktioniert auch.

Mir ist aber bewußt das dies wohl nicht der richtige Weg ist. Aber warum? In diesem Beispiel ist die property imageView.image definitiv gesetzt. Was für Beispiele gibt es, in denen die property nicht gesetzt ist?

Danke!

Klaus
 

MchaelKn

Mitglied
Mitglied seit
25.06.2008
Beiträge
497
Hallo und frohe Weihnachten.
Das Besondere an Swift ist ja, dass Variable immer deklariert und auch initialisiert werden müssen. Da es aber sein kann, dass Variable erst zur Laufzeit gesetzt werden vom z.B. Anwender eines Programm, wurden die Optionals erfunden. Sie erlauben die Angabe(Deklaration) einer Variable ohne Wertzuweisung(Initialisierung), sie sind eben Optional.

Beide Varianten von Dir oben laufen, trotzdem ist die erste Variante besser, weil sie eben überprüft ob wirklich ein Wert initialisiert wurde. Swift erlaubt ein nil, also nichts. Und nichts ist eben nichts.
Deine Funktion von oben weist dem Controller ein Bild zu und prüft ob wirklich ein Bild angeben wurde. Setz mal im zweiten Code das image = nil und das Programm stützt gnadenlos ab, weil image auf einen Speicherbereich zeigt, der völlig andere Daten enthalten kann als erwartet.

Bei Deinem Bespiel leuchtet das nicht sofort ein warum Variante 1 genommen werden sollte, da die Variante 2 auch funktioniert weil vielleicht immer ein Bild angeben werden muss. Variable sollten immer geprüft werden, das kann ich als Programmierer nur empfehlen.

Was ich Dir noch empfehlen kann ist, schau Dir das mal an:


Viel besser kann man das nicht erklären!
 

Klaber

Mitglied
Thread Starter
Mitglied seit
14.09.2016
Beiträge
32
Hi,

danke für die Info. Wie gesagt, das Prinzip der Optionals ist mir soweit klar. Mittlerweile ist es mir durch Lesen der Doku zur struct URL auch klar geworden. Da durch die Übergabe eines fehlerhaften String die Initialisierung fehlschlagen kann und dann ein nil zurückgeliefert wird ist eine Prüfung notwendig.