Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

262
Vistas
Necesidad de satisfacer el requisito del protocolo Swift mediante el uso de una subclase específica del requisito (o tipo que se ajuste a él)

Tengo un protocolo que he creado (en Swift 4.2) y uno de sus requisitos es una propiedad que es del mismo tipo que el propio protocolo.

Como ejemplo, tengo un protocolo definido así:

 protocol A { var a: A? { get set } }

Tengo varios Modelos que se ajustan a este protocolo:

 class Model1: A { var a: A? }
 class Model2: A { var a: A? }

Para uno de mis modelos, necesito satisfacer el requisito del protocolo siendo más específico para la propiedad definida por la variable a (es decir, la variable con el tipo de protocolo). Entonces, por ejemplo, es posible que desee implementar Model2 como:

 class Model2: A { var a: Model1? }

En este caso, dado que Model1 se ajusta al protocolo A , esperaría que esto pudiera satisfacer el requisito del protocolo; sin embargo, aparece un error en su lugar:

El tipo 'Model2' no se ajusta al protocolo 'A'

¿Por qué sucede esto y qué puedo hacer para que funcione como se describe anteriormente?

Apéndice

Modelé el escenario anterior en un Xcode Playground y aquí hay una captura de pantalla del error que veo. ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Para cumplir con el protocolo A, Model2 necesitaría un miembro var a que permita almacenar una referencia a cualquier cosa que se ajuste al protocolo A, no solo una referencia a Model1 . Así que no puedes hacer esto.

over 4 years ago · Santiago Trujillo Denunciar

0

Podrías hacer esto con tipos asociados:

 protocol A { associatedtype B: A var a: B? { get } }

Esto le permitiría declarar Model2 con la especificidad que desee:

 class Model2: A { var a: Model1? }

Pero desafortunadamente, eso significaría que ya no podría declarar variables de tipo A Para arreglar eso, podrías usar modelos genéricos:

 class Model1<T: A>: A { var a: T? }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda