Ключевое слово @State
- это @propertyWrapper
, функция, недавно представленная в Swift 5.1. Как объяснено в соответствующем предложении , это своего рода оболочка значений, избегающая стандартного кода.
Sidenote: @propertyWrapper
ранее назывался @propertyDelegate
, но с тех пор он изменился. См. этот пост для получения дополнительной информации.
Официальная документация @ 1017 *1018* содержит следующее:
SwiftUI
управляет хранением любого свойства, которое вы объявляете государством.
Когда значение состояния изменяется, представление делает его недействительным
пересчитывает тело . Используйте государство в качестве единственного источника истины для
данный вид.
Экземпляр State не является самим значением; это средство
чтение и изменение значения . Чтобы получить доступ к основной ценности государства,
используйте свойство value.
Поэтому, когда вы инициализируете свойство, помеченное @State
, вы фактически не создаете свою собственную переменную, а скорее предлагаете SwiftUI
создать "что-то" в фоновом режиме, в котором хранится то, что вы установили и контролирует это отныне! Ваш @State var
просто действует как делегат для доступа к этой оболочке .
Каждый раз, когда ваша @State
переменная записывается , SwiftUI
будет знать, как она отслеживает ее. Он также будет знать, была ли переменная @State
читать из View
body
. Используя эту информацию, он сможет пересчитать любую View
, указав переменную @State
в ее body
после изменения этой переменной.