首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Appstorage没有根据我的选择更新- SwiftUI - WatchApp

@Appstorage没有根据我的选择更新- SwiftUI - WatchApp
EN

Stack Overflow用户
提问于 2022-03-26 17:51:18
回答 1查看 98关注 0票数 1

我有一个选择器来更新一个变量bmr。不更新值的选择器。我在第二个屏幕上放置了一个测试文本,以查看是否可以调用新值,它总是显示默认值。

代码语言:javascript
复制
import SwiftUI

struct ProfileView: View {
    
    @AppStorage("ProfileView") var profileView:Bool = false
    @AppStorage("ContentView") var contentView:Bool = false
    @AppStorage("TimerView") var timerView:Bool = false
    @AppStorage("Name") var userName: String?
    @AppStorage("BMR") var bmr: Int?
    
    var body: some View {
        VStack {
            Picker(selection: $bmr, label: Text("Enter your BMR:")) {
                Text("50").tag(50)
                Text("60").tag(60)
                Text("70").tag(70)
                Text("80").tag(80)
            }
            NavigationLink(destination: ContentView()) {
                Text("Save")
            }
            
        }
    }
}

struct ContentView: View {
    
    @AppStorage("ProfileView") var profileView:Bool = false
    @AppStorage("ContentView") var contentView:Bool = false
    @AppStorage("TimerView") var timerView:Bool = false
    @AppStorage("Name") var userName: String?
    @AppStorage("BMR") var bmr: Int?
    
    var body: some View {
        VStack {
            Text("Your BMR: \(bmr ?? 50)")
            }
    }
    }

我在学习,所以我不知道该真正尝试什么。我试过装订和解压,但实际上不起作用。

我试图存储变量,并在前面传递视图,以测试它是否会更新,并且运行良好。但是通过视图传递信息并不适用于我的应用程序,因为即使退出,我也需要存储这些数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-26 18:18:35

问题是bmrInt?,而标记是Int。因为它们不是一回事,所以选择不会更新它。诀窍是将标记转换为如下所示的Int?

代码语言:javascript
复制
struct ProfileView: View {
    
    @AppStorage("ProfileView") var profileView:Bool = false
    @AppStorage("ContentView") var contentView:Bool = false
    @AppStorage("TimerView") var timerView:Bool = false
    @AppStorage("Name") var userName: String?
    @AppStorage("BMR") var bmr: Int?
    
    var body: some View {
        VStack {
            Picker(selection: $bmr, label: Text("Enter your BMR:")) {
                Text("50").tag(50 as Int?)
                Text("60").tag(60 as Int?)
                Text("70").tag(70 as Int?)
                Text("80").tag(80 as Int?)
            }
            NavigationLink(destination: ContentView()) {
                Text("Save")
            }
            
        }
    }
}

标记和选择类型必须完全匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71630486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档