@state的作用

76 阅读1分钟

说实话,之前搞清楚了,但是一阵儿不碰,就又忘记了,趁着记忆还热乎,记录一下。 看下面一段代码

image.png 想要点击按钮然后让counter自增,在上面的文本组件中显示。 按照oc的逻辑我们应该像下面这样实现

image.png 但是报错了。 什么意思?self is immutable。 mutable是可变的,immutable就是不可变的,那么就清楚了,self是不可变的。 self是啥?

image.png 我们在结构体里面调用self,你说self是啥?当然是结构体了。

问题:结构体里面定义的变量,不能修改吗?

说实话,做oc做得久了,对于struct真的很陌生。一瞬间,我不确定了。那怎么办呢?回忆回忆。 回忆完毕,参见juejin.cn/spost/74362…

回到我们的困境

image.png

这里不能修改的原因我们找到了,那我们也能添加一个mutating来修复吗?

image.png

可以知道是不行的。@state修饰符来了。

image.png

可以发现,代码实现完毕。 但是仍旧有一点需要注意的。在oc等命令式语言中,我们修改了值之后,通常还要做一步,就是赋值。

image.png

仅仅更新数值,是无法更新ui的。 所以**@state起到了一个更新值和更新ui的作用** 。