Klassenvererbung aus dem äußeren Namespace

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

  • Klassenvererbung aus dem äußeren Namespace

    Angenommen, ich verfüge über eine BaseClass, die gewisse Anforderungen und Implementierungen erfüllt, beziehungsweise bereitstellt. Diese Klasse befindet sich in dem äußeren Namespace.
    Nun wird eine zweite Klasse erstellt, die eine nested-class enthält, die von der eigentlichen BaseClass erbt, aber ihren Namen beibehält.

    Zur Veranschaulichung hier ein Beispiel mit Code:

    Quellcode

    1. class BaseClass {
    2. }
    3. class NewBase {
    4. class BaseClass: BaseClass { //
    5. }
    6. }
    Die Klasse NewBase.BaseClass soll von <äußerer Namespace>.BaseClass erben. Wie lautet der Name dieses Namespace, damit Swift die Kompilierung nicht mit der Fehlermeldung "circular class inheritance BaseClass" verweigert?

    Ich bedanke mich für jeglichen Support!
  • Quellcode

    1. class BaseClass {}
    2. class NewBase {
    3. class BaseClass: ModuleName.BaseClass {}
    4. }
    ModuleName ist dabei natürlich das, was es sagt: Der Name des Modules. ;)

    In den Xcode Build Settings unter Product Module Name kann man den Namen ggf. anpassen, bzw. sich dort des Modulenamens überhaupt vergewissern. Wenn man sowas macht, dann bietet es sich natürlich an, diesen Code in ein Framework oder eine Library auszulagern. Dann hat man bei Wiederverwendung des Codes keine weiteren Probleme mehr mit dem Modulenamen.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von torquato ()

  • torquato schrieb:

    Wenn man sowas macht, dann bietet es sich natürlich an, diesen Code in ein Framework oder eine Library auszulagern. Dann hat man bei Wiederverwendung des Codes keine weiteren Probleme mehr mit dem Modulenamen.
    Vermutlich macht das am meisten Sinn, nur bin ich derzeit etwas befragt, nachdem ich mich kurz mit dem Thema Frameworks und solchen Sachen auseinandergesetzt habe ...:
    1. Was sind die Unterschiede zwischen Frameworks und (Static) Librarys?
    2. Wenn ich keine genaue Plattform spezifizieren möchte, sondern ein "allgemeines" Framework schreiben möchte, dass auf Linux läuft ... wie mache ich das? Und wie stelle in diesem allgemeinem Framework spezifische Implementierungen bereit?
    Danke :)
  • ChallengeAccepted schrieb:

    Was sind die Unterschiede zwischen Frameworks und (Static) Librarys?

    Bei Framework und dynamic library wird das enthaltende Kompilat beim Programmstart gelinkt, also mit dem Programm verbunden, bei einer static library wird das Library-Kompilat beim Kompilieren des Programms in der Linker-Phase mit reinkopiert. Eine dynamic library kann man updaten, ohne daß das Programm geändert werden müßte, bei einer static library muß man das Programm bei einer neuen Library-Version immer neu kompilieren. Das setzt allerdings API-Resilence und ABI-Stabilität voraus, was Swift noch nicht ist.
    Ein Framework ist eine eigene Verzeichnisstruktur in der man noch andere Resourcen wie Graphiken, xibs, etc. reinpacken kann. Eine Library enthält nur den ausführbaren Binärcode. Frameworks gibt es unter Linux nicht.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von torquato ()

  • ChallengeAccepted schrieb:

    Wenn ich keine genaue Plattform spezifizieren möchte, sondern ein "allgemeines" Framework schreiben möchte, dass auf Linux läuft ... wie mache ich das? Und wie stelle in diesem allgemeinem Framework spezifische Implementierungen bereit?

    Für Linux-Support solltest Du Dich mit SwiftPM als Toolchain beschäftigen.
    Das ganze Swift-Tooling unter Linux steckt allerdings noch in den Kinderschuhen, aber es wird in meheren Projekten intensiv an Verbesserung gearbeitet.
    SwiftPM steht auch unter macOS zur Verfügung, aber es gibt da z.Zt. noch keine Xcode-Integration dafür. Auch daran wird z.Zt. gearbeitet. Gegenwärtig muß man Cross-Platform bis zu einem gewissen Grad noch händisch zweigleisig fahren.

    Der zweite Teil Deiner Frage hängt je nach konkretem Fall vom Buildtool (Xcode, SwiftPM,…) ab, oder aber man benutzt conditional compiler blocks im Source Code.

    Hängt sehr von den konkreten Anforderungen ab; muß man sich halt ein bißchen mit beschäftigen. ;)
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von torquato ()

  • torquato schrieb:

    Frameworks gibt es unter Linux nicht.

    torquato schrieb:

    Das ganze Swift-Tooling unter Linux steckt allerdings noch in den Kinderschuhen, aber es wird in meheren Projekten intensiv an Verbesserung gearbeitet.
    SwiftPM steht auch unter macOS zur Verfügung, aber es gibt da z.Zt. noch keine Xcode-Integration dafür. Auch daran wird z.Zt. gearbeitet. Gegenwärtig muß man Cross-Platform bis zu einem gewissen Grad noch händisch zweigleisig fahren.
    Dann werde ich vermutlich noch etwas warten, bis das ganze etwas ausgereifter und offizieller wird ...