所有应用程序都会更改状态。例如,用户可能点击了一个按钮以显示更多信息,他们可能已经在文本框中输入了一些文本,或者从日期选择器中选择了一个日期-涉及应用程序从一种状态转移到另一种状态的所有内容。
状态的问题在于它太乱了:更改时,我们需要发现更改并更新布局以匹配。乍一看听起来很简单,但是随着我们状态的增长和发展,它变得越来越难–很容易忘记更新一件事情,或者弄错了更新顺序,从而使用户界面的状态与预期的不匹配。
SwiftUI
通过从控件中删除状态来解决此问题。当我们在视图中添加属性时,它们实际上是惰性的-当s然,它们具有值,但是更改它们并没有任何作用。但是,如果在它们之前添加了特殊的 @State
属性,SwiftUI
将自动监视更改并更新使用该状态的视图的任何部分。
当涉及到某种状态时(例如,在切换开关更改时告诉state属性发生变化),我们不能直接引用该属性。这是因为 Swift
认为我们只想立即读取该值,而不是说“请随着情况的变化也更新此值”。幸运的是,SwiftUI
的解决方案是在属性名称前放置一个美元符号,这使我们可以引用基础数据绑定而不是其当前值。我知道这乍一看有点令人困惑,但是在一两个小时后,它就变成了第二天性。
请记住,SwiftUI
是声明性的,这意味着我们预先将所有可能状态的所有布局都告诉了它,并让它弄清楚了当属性更改时如何在它们之间移动。我们称之为绑定–要求 SwiftUI
同步 UI 控件和基础属性之间的更改。
如果您习惯了更强制性的编程风格,那么一开始使用状态会让您感到有些头疼。但是请相信我-完成后,您会一路顺风。