SwiftUI如何修改页面状态?@state的使用

本文介绍了SwiftUI中如何处理状态,尤其是使用@state属性包装器进行状态修改。通过示例,解释了如何在SwiftUI中创建可变状态,以及状态双向绑定的概念,展示了如何实现页面与属性之间的同步更新。最后提到了自定义双向绑定的可能性,允许在绑定中添加自定义逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SwiftUI开发中流传一种说法:视图是状态的函数。这句话什么意思呢?

我们在玩游戏的时候,死了几次,得到几分,收集了一些道具,或者捡到武器,在应用程序中,我们把这些称为state。当你退出游戏的时候状态都会保存,当你下次再进来游戏的时候可以接着上次的继续玩。不过在你玩的过程中,这些所有的东西都可以叫状态:所有的integers,strings,booleans等等,这些存储在内存中的值描述着你现在在干嘛。

回到开头的疑问,我们说SwiftUI的视图们是状态的函数,其实意思是说,页面呈现给我们的样子都由程序的状态来决定,不管是能看到的,还是可以进行交互的内容。比如只有在输入框中填入了内容,我们才能继续进行下一步。而在传统的观念中:用户界面是由一系列事件决定的。我们现在能看到当前页面,是因为我们使用app过程中,点击了某些地方,或者登录了应用,刷新了数据等等。

如何修改状态?

说了这么多,那在SwiftUI中我们应该如何处理状态呢?我们先以一个按钮的例子开始:

struct ContentView: View {
   
   
    var tapCount = 0

    var body: some View {
   
   
        Button("Tap Count: \(tapCount)") {
   
   
            self.tapCount += 1
        }
    }
}

假如有上面的一个按钮,它有一个title,以及一个action,在按钮点击的时候改变属性tapCount的值。是不是看起来很合理?

实际上上面的代码在swift中是会报错的。ContentView是一个struct,而我们知道结构体是不可变的,所以我们不能随意改变它的值。

在创建一个结构体的方法之后,如果想在方法中修改属性的值,我们需要添加mutating关键字,比如这样:


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值