将AppStorage这个wrapper套在变量上时,就是将这个变量保存在UserDefaults中,而后者的域是整个APP,因此在任何一个View中(不管它们是父子关系、同级关系或是其他关系)都可以访问同一个变量,代码如下:
struct MainView: View {
var body: some View {
TabView {
SubView1()
SubView2()
}
}
}
struct SubView1: View {
@AppStorage("isShowHello") var = false
var body: some View {
if isShowHello {
Text("Hello")
}
}
}
struct SubView2: View {
@AppStorage("isShowHello") var = false
var body: some View {
Button(action: isShowHello.toggle()){
Text("Switch Display Hello or Not")
}
}
}
如代码所示,两个平行的子View都可以访问并控制isShowHello变量,在SubView中改变其值后,SubView的Text也会相应地显示或消失,杀死app后再打开可以看到显示的状态不变。即使在不同的View中
@AppStorage("isShowHello") var = false
也只会在变量未初始化时赋值为false,因此不用担心在不同的地方同时存在此代码会引起变量取值的混乱。