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

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

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 Report

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 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!