Modulare Programmierung in Swift

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

  • Modulare Programmierung in Swift

    Modulare Programmierung in Swift

    Guten Abend,
    da ich schon einmal Hilfe zur Selbsthilfe hier in diesem Formum erhalten habe, traue ich mich nochmal eine Frage zu stellen:

    Ich möchte gerne zusätzlich zu meiner "Main Swift" Datei weitere Swift Dateien in mein Projekt einbinden. Leider konnte ich bisher nichts zu diesem Thema in Swift finden, oder gehe ich die Sache falsch an?

    Also, damit mein Hauptprogramm och leserlich verständlich leibt, möchte ich bestimmte Funktionen aus dem Hauptprogramm in Module bringen.

    Ich hab da in XCODE im Menü "File" dann unter "NEW" dann als Typ der Source "swift file" ausgesucht eine neue Datei erstellt und einige Befehle dort eingefügt, versuche ich aber etwas zu Debugger sehe ich nur noch Fehler
    "
    gelbe Warnungsmeldungen
    Library/Developer/Xcode/DerivedData/secStepJHU-gudjdrivnvzsnuaauksoturihubv/Build/Intermediates.noindex/PrecompiledHeaders/secStepJHU-Bridging-Header-2zt9j9vd4exw8.dia:1:1: Could not read serialized diagnostics file: error("Failed to open diagnostics file")
    roter Fehler
    Command PrecompileSwiftBridgingHeader failed with a nonzero exit code

    irgendwie verstehe ich nicht wie man in XCODE eine neu Swift Date ins Projekt einbindet, oder ich habe einen wichtigen Schritt vergessen?

    Kann mir freundlicherweise jemand einen Denkanstoss geben oder eine Quelle nennen in der die richtige Vorgehensweise finden kann ?
    thx


  • Die Fehlermeldung ist ziemlich merkwürdig... aber das Xcode (man beachte die Schreibweise;-) Macken hat, ist leider nichts neues.
    Ohne Code kann ich keine richtige Diagnose abgeben, ich vermute mal, dass es nicht wirklich um weitere Module, sondern nur Dateien geht? Und sieht eine davon vielleicht etwas zu sehr wie die main.swift aus (also Befehle direkt in der Datei, ohne Funktion drum herum)?
  • Level0 schrieb:


    Also, damit mein Hauptprogramm och leserlich verständlich leibt, möchte ich bestimmte Funktionen aus dem Hauptprogramm in Module bringen.
    Wie @t-no schrieb, ist es ohne Deinem Code der ausgelagerten Teile und deren Aufruf schwer zu sagen, wo der Fehler liegt.

    "Normalerweise" gliedert man Objektklassen in eigene Dateien aus, die deren Eigenschaften und Methoden beschreiben. Aufrufen lassen sich diese dann über einfaches Referenzieren beim Instanzieren - für Objective-C-Anhänger wie mich ungewohnterweise auch ohne sie zu importieren. Dieser SO-Artikel beschreibt es etwas näher.

    Innerhalb einer Klasse Funktionen auslagern, geht bestimmt auch. Allerdings würde ich mir gut überlegen, ob das der Lesbarkeit dient.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hallo zusammen, Thema immer noch mehrereSwiftDateienimProjekt

    vielleicht habe ich meine Frage etwas unverständlich ausgedrückt. Daher versuche ich es mal anders zu sagen:

    also meine Main.Swift ist wegen der sehr komplexen Themen die das Programm bewältigen muss, doch sehr umfangreich geworden.
    Jetzt versuche ich eine weitere Swift Datei im Xcode zu erzeugen (mein Vorgehen habe ich oben beschrieben). Ziel ist es mehrere Funktionen
    aus der Main Swift in eine andere Swift Datei zu bringen, damit der Hauptcode überhaupt noch verständlich bleibt, selbst mit den vielen Kommentaren (oder gerade deswegen?)
    wird es langsam unleserlich. Daher die Idee, bring die Funktionen die sehr komplex sind einfach da raus, und rufe diese wie gehabt aus der Main auf, dachte ich mir, das muss doch funktionieren oder? der Source Code ist doch immer noch im gleichen Projekt.

    Mache ich hier einen Gedankenfehler, geht man das in Swift anders an? Muss ich in der zweiten Swift Datei alle IMPORT wie Appkit dort wiederholen, auch wenn sie dort nicht gebraucht werden?
    also ich rede hier nur von Funktionen, nicht von Funktionen innerhalb einer Klasse.

    Gibt es irgendwo im Web eine Dokumentation dazu oder geht das schlicht einfach nicht?

    Viele Grüße
  • So ziemlich jedes ersthafte Projekt ist auf mehrere Dateien aufgeteilt - wenn du deinen Code nicht zeigen kannst, suche dir einfach bei Github ein Beispiel.
    Oder, vielleicht noch besser: Erzeuge selbst ein neues Projekt; das mit dem Bridging header könnte schon darauf hindeuten, dass etwas kaputt konfiguriert ist.
  • Level0 schrieb:

    Ich möchte gerne zusätzlich zu meiner "Main Swift" Datei weitere Swift Dateien in mein Projekt einbinden.
    Bei mir stellt sich erst mal die Frage, was ist „Main Swift“ ????

    Das kann nur auf deinen Mist gewachsen sein, denn main definiert man mit @main. Dabei ist es vollkommen schnuppe, wie auch in anderen Sprachen, wie das Zeug auf dem Dateisystem benamst ist. Der einsprungspunkt muss halt definiert sein, die weiteren Sprungspunkte müssen zugänglich sein. Das war es schon.

    Dein Problem liegt irgendwo anders. Ohne Code, aufgrund deiner Äußerungen kann man nur die Kristallkugel raushohlen und mutmassen.

    Bittegib mehr Fleisch am Knochen, damit man nicht das übersinnliche bemühen muss. Dank dafür.
  • @Wolf Im Command Line Projekt heißt die erste Swift Datei die vorhanden ist nach Projektanlage „main“. In anderen Projektarten weiß ich es nicht auswendig, vermutlich ist es da auch so.

    @Level0 mach mal nen Screenshot von der Projektstruktur (Xcode linke Seite wo die ganzen Order/Dateien angezeigt werden). Zudem poste mal den Code dieser neuen Datei.
  • Hallo zusammen,

    es funktioniert mittlerweile, danke an t-no, du hattest recht, irgendwo im Projekt war was durcheinander geraten. Habe das Projekt neu erstellt und meinen Source-Code in die beiden Swift Dateien kopiert und siehe da es funktioniert.

    Danke an mrMo ja das hatte ich in einem Zwischenschritt auch getan, da mir der Erfolg nicht direkt beim zweiten Versuch gelungen ist, und in der Projektstruktur stehen tatsächlich die Dateinamen aufgelistet und wehe da ist einmal etwas falsch, das bekommt man nur durch Neuanlagen des Projekts hin, ok habe ich jetzt auch dazugelernt.

    Unsd ja Wolf, es ist tatsächlich (noch) ein Command Line Project. Das wird sich aber wenn alles läuft ändern.


    thx all
  • Tja, das mit den Command-Line Programm mach ich auch ab und an. Da braucht es keinen Overhead.

    Für ein Programm gibt es (Sprachübergreifend) ja nur zwei Möglichkeiten

    1. führe von oben nach unten aus
    2. definiere einen Einsprungspunkt


    Bei Swift (Commandline) ist es 1.

    Zu 2: Der Einsprunkgspunkt muss halt definiert werden, damit der Compiler weiss welche Funktion/Routine er aufrufen soll.

    Übergreifend, müssen sich alle Dateien welche berücksichtigt werden sollen im Scope befinden.

    Dein Problem ist ja gelöst. :)