SwiftUI中AppStorage的介绍使用

Swift中,AppStorageSwiftUI中引入的一个属性包装器,在这之前我们要存储一些轻量级的数据采用UserDefaults进行存取。而AppStorage用于从UserDefaults中读取值,当值改变时,它会自动重新调用视图的body属性。也就是说,这个AppStorage包装器有效地监视UserDefaults中的键值,并在键值更改时刷新UI。

下面先看一个在SwiftUI中使用UserDefaults存储的示例:
在这里插入图片描述
App第一运行时,没有显示userName,当点击SAVE后,userName赋值,并通过UserDefaults存起来。
当App第二个运行,在onAppear方法中,读取UserDefaults存取的userName值,赋值给userName属性并在UI上显示。

struct AppStorageDemo: View {

  @State var userName: String?

  var body: some View {
    VStack(spacing: 30) {
      if let userName {
        Text(userName)
          .font(.title)
      }

      Button(action: {
        userName = "Daniel"

        UserDefaults.standard.setValue(userName, forKey: "userName")
      }, label: {
        Text("SAVE")
          .foregroundColor(.white)
          .padding()
          .background(Color.red)
          .clipShape(Capsule())
      })
    }
    .onAppear {
      userName = UserDefaults.standard.string(forKey: "userName")
    }
  }
}

下面采用AppStorage包装器替换掉UserDefaults的存储逻辑。
在这里插入图片描述
上面代码采用AppStorage包装器包装userName属性,并在括号内设置了要监听的key值,这表明userName变量的值要通过这个key在UserDefaults存储。

@AppStorage("userName") var userName: String?

userName赋值,则将值直接存储到UserDefaults中。
读取userName的值,也是拿对应的key去UserDefaults取值。

上面修改后的代码在App运行起来后,显示出了userName的值,这说明AppStorage包装器在UserDefaults通过userName这个key读取到了对应的值。

在文章开头说的被AppStorage包装器包装的属性,在其改变的时候,UI会自动刷新,下面看一下下面的示例:
在这里插入图片描述
通过两个Button切换userName的值,UI也及时的刷新了,通过再次启动App,显示也是上一次存储的值。

以上就是AppStorage包装器的简单介绍与使用,如有不对的地方,还望大家批评指正。

最后,希望能够帮助到有需要的朋友,如果您觉得有帮助,还望点个赞,添加个关注,笔者也会不断地努力,写出更多更好用的文章。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值