gpt4 book ai didi

ios - SwiftUI 不能正确评估 elseif?

转载 作者:行者123 更新时间:2023-12-01 22:03:41 25 4
gpt4 key购买 nike

我正在创建一个 SwiftUI View ,其中有三个可能的条件,并希望根据满足的条件显示不同的内容。一个简化的例子:

struct ContentView: View {

@State var condition1 = true
@State var condition2 = false

var body: some View {
VStack {
if condition1 {
Text("text1")
} else if condition2 {
Text("text2")
} else {
Text("text3")
}
}.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.condition2 = true
}

DispatchQueue.main.asyncAfter(deadline: .now() + 4.0) {
self.condition1 = false
}

DispatchQueue.main.asyncAfter(deadline: .now() + 6.0) {
self.condition2 = false
}
}
}
}

我期望发生的事情:
1) 用户界面显示 text1当应用程序启动时
2) UI 仍然显示 text1 2 秒后(两个变量都是 true )
3) UI 显示 text2 4 秒后( condition2truecondition1 现在是 false )
4) UI 显示 text3 6 秒后(两个变量现在都是 false )

实际发生的情况:
1) 用户界面显示 text1当应用程序启动时
2) UI 显示 text1 2 秒后
3) UI 显示 text2 4 秒后
4) UI 继续显示text2 6 秒后

奇怪的是,如果我在 UI 代码中设置断点,则执行显示 text3 的行,似乎 UI 永远不会更新。更奇怪的是,如果我把 Spacer().frame(width: 0, height: 0)在这种情况下,一切都按预期工作。

这是 SwiftUI 中的错误还是这里发生了什么?

最佳答案

好吧,实际上,如果添加按钮并在按钮上切换状态,那么一切正常,所以这是延迟更新的问题(可能是赛车,可能是错误......没有进一步挖掘)

这实际上是解决方案,它有效(使用 Xcode 11.2/iOS 13.2 测试)...将这些条件依赖 View 分离到专用 View 构建器中,如下所示

struct TestRefreshOnCondition: View {
@State var condition1 = true
@State var condition2 = false

var ConditionalView: some View {
Group {
if condition1 {
Text("text1")
} else if condition2 {
Text("text2")
} else {
Text("text3")
}
}
}

var body: some View {
VStack {
ConditionalView
}.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.condition2 = true
}
DispatchQueue.main.asyncAfter(deadline: .now() + 4.0) {
self.condition1 = false
}
DispatchQueue.main.asyncAfter(deadline: .now() + 6.0) {
self.condition2 = false
}
}
}
}

关于ios - SwiftUI 不能正确评估 elseif?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60002267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com