Objeto de conversión rápida a tipo y protocolo al mismo time

Esta pregunta se dirige a Pre-Swift4 . En Swift 3 y eariler, no fue posible hacer el molde mencionado directamente, sino solo a través de soluciones difíciles.

Sin embargo, ahora la tarea se realiza de forma similar a como hacemos la composition del protocolo:

var myVar = otherVar as! (Type & Protocol) 

No más necesidad de extensiones.


¿Cómo puedo convertir un object determinado en un tipo y un protocolo para llamar a algunos methods que se definen como una extensión

Por ejemplo:

 extension Identifiable where Self: NSManagedObject, Self: JsonParseDescriptor { func someMethod() { } } 

Ahora tengo un object que recuperé de datos de Core y me gustaría lanzarlo a los protocolos anteriores para llamar a someMethod. Podría lanzar a los protocolos usando el protocol<Identifiable, JsonParseDescriptor> , pero ¿cómo puedo include el tipo NSManagedObejct en él también?

Gracias

Lo que está buscando es un requisito concreto del mismo tipo . Lamentablemente, aún no es posible en Swift.

Consulte el boleto SR-1009 y SR-1447 para más detalles. También debe verificar esta respuesta.

En el mean-while, puede extender NSManagedObject con un protocolo ficticio con los methods que necesita:

 protocol _NSManagedObject { //the methods you want } extension NSManagedObject: _NSManagedObject {} extension Identifiable where Self: _NSManagedObject, Self: JsonParseDescriptor { func someMethod() { } } 

A partir de Swift 4 , ahora es posible hacer el molde mencionado directamente sin soluciones complicadas. La tarea se realiza de forma similar a como hacemos la composition del protocolo:

 var myVar = otherVar as! (Type & Protocol) 

No más necesidad de extensiones y protocolos de puente.