Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

267
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda