2016-07-06 2 views
4

Étant donné qu'il ya 2 protocoles P1 et P2, il est possible de spécifier un type qui est conforme aux deux protocoles, par exemple:Spécifiez une classe qui implémente un protocole

typealias P = protocol<P1, P2> 

Y at-il une manière similaire à spécifier un type c'est une sorte de classe et est également conforme à un protocole, par exemple quelque chose comme ça (qui ne fonctionne pas):

typealias P = UIView: P1 
+2

S'il vous plaît lire [ce sujet] (http://stackoverflow.com/questions/26401778/in-swift-how-can-i -declare-a-variable-of-a-specific-type-that-conforme-à-un-o). Il a d'abord été posté dans l'ère Swift 1, et le problème est toujours là dans la prochaine ère Swift 3. Swift n'a toujours pas la capacité d'exprimer de tels types. – OOPer

+0

Le point qui est fait par Swift est que vous n'avez pas besoin de faire cela si vous concevez bien votre architecture. – Sulthan

+0

@OOPer merci, l'exemple est très similaire à ce que j'essayais de réaliser. – MeXx

Répondre

0

Malheureusement, il est impossible dans Swift 2.2 et ne sera pas ajouté dans Swift 3.0. L'idée que vous souhaitez créer Type règle pour les types qui héritent de la classe et implémentent le protocole.

Image

Il est donc pas très commun que vous aurez cette hiérarchie et aurez la propriété où vous souhaitez stocker une de ces classes. Toujours dans le paradigme POP, vous devriez avoir un protocole supplémentaire qui vous donne les propriétés dont vous avez besoin de UIView.


Peut-être que vous avez de tels usecase: enter image description here

Ensuite, créez la classe supplémentaire: enter image description here

Et votre type sera P1Base


post-scriptum Voilà pourquoi si vous créez @property (nonatomic) UIViewController<UITableViewDelegate> *protocolClassProperty; en Obj-c, il sera comblé comme UIViewController! à Swift