我尝试了在 SwiftUI 视图中更新 @State 的不同方法。在某些方法中,状态更改会更新相关视图,而在某些方法中则不会。
@State var bodyText: String = "Hello swift"
var body: some View {
Text(bodyText)
.onAppear(perform: triggerTextUpdate)
}
private func triggerTextUpdate() {
DispatchQueue.main.asyncAfter(deadline: .now()+3) {
bodyText = "Hello I am future swift"
}
}
Run Code Online (Sandbox Code Playgroud)
1.@State从初始化器改变
@State var bodyText: String = "Hello swift"
init() {
triggerTextUpdate()
}
var body: some View {
Text(bodyText)
}
private func triggerTextUpdate() {
DispatchQueue.main.asyncAfter(deadline: .now()+3) {
bodyText = "Hello I am future swift"
}
}
Run Code Online (Sandbox Code Playgroud)
2.@State由变异函数改变
@State var bodyText: String = "Hello swift"
private let somePublishSubject = PublishSubject<String, Never>()
private var subscriptions = Set<AnyCancellable>()
init() {
setUpBinding()
}
var body: some View {
Text(bodyText)
}
mutating func setUpBinding() {
somePublishSubject.sink { [self] text in
self.bodyText = text
}.store(in: &subscriptions)
}
Run Code Online (Sandbox Code Playgroud)
当somePublishSubject调用并更改bodyText状态时,视图不会更新。
关于 SwiftUI 的文档并不多,这使得理解为什么视图更新和@State更改变得更加混乱。对这种行为的任何解释都会非常有帮助。
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |