0Pricing
Swift Academy · Lección

Valores proyectados con $binding

Exponga un projectedValue para proporcionar funcionalidad adicional mediante el prefijo $.

Valores proyectados con $binding es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Bienvenida

Los valores proyectados (a los que se accede mediante `$`) proporcionan a los property wrappers una interfaz secundaria. SwiftUI utiliza esta capacidad con `@State` y `@Published` para exponer `Binding` y `Publisher`.

Añadir projectedValue

```swift @propertyWrapper struct Toggle { var wrappedValue: Bool = false var projectedValue: String { wrappedValue ? "ON" : "OFF" } } struct Model { @Toggle var active } var m = Model() print(m.$active) // "OFF" — projected value accessed with $ ```

Tipo de projectedValue

El valor proyectado puede ser de cualquier tipo: un `Binding`, un `Publisher`, un `String` o un tipo personalizado. `@State` de SwiftUI proyecta un `Binding` que permite un flujo de datos bidireccional.

Ejemplo de proyección Binding

```swift // @State projects Binding: @State var isOn = false Toggle(isOn: $isOn) // $isOn is Binding ```

Proyección Binding personalizada

```swift @propertyWrapper struct Validated { var wrappedValue: String var projectedValue: Bool { !wrappedValue.isEmpty } } struct Form { @Validated var email = "" } var f = Form() f.email = "hi@example.com" print(f.$email) // true — projected Bool ```

Proyección de @Published

```swift class VM: ObservableObject { @Published var score = 0 } let vm = VM() let cancellable = vm.$score // Publisher .sink { print("Score: \($0)") } vm.score = 10 // "Score: 10" ```

Acceder a projectedValue dentro del wrapper

```swift @propertyWrapper struct History { private var current: T private(set) var projectedValue: [T] = [] var wrappedValue: T { get { current } set { projectedValue.append(current); current = newValue } } init(wrappedValue: T) { current = wrappedValue } } ```

Usar el wrapper History

```swift struct Counter { @History var count = 0 } var c = Counter() c.count = 1; c.count = 5; c.count = 3 print(c.$count) // [0,1,5] — history of old values ```

Desambiguación de la sintaxis $

```swift struct Form { @State var text = "" var body: some View { TextField("Enter", text: $text) // $text is Binding } } // text → String (wrappedValue) // $text → Binding (projectedValue) ```

Consideraciones de diseño

• `projectedValue` es opcional: añádalo solo cuando necesite una interfaz secundaria • El tipo puede ser completamente distinto de `wrappedValue` • Use `$` en el punto de llamada para acceder al valor proyectado • Los valores proyectados son ideales para publishers de Combine y bindings de SwiftUI

Comprobación rápida

¿Cómo se accede al `projectedValue` de un property wrapper?

Repaso

Puntos clave: • `projectedValue` proporciona a los wrappers una API secundaria mediante `$` • Puede ser de cualquier tipo: Binding, Publisher, Bool o Array • `@State` proyecta `Binding`; `@Published` proyecta `Publisher` • Acceda a él mediante `$propertyName`, tanto en el cuerpo como en el punto de llamada • Añádalo solo cuando una segunda interfaz aporte un valor real Siguiente tema: @Published y Combine

Preguntas frecuentes

¿La lección «Valores proyectados con $binding» es gratis?

Sí — el texto completo de «Valores proyectados con $binding» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Valores proyectados con $binding»?

Exponga un projectedValue para proporcionar funcionalidad adicional mediante el prefijo $. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Valores proyectados con $binding»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Creación de un property wrapper personalizado
  2. Valores proyectados con $binding
  3. @Published y observación en Combine
  4. Composición de varios property wrappers
← Volver a Swift Academy