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

216
Views
SwiftUI: ¿Por qué se usa una extensión para una estructura personalizada? (Tutorial para desarrolladores de aplicaciones Apple iOS)

En el [tutorial de desarrollo de aplicaciones para iOS] de Apple (a partir del 22 de enero) ( https://developer.apple.com/tutorials/app-dev-training ), en la sección Creación de una jerarquía de navegación , extendemos una estructura que tenemos definido.

He intentado leer ladocumentación de Swift sobre extensiones, pero realmente no entiendo por qué se hace esto aquí. La documentación habla sobre la extensión de los tipos de sistemas, como agregar propiedades adicionales al tipo de sistema Double , pero no agregar propiedades adicionales a algo sobre lo que tenemos control total, como nuestra propia estructura.

Estoy seguro de que es una mejor práctica, ya que este es un tutorial de Apple, pero realmente no hacen un buen trabajo al explicarlo.

Este es un ejemplo del código que quieren que escribas:

 import SwiftUI struct DailyScrum: Identifiable { let id: UUID var title: String var attendees: [Attendee] var lengthInMinutes: Int var theme: Theme init(id: UUID = UUID(), title: String, attendees: [String], lengthInMinutes: Int, theme: Theme) { self.id = id self.title = title self.attendees = attendees.map { Attendee(name: $0) } self.lengthInMinutes = lengthInMinutes self.theme = theme } } extension DailyScrum { struct Attendee: Identifiable { let id: UUID var name: String init(id: UUID = UUID(), name: String) { self.id = id self.name = name } } }

No estoy seguro de por qué la estructura de Attendee debe definirse dentro de una extensión. Por ejemplo, esto también funciona:

 import SwiftUI struct Attendee: Identifiable { let id: UUID var name: String init(id: UUID = UUID(), name: String) { self.id = id self.name = name } } struct DailyScrum: Identifiable { let id: UUID var title: String var attendees: [Attendee] var lengthInMinutes: Int var theme: Theme init(id: UUID = UUID(), title: String, attendees: [String], lengthInMinutes: Int, theme: Theme) { self.id = id self.title = title self.attendees = attendees.map { Attendee(name: $0) } self.lengthInMinutes = lengthInMinutes self.theme = theme } }

No estoy seguro de por qué harías uno sobre el otro.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Es estilo y también enfoca el código en este caso.

Su tipo como se escribió originalmente es

 DailyScrum.Attendee

Si lo cambia a la segunda versión, tendrá 2 tipos independientes separados.

 Attendee

y

 DailyScrum

Sin mirar el tutorial, asumiría que hay otro tipo de Attendee . Tal como..

 Conference.Attendee

o

 WeeklyScrum.Attendee

Pero como señaló, esto solo tendría sentido si son diferentes como un homónimo. Algunas muestras son...

 Bird.Crane Construction.Crane

o

 Dog.Bark Tree.Bark

Si todo lo que está utilizando es una id y un name , no tiene sentido tener una estructura de datos separada.

over 4 years ago · Santiago Trujillo Report

0

En el tutorial, creo que es una elección de patrón para que el modelo de datos refleje más fielmente el diseño de SwiftUI para facilitar la comprensión.

Los asistentes solo aparecen como una vista secundaria de detailView usando ForEach(...) para generar un VStack. Por lo tanto, en este caso, donde no se usa MVVM, tiene sentido asignar claramente el modelo de datos a la vista y hacer explícito en el patrón de código que el tipo de asistente solo ocurre dentro de una instancia de DailyScrum, tal como los detalles de los asistentes solo aparecen dentro de detailView.

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!