Generische Klasse ableiten

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

  • Generische Klasse ableiten

    Hallo zusammen,

    ich habe mich heute mal an die Generics in Swift gewagt. Der Plan war nun die generische Klasse abzuleiten.

    C-Quellcode

    1. class Router: NSObject {
    2. }
    3. class Presenter<T: Router> : NSObject
    4. {
    5. unowned var router: T
    6. required init(parent: T)
    7. {
    8. router = parent
    9. }
    10. }
    11. class myPresenter: Presenter<myRouter> {
    12. required init(parent: myRouter)
    13. {
    14. super.init(parent: parent)
    15. }
    16. }
    17. class myRouter: Router {
    18. var p: Presenter<myRouter> = myPresenter(self)
    19. }
    Alles anzeigen
    Leider bekomme ich immer die folgende Fehlermeldung (Zeile 18):
    cannot convert value of type 'NSObject -> () -> myRouter' to expected argument type 'myRouter' ?(

    Kann jemand etwas mit dieser Meldung anfangen? Oder ist der ganze Ansatz sch....?

    Viele Grüße
  • Ich kenne mich selbst nicht besonders mit Generics aus und verstehe auch nicht wirklich, was Du erreichen willst...

    Zumindest ein Teil Deines Problems liegt in Deiner Verwendung von self in Zeile 18.

    Auf self kann erst zugegriffen werden, wenn alle stored Properties initialisiert sind. Du versuchst auf self zuzugreifen, während Du eine Property von self initialisierst. self ist hier die Instanz von myRouter, während die Instanz erst erzeugt werden soll. Das kann nicht klappen!
  • Vielen Dank für eure Hilfe :)
    So funktioniert es jetzt:

    Quellcode

    1. class myRouter: Router {
    2. var createPresenter: Presenter<myRouter>?
    3. override init()
    4. {
    5. super.init()
    6. createPresenter = Presenter<myRouter>(parent: self)
    7. }
    8. }
    @macmoonshine: Eine Forward-Deklaration brauche ich an der Stelle nicht, da der Compiler auch so alle Klassen findet. Vom Design her ist es wirklich nicht so schön, deshalb werde ich es jetzt auch anders machen. Den Fehler wollte ich aber trotzdem finden ^^
  • Schmiddy schrieb:

    Mir ist nur noch nicht ganz klar wofür das (set) ist? Im Language Guide konnte ich dazu leider nichts finden :(
    Eine stored Property hat von Haus aus die gleiche Erreichbarkeit, wie die Klasse. Mit public, internal und private kann man den Zugriff erweitern oder einschränken. Soweit bekannt. Was aber, wenn man bei einer öffentlichen Klasse eines Frameworks auf eine Property nur intern innerhalb des Frameworks zugreifen soll und diese Property nur innerhalb der Datei, in der die Klasse definiert wird, gesetzt werden darf?

    Mit internal(set) und private(set) kann man den Setter im Gegensatz zum Getter weiter einschränken. z.B.:

    Quellcode

    1. public class Foo {
    2. internal private(set) var number: Int = 5
    3. }


    Apples Dokumentation dazu hier: developer.apple.com/library/io…nguage/AccessControl.html unter Getters and Setters