State, Binding
Mikhail PushkarevПривет мой друг) Сегодня разберем такие структуры как State и Binding. Со State ты уже вкратце познакомился в предыдущей домашке. А сегодня я покажу как с ним можно работать в других направлениях.
А вообще State и Binding ходят вместе парой😂, но только при необходимости)
От слову к делу..
о State...
Как написано в документации, State это тип оболочки свойства, который может читать и записывать значение, управляемое SwiftUI.
Более понятно станет в этом видео:
Как и большинство вещей SwiftUI, работа с state - это действительно много движущихся частей, работающих вместе в тандеме. Следует помнить о нескольких принципах:
- В SwiftUI данные управляют пользовательским интерфейсом
- Ты не можешь просто изменить свойство "name"
- @State делает представление зависимым от состояния
- Когда значение свойства - "state" - изменяется, представление также должно обновляться.
Давай теперь более подробно поговорим о Button. Разберем две реализации. С остальными познакомься в документации и дополнительных материалах. Первая, эта та что была на видео.

В title: естественно должна быть только строка.
В action: ( ) → Void - реализация кнопки
Вот собственно как на фото ниже:

А второй вариант предусматривает использование action и label

Здесь уже можно развернуться на всю катушку😉

И так для тебя мини задание. Сделать следующие кнопки:
- Кнопка в виде сердца
- Кнопка с ободком и надписью "Finish"

Подсказки:
- Для сердца используй такую штуку как: .overlay( )
- Для финиша используй: .stroke( )
Видео с реализацией и кодом пришли мне личку.
о Binding...
Привязка, как следует из ее названия, представляет собой связь между двумя вещами. В SwiftUI привязка находится между свойством, в котором хранятся данные, и представлением, которое отображает и изменяет эти данные.
Привязки почти волшебны: ты соединяешь одно с другим, и данные передаются между ними, когда происходят изменения
Смотрим видео и разбираемся:
@Binding позволяет нам объявить, что одно значение на самом деле исходит из другого места и должно использоваться в обоих местах. Это не то же самое, что @ObservedObject или @EnvironmentObject, оба из которых предназначены для использования ссылочных типов в потенциально многих представлениях.
О @ObservedObject и @EnvironmentObject поговорим в следующем конспекте.
Обязательные материалы к изучению:
- Документация на State и доп. статья
- Документация на Button и хорошая статья от Пола Хадсона
- Документация на Binding и интересная статья с интернета)