SwiftUI教程使用@State
关键字指示可变UI状态:
@State var showFavoritesOnly=false
它提供了以下总结:
状态是一个值或一组值,可以随时间变化,并影响视图的行为、内容或布局。使用具有@State属性的属性将状态添加到视图。
@State
变量导致视图被重新计算?body
getter中不可变?如果你知道的话,我再补充一点。
@State
属性与非常类似。在React Native中状态
对象。
例如:
struct Foobar: some View {
@State var username = ""
}
class Foobar extends React.Component {
constructor(props) {
super(props);
this.state = {
username: '',
};
}
}
当您修改username变量时,它们将具有与重新呈现当前页面相同的效果。
在WWDC视频-会话204(16:00开始,20:15开始)中的一个例子很好地解释了这一点
@State
变量的一个特殊属性是,SwiftUI可以在读取和写入变量时进行观察。因为SwiftUI知道缩放的
是在主体
中读取的,所以它知道视图的渲染依赖于它。这意味着-当变量更改时,框架将使用新的@State
值再次请求body
。
作为属性包装器的@State
也在数据流通过Swift UI(5:38)WWDC vid中进行了阐述和说明。它显示了当我们需要不可变(struct
)View
中的可变值时,它是如何解决问题的。
@State
关键字是最近在Swift 5.1中引入的一项功能。正如在相应的建议中所解释的,它是一种避免样板代码的值包装器。
旁注:@propertyWrapper
以前被称为@propertyLegate
,但此后发生了变化。有关更多信息,请参阅本文。
官方@State文件中有以下内容:
SwiftUI
管理您声明为状态的任何属性的存储。当状态值更改时,视图将使其外观无效并重新计算正文。将状态用作给定视图的可信单一数据源。
状态实例不是值本身;这是一种读取和改变值的方法。要访问状态的基础值,请使用其value属性。
因此,当您初始化标记为@State
的属性时,实际上并不是在创建自己的变量,而是提示SwiftUI
在后台创建“某物”,从现在开始存储设置并监视它!您的@State var
仅充当访问此包装的委托。
每次写入@State
变量时,SwiftUI
就会知道它正在监视它。它还将知道@State
变量是否是从视图
的主体
读取的。使用此信息,在对该变量进行更改后,它将能够重新计算在其主体
中引用了@状态
变量的任何视图
。
问题内容: 该SwiftUI教程使用关键字来表示可变UI状态: 它提供了以下摘要: 状态是一个值或一组值,可以随时间变化,并影响视图的行为,内容或布局。您可以将属性与@State属性一起使用,以将状态添加到视图中。 关键字的确切含义是什么? 变异变量如何导致视图重新计算? 其他变量在吸气剂中如何不变? 问题答案: 该关键字是,最近刚刚在雨燕5.1中引入的功能。如相应提案中所述,它有点像是值包装器,
问题内容: 我阅读了一些有关该关键字的文章,但无法弄清其正确用法。您能否告诉我在C#和Java中应该使用什么? 问题答案: 对于C#和Java,“ volatile”告诉编译器一个变量的值一定不能被缓存,因为它的值可能会在程序本身范围之外改变。然后,如果变量“超出其控制范围”更改,编译器将避免可能导致问题的任何优化。
问题内容: 我正在网上关注Java教程,尝试学习该语言,并且它在使用数组的两种语义之间反弹。 和: 该教程从未真正提到过为什么它会在两者之间来回切换,所以我对该主题进行了一些搜索。我目前的理解是,操作员正在创建“ longs数组”类型的对象。我 不 明白的是为什么我要那个,那有什么后果? 是否存在某些特定于“数组”的方法,除非它是“数组对象”,否则这些方法对数组不起作用? 有什么我 不能 用普通数
问题内容: 怎么办?例如在函数中: 问题答案: 如果使用(或-ea简称)启动程序,则此语句 相当于 如果不使用此选项启动程序,则assert语句将无效。 例如,;在你的问题中发布的,等同于 (如果你启动的是。) Java语言规范assert正式为:14.10。该声明说: 14.10。的声明 的断言是一个含有一个布尔表达式语句。断言是启用还是禁用。如果启用了断言,则断言的执行将导致对布尔表达式进行求
问题内容: 这可能是一个非常琐碎的问题,但是我既无法通过网络搜索引擎也无法在php.net上找到答案。如果您没有时间解释,请直接将我定向到可以阅读的内容。 “ var”关键字在PHP中是什么意思? PHP4和PHP5之间有什么区别吗? 问题答案: 它用于在PHP4中声明类成员变量,不再需要。它将在PHP5中工作,但是从不推荐使用的版本开始,从PHP 5.0.0版本到5.1.2版本都将发出警告。自P
问题内容: 在Java中,目的是什么做的关键字,并履行? 问题答案: 可用于标记变量“不可更改” 也可以使方法“不可替代” 也可以使类不是“可继承的”。即该类不能被子类化。 最后 在try / catch语句中用于“始终”执行代码 Java 7有一个新的try with resources语句 ,可用于自动关闭显式或隐式实现java.io.Closeable或java.lang.AutoClose