Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

258
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!