我试图在不同的点更新一个变量(将其从1更改为0,反之亦然(。
我有一个可观察的物体:
class GameSettings: ObservableObject {
@Published var score = 1
@Published var alert = 0
@Published var displayNavButtons = 1
}
更改显示NavButtons:的功能
func toggleNavButtonsOff(gamesettings: inout GameSettings) {
let gamesettings = gamesettings
gamesettings.displayNavButtons = 0
}
和一个视图:
struct PageRender: View {
@EnvironmentObject var settings: GameSettings
var body: some View {
if settings.score == 1 {
toggleNavButtonOff(game settings: &settings)
Text ("page 1")
...
}
}
}
我还将有另一个名为toggleNavButtonOn的函数,将displayNavButtons再次更改为1。
在代码(…(的其他地方,有一个if语句来选择性地显示一些按钮(NavButtons(;得分;乘以1(一切如预期(。这个想法是在displayNavButtons=1的情况下显示NavButtons。但是如果displayNavButtons=0,我希望它不会显示按钮。我需要根据某些标准更改显示导航按钮。
然而,实现上述内容似乎并不奏效。调用视图中的函数会出现错误:";类型"(("不能符合"视图";只有结构/枚举/类类型才能符合协议";以及";无法将不可变值作为inout参数传递:"settings"是一个只获取属性;。
有人知道如何解决这个问题吗?感谢
试试这样的东西:
struct PageRender: View {
@EnvironmentObject var settings: GameSettings
var body: some View {
Group {
if settings.score == 1 {
Text ("page 1")
}
}.onAppear {
settings.toggleNavButtonOff()
}
}
}
class GameSettings: ObservableObject {
@Published var score = 1
@Published var alert = 0
@Published var displayNavButtons = 1
func toggleNavButtonsOff() {
self.dispalyNavButtons = 0
}
}
正如@aheze在注释中所回避的那样,编译器似乎不喜欢在body
中让只一个if
语句,因为如果条件为false,则不会返回任何内容。Group
防止了这种情况。
我使用了onAppear
,而不是内联调用toggle函数,这在任何方面都没有多大意义——SwiftUI中的视图可以被渲染多次,而且您通常不想在声明性视图层次结构中交错命令式代码。