2016-07-06 23 views
4

Da gibt es zwei Protokolle P1 und P2 ist es möglich, einen Typen angeben, die beiden Protokolle entsprechen, zum Beispiel:eine Klasse angeben, dass ein Protokoll implementiert

typealias P = protocol<P1, P2> 

Gibt es eine ähnliche Art und Weise einen Typen festlegen das ist eine Art Klasse und entspricht auch einem Protokoll, z so etwas (was nicht funktioniert):

typealias P = UIView: P1 
+2

überbrückt. Bitte lesen Sie [this thread] (http://stackoverflow.com/questions/26401778/in-swift-how-can-i -declare-a-Variable-von-spezifischen-Typ-das-entspricht-zu-eins-o). Es wurde zuerst in der Swift 1-Ära veröffentlicht und das Problem ist immer noch in der kommenden Swift 3-Ära da. Swift hat immer noch nicht die Fähigkeit solche Typen auszudrücken. – OOPer

+0

Der Punkt, den Swift macht, ist, dass Sie das nicht brauchen, wenn Sie Ihre Architektur gut entwerfen. – Sulthan

+0

@OOPer danke, das Beispiel dort ist dem, was ich erreichen wollte, sehr ähnlich. – MeXx

Antwort

0

Leider ist es in Swift 2.2 unmöglich und wird nicht in Swift 3.0 hinzugefügt. Die Idee, dass Sie Type Regel für Typen erstellen möchten, die eine Klasse erben und Protokoll implementieren.

Image

So ist es nicht sehr üblich, dass Sie eine solche Hierarchie haben wird und Eigenschaft haben, in dem Sie eine dieser Klassen gespeichert werden sollen. Auch im POP-Paradigma sollten Sie zusätzliche Protokolle haben, die Ihnen Eigenschaften geben, die Sie von UIView benötigen.


Vielleicht haben Sie eine solche usecase: enter image description here

Dann zusätzliche Klasse erstellen: enter image description here

Und Ihre Art wird P1Base


P. S. sein Wenn Sie also @property (nonatomic) UIViewController<UITableViewDelegate> *protocolClassProperty; in Obj-c erstellen, wird es als UIViewController! in Swift