我创建了一个更新表来通知用户有关更新的信息,但是我不希望每次推送更新时都显示该更新表,因为有时它只是一些错误修复程序,因此我创建了一个常数来切换该表。我正在打电话给下面的工作表:
VStack {
Text(" ")
}
.sheet(isPresented: $isShowingAppStoreUpdateNotification) {
UpdatesView()
}
如何有条件地检查常数?这是我尝试过的:
if(generalConstants.shouldShowUpdateSheet) {
.sheet(isPresented: $isShowingAppStoreUpdateNotification) {
UpdatesView()
}
}
但我收到此错误:Cannot infer contextual base in reference to member 'sheet'
答案 0 :(得分:0)
这是我的示例代码。
struct ContentView: View {
@State private var showSheet = false
@State private var toggle = false {
didSet {
self.showSheet = toggle && sheet
}
}
@State private var sheet = false {
didSet {
self.showSheet = toggle && sheet
}
}
var body: some View {
VStack {
Toggle(isOn: $toggle) {
Text("Allow to show sheet")
}
Button(action: {
self.sheet.toggle()
}) {
Text("Show sheet")
}
}.sheet(isPresented: $showSheet, content: {
Text("Sheet")
})
}
}
答案 1 :(得分:0)
.sheet
是实例方法VStack
,所以您不能做您做的-这不是合法的Swift语法。
最简单的方法是在VStack
视图上显示条件:
if(generalConstants.shouldShowUpdateSheet) {
VStack {
Text(" ")
}
.sheet(isPresented: $isShowingAppStoreUpdateNotification) {
UpdatesView()
}
} else {
VStack {
Text(" ")
}
}
但是,当然,这不是很干。
相反,请保持视图在视图模型/状态下的行为逻辑,并让视图仅对数据更改做出反应。我的意思是,只有在满足所有想要的条件时,才将isShowingAppStoreUpdateNotification
设置为true
,并保持视图不变
@State var isShowingAppStoreUpdateNotification = generalConstants.shouldShowUpdateSheet
var body: some View {
VStack {
Text(" ")
}
.sheet(isPresented: $isShowingAppStoreUpdateNotification) {
UpdatesView()
}
}