0Pricing
Swift Academy · Урок

Проецируемые значения с помощью $binding

Предоставляйте projectedValue для дополнительной функциональности через префикс $.

«Проецируемые значения с помощью $binding» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

Проецируемые значения (доступные через `$`) предоставляют обёрткам свойств дополнительный интерфейс — именно так `@State` и `@Published` в SwiftUI предоставляют `Binding` и `Publisher`.

Добавление 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 $ ```

Тип projectedValue

Проецируемое значение может иметь любой тип — `Binding`, `Publisher`, `String` или пользовательский тип. `@State` в SwiftUI проецирует `Binding`, который поддерживает двустороннюю передачу данных.

Пример проекции привязки

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

Пользовательская проекция привязки

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

Проекция @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" ```

Доступ к projectedValue внутри обёртки

```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 } } ```

Использование обёртки 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 ```

Различия в синтаксисе $

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

Что следует учитывать при проектировании

• `projectedValue` необязателен — добавляйте его только при необходимости дополнительного интерфейса • Его тип может полностью отличаться от типа `wrappedValue` • Используйте `$` в месте вызова, чтобы получить проецируемое значение • Проецируемые значения отлично подходят для издателей Combine и привязок SwiftUI

Быстрая проверка

Как получить `projectedValue` обёртки свойства?

Итоги

Основные выводы: • `projectedValue` предоставляет обёрткам дополнительный API через `$` • Может иметь любой тип — Binding, Publisher, Bool, Array • `@State` проецирует `Binding`, а `@Published` — `Publisher` • Обращайтесь к нему через `$propertyName` и в теле, и в месте вызова • Добавляйте его только тогда, когда второй интерфейс действительно полезен Далее: @Published и Combine.

Часто задаваемые вопросы

Урок «Проецируемые значения с помощью $binding» бесплатный?

Да — полный текст урока «Проецируемые значения с помощью $binding» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Проецируемые значения с помощью $binding»?

Предоставляйте projectedValue для дополнительной функциональности через префикс $. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Проецируемые значения с помощью $binding»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Создание собственного оболочечного свойства
  2. Проецируемые значения с помощью $binding
  3. @Published и наблюдение в Combine
  4. Композиция нескольких оболочек свойств
← Назад к Swift Academy