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

416
Vistas
Protocolos Swift: ¿Diferencia entre { get } y { get set } con ejemplos concretos?

Soy bastante nuevo en Swift, y aunque he leído la documentación de Apple y muchos temas e hilos sobre esto, todavía no puedo entender cuál es la diferencia entre { get } y { get set } . Quiero decir, estoy buscando una explicación con un ejemplo concreto.

Como por ejemplo:

 protocol PersonProtocol { var firstName: String { get } var lastName: String { get set } }

¿Cuál sería la diferencia real entre estas dos propiedades? Traté de jugar con estas propiedades en un parque infantil:

 struct Person: PersonProtocol { var firstName: String var lastName: String } var p = Person(firstName: "John", lastName: "Lennon") print(p.firstName) // John print(p.lastName) // Lennon p.firstName = "Paul" p.lastName = "McCartney" print(p.firstName) // Paul print(p.lastName) // McCartney

No ayudó... Gracias por tu ayuda.

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

0

Está creando una variable de tipo Person y no hay restricciones en esa estructura. Si, en cambio, crea una variable de tipo PersonProtocol , firstName será de solo lectura.

 var p1: PersonProtocol = Person(firstName: "John", lastName: "Lennon") print(p1.firstName) // John print(p1.lastName) // Lennon p1.firstName = "Paul" <== error: cannot assign to property: 'firstName' is a get-only property
over 4 years ago · Santiago Trujillo Denunciar

0

protocol : es un requisito de alguna interfaz mínima del tipo que lo implementa.

  • var name: Type { get } requiere que el tipo tenga una propiedad con al menos un getter (accesible desde fuera del tipo, no private ), es decir, el código externo debería poder leer el valor de la propiedad. En el tipo de implementación, se podría let name: Type , var name: Type , private(set) var name: Type , fileprivate(set) var name: Type , etc.

  • var name: Type { get set } requiere que el tipo tenga una propiedad con getter y setter accesibles, es decir, el código externo debería poder leer y escribir en la propiedad. Aquí solo se permitiría var name: Type .

Si el protocol requiere getter pero también proporciona un setter , no está en contra de los requisitos del protocol . Pero si el protocol requiere tanto getter como setter , debe proporcionar ambos, y no tener ninguno de ellos no será una implementación válida.


Su clase Person definió ambas propiedades como var (con getter y setter accesibles), por lo tanto, puede cambiarlas. Pero PersonProtocol no ha requerido la capacidad de establecer firstName .

Y como muestra firstName , si solo usa la interfaz requerida por el protocol , no podrá cambiar el valor del nombre.

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