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.
Es estilo y también enfoca el código en este caso.
Su tipo como se escribió originalmente es
DailyScrum.AttendeeSi lo cambia a la segunda versión, tendrá 2 tipos independientes separados.
Attendeey
DailyScrum Sin mirar el tutorial, asumiría que hay otro tipo de Attendee . Tal como..
Conference.Attendeeo
WeeklyScrum.AttendeePero como señaló, esto solo tendría sentido si son diferentes como un homónimo. Algunas muestras son...
Bird.Crane Construction.Craneo
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.
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.