Swiftui函数可更改变量



我试图在不同的点更新一个变量(将其从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中的视图可以被渲染多次,而且您通常不想在声明性视图层次结构中交错命令式代码。

最新更新