【发布时间】:2021-08-03 08:36:12
【问题描述】:
鉴于此代码:
import SwiftUI
struct ContentView: View {
@State private var someView = DefaultView()
var body: some View {
VStack { someView }
//.onAppear { someView.change() } //1. Color not changing from here, isDisplay remains false
}
}
struct DefaultView: View {
@State private var isDisplay = false
func change() {
isDisplay = true
print("isDisplay = \(self.isDisplay)")
}
var body: some View {
Text("Hello!")
.foregroundColor(isDisplay ? .red : .blue)
//.onAppear { change() } //2. Color and isDisplay property is changing from here well
}
}
我想从父视图(ContentView 1.)调用更改函数。运行是因为打印在调试区域上可见,但没有任何更改,isDisplay 属性不会从 false 更改为 true。 为什么会这样?如何更改父类的@state 属性?
编辑: 它可以工作:
struct DefaultView: View {
public var isDisplay: Bool
init() {
isDisplay = false
}
mutating func change() {
isDisplay = true
print("isDisplay = \(self.isDisplay)")
}
var body: some View {
Text("Hello!")
.foregroundColor(isDisplay ? .red : .blue)
}
}
【问题讨论】:
-
试一试:在主队列中添加这一行。
someView.change() -
谢谢,但它已经在主线程上。 (:
标签: swiftui