Erste Gehversuche in Swift

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Erste Gehversuche in Swift

    Hi,
    ich beschäftige mich gerade mal etwas mit Swift. Ich habe folgenden Code geschrieben:

    Quellcode

    1. override func viewWillAppear(animated: Bool) {
    2. super.viewWillAppear(animated)
    3. var test: Integer = 15;
    4. if test == 2 {
    5. }
    6. }

    Das ganze hat keinen Sinn ich will eben nur mal ein paar grundlegende Sachen testen. Leider bekomme ich in dieser Zeile:

    Quellcode

    1. if test == 2

    Folgenden Error:
    Could not find an overload for '==' that accepts the supplied arguments


    Warum? Was mache ich falsch? Das ist doch ein Integer als muss ich den doch vergleichen können. Warum geht es, wenn ich ":Integer" weglasse?

    Die zweite Frage wäre was bringt mir ?" oder "!" hinter z.B. ":Integer". Warum kann ich da nicht nur ":Integer" schreiben? Was bringt mir das?

    Viele Grüße
    Nils
  • Ändere die eine Zeile zu

    Quellcode

    1. var test = 15


    Swift weiß automatisch, dass es Int ist, weil du 15 und nicht 15.0 geschrieben hast. Außerdem brauchst du keine Semikolons schreiben, wenn du nur eine einzige Anweisung in der Zeile hast.
  • Lies dir am besten Mal Apple's Guide zu Swift durch.

    Ein ? kennzeichnet eine Variable als optional, sie kann also einen Wert (auch 0) oder nil (keinen Wert) enthalten. Mit einem ! kannst du nach dem Wert verlangen, sofern einer existiert (oder es kommt ein Error).

    Ein ! beim definieren eine Variable meint, dass die Variable zuerst den Wert nil hat, aber du ihr später einen Wert zuweisen kannst. Wenn du auf diesen Wert zugreifen willst, musst du nicht jedes Mal ! hinter die Variabel schreiben, so wie bei normalen Optionals (siehe oben).
  • Michael schrieb:

    <i>Integer</i> ist ein Protocol in Swift. Was <i>NSInteger</i> in Objective-C ist, ist <i>Int</i> in Swift.

    Danke! Das funktioniert! Und welchen Sinn hat dann das Integer Protocol?

    Vyax schrieb:

    Lies dir am besten Mal Apple's Guide zu Swift durch.

    Ein ? kennzeichnet eine Variable als optional, sie kann also einen Wert (auch 0) oder nil (keinen Wert) enthalten. Mit einem ! kannst du nach dem Wert verlangen, sofern einer existiert (oder es kommt…

    Wie es funktioniert weiß ich. Habe ich ja auch geschrieben, dass wenn ich es weglasse es funktioniert. Das Swift das automatisch macht ist mir auch klar aber ich will mich zum einen nicht drauf verlassen und zum anderem finde ich persönlich den Code viel lesbarer, wenn man gleich auf den ersten Blick sieht, welcher Datentyp das ist. Das mit den Semikolon war Gewohnheit. Danke für die Erklärung! Ich habe mir das Handbuch zu Swift durchgelesen hatte das nur nicht so ganz verstanden. Also im Prinzip kann ich das ganze weglassen und es funktioniert trotzdem oder? Denn ich sehe keinen Grund wofür ich das benötige. Bis jetzt ging es ja auch ohne.
  • Amin Negm-Awad schrieb:

    Mehr Verborgenheit geht ja kaum.

    Ja! Außerdem macht sich das besonders unangenehm in einer IDE bemerkbar: Jede Methode kann ich mit Alt- oder Cmd-Klick auswählen, um die Doku bzw. ihre Implementierung zu sehen. Bei so wundervollen Frameworks wie beispielsweise Boost muss ich dann nur so denken wie der Compiler. ;)

    In den letzten Tagen musste ich öfters darüber nachdenken, welche Probleme das unbedachte Überladen von == schon mit sich bringen kann.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Amin Negm-Awad schrieb:

    Mehr Verborgenheit geht ja kaum.

    Ja! Außerdem macht sich das besonders unangenehm in einer IDE bemerkbar: Jede Methode kann ich mit Alt- oder Cmd-Klick auswählen, um die Doku bzw. ihre Implementierung zu sehen. Bei so wundervollen Frameworks wie beispielsweise Boost muss ich dann nur so denken wie der Compiler. ;)

    In den letzten Tagen musste ich öfters darüber nachdenken, welche Probleme das unbedachte Überladen von == schon mit sich bringen kann.
    Jedes dieser Features ist für sich, jedenfalls wenn man eine Sekretärin ist und SW-Entwicklung für ein Tippproblem hält, ganz toll. In der Kombination wird das ein Monster des Kauderwelsch.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • hns schrieb:

    Und meien Erwartung dass die ersten Fragen zu ! und ? kommen scheint sich zu bestätigen.

    Allein das wird mehr Anfänger frustrieren, als sämtliche ungewohnten Objective-C-Konstrukte zusammen.

    Sehr viel Spaß machen übrigens auch gemischte Float-Double-Ausdrücke; explizite Typumwandlungen soweit das Auge reicht. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • Als ich das erste Mal etwas über die sogenannten Optionals gelesen habe, hat mich das auch etwas verwirrt, aber mittlerweile ist es für mich ganz logisch. Deshalb folgendes von Anfänger für Anfänger. :)

    In Objective-C kann jedes Objekt nil sein, was zu einem seltsamen Verhalten führen und das Debugging erschweren kann. Persönlich hatte ich jedoch noch kein Problem mit nil Objekten in Objective-C.

    Eines der Entwicklungskonzepte von Swift war Sicherheit. Apple hat gesagt, Objekte dürfen nicht nil sein. Benötigt man doch ein Objekt, welches nil sein darf, gibt es in Swift die Optionals, die wiederum zweigeteilt werden können:

    Einerseits in normale Optionals, deren Wert bei jedem Zugriff durch Forced Unwrapping extrahiert werden muss. Eine zweite Möglichkeit ist Optional Binding:

    Quellcode

    1. // Optional deklarieren
    2. var possibleValue: AnyObject?
    3. // Optional Binding
    4. if let value: AnyObject = possibleValue {
    5. // possibleValue != nil
    6. // Anstatt des Forced Unwrappings (possibleValue!)
    7. // kann die Konstante value verwendet werden
    8. } else {
    9. // possibleValue == nil
    10. }
    Alles anzeigen


    Die zweite Art der Optionals sind die Implicitly Unwrapped Optionals, die sich wie normale Objekte in Objective-C verhalten:

    Quellcode

    1. // Implicitly Unwrapped Optional deklarieren
    2. var someObject: AnyObject!
    3. // Zugriff
    4. someObject.someProperty = "Some Value"