2016-11-07 8 views
0

Ich versuche die beste Lösung für ein wiederkehrendes Problem zu finden, das ich jedes Mal anders gelöst habe.iOS Swift 3 Architektur Ausgabe

Stellen Sie sich vor mir ein Formular in mehreren Schritten haben (lassen 2 sagen beginnen)

Meine Code-Struktur ist:

class SuperStepViewController: UIViewController { 

    //Some generic Stuff 

    func continueAction(sender : AnyObject?) { 
     //NOTHING 
    } 
} 


class Step1ViewController: SuperStepViewController { 

    override func continueAction(sender : AnyObject?) { 
     //DO SOME USEFULL STUFF 
    } 

} 


class Step2ViewController: SuperStepViewController { 

    override func continueAction(sender : AnyObject?) { 
     //DO SOME USEFULL STUFF 
    } 

} 

Was ich will, ist der Code zu ändern, die continueAction Funktion nicht implementieren in der SuperViewController, weil es keine Standardimplementierung hat.

Bei einem ersten Blick dachte ich war eine gute Idee. Wenn ich continueAction in ein erforderliches Protokoll setze, werde ich einen Kompilierungszeitfehler haben, der ist, was ich will.

Aber es ist nicht genug, ich möchte diese Kompilation generieren, sobald ich die Superview-Controller Unterklasse. Ich kenne Java als etwas wie abstrakte Klasse.

class Step3ViewController: SuperStepViewController { 

    //NO continueAction implementation => No compilation error 

} 

Hat jemand eine Idee?

+2

Mögliches Duplikat von [Untergeordnete Klassen erzwingen, Protokoll swift zu implementieren] (http://stackoverflow.com/questions/27167685/force-child-classes-to-implement-protocol-swift) – EridB

+0

Ich habe versucht, Sie sind Code out und es scheint zu funktionieren, wie du willst. Sobald ich den SuperStepViewController und das StepProtocol unterklassiere, wird mir gesagt, dass es die "continueAction" -Funktion benötigt und schlägt "internal func continueAction()" vor. Wenn ich nur SuperStepViewController und nicht das Protokoll unterlasse, erhalte ich natürlich keine Fehler. Willst du das nicht? – Imbue

+0

Nein, ich möchte das stepProtocol nicht explizit erweitern. aber ich denke, das ist doch nicht möglich – CZ54

Antwort

0

Nein. Dies ist in Swift nicht möglich. Swift unterstützt solche Aktivitäten nicht.