2016-11-01 1 views
4

Ich muss eine Klasse (aus praktischen Gründen nennen Sie es A) abgeleitet von UITableViewController und eine andere (B) von UICollectionViewController implementieren. Und es gibt viele Gemeinsamkeiten, also möchte ich sie in eine Klasse (C) setzen und A und B erben lassen. Nun haben A und B beide Klassen zu erben, aber mehrfache Vererbung ist in swift nicht erlaubt Wie implementiert man das? Ich weiß, dass es keine schnelle Mehrfachvererbung gibt, aber ich möchte immer noch wissen, wie ich die oben beschriebenen Dinge tun kann.Wie macht man Multi-Vererbung in Swift?

+1

Lassen Sie C von UIViewController erben und A und B von C erben. Implementieren Sie die Protokolle für Tabellenansicht und Sammlungsansicht wie in A und B erforderlich, und ignorieren Sie nur UITableViewController und UICollectionViewController. Sie sind im Grunde nur Convenience-Klassen sowieso – Paulw11

+0

Mögliche Duplikat von [Warum kann ich nicht von mehreren Klassen in Swift erben wie seine Bibliothek Klassen] (http://stackoverflow.com/questions/25595506/why-i-can-not-inherit -von-multiple-classes-in-swift-genau-wie-seine-Bibliothek-clas) – jalone

Antwort

9

Wie in den Kommentaren erwähnt von @ Paulw11 ist richtig. Hier ist ein Beispiel, bei dem A & B erben von C. Was ich DogViewController und CatViewController genannt habe (erbt Formular PetViewController). Sie können sehen, wie ein Protokoll nützlich sein könnte. Dies ist nur ein sehr einfaches Beispiel.

protocol Motion { 
    func move() 
} 

extension Motion where Self: PetViewController { 

    func move() { 
     //Open mouth 
    } 

} 

class PetViewController: UIViewController, Motion{ 
    var isLoud: Bool? 

    func speak(){ 
     //Open Mouth 
    } 
} 

class DogViewController:PetViewController { 

    func bark() { 

     self.speak() 

     //Make Bark Sound 
    } 
} 

class CatViewController: PetViewController { 

    func meow() { 

     self.speak() 

     //Make Meow Sound 


    } 

} 

//.... 

let cat = CatViewController() 
cat.move() 
cat.isLoud = false 
cat.meow() 
2

Sie können nicht mehrere Vererbung in Swift haben, der Weg zu gehen ist, Protokolle zu betrachten, aber es ist ein ziemlich großes Thema, um in einer Antwort besprochen zu werden.

Es gibt auch viele andere questions mit dem gleichen Umfang

1

Mehrfachvererbung ist in Swift nicht zulässig. Sie können stattdessen jedes Protokoll anpassen. Protokolle sind wie Schnittstellen in Java.