【发布时间】:2020-08-13 00:40:46
【问题描述】:
基本上-我经常遇到这种情况-我不明白您如何正确地使用回调快速进行异步初始化。 (用结合 - 我可以做到)。特别是 - 我有这个代码:
struct MyView : View {
@State var initialised : Bool = false
init()
{
var initialisedBinding = $initialised
Photos.PHPhotoLibrary.RequestAuthorization {
status in
if (status == Photos.PHAuthorizationStatus.authorized) {
print("here I am")
initialisedBinding.wrappedValue = true
initialisedBinding.update()
}
}
}
var body : some View {
VStack {
if (initialised) {
Text("yep")
} else {
Text("nope")
}
}
}
当我运行它时 - 我打印出来了 - 但文本永远不会改变 - 它总是保持“不”。我做错了什么,我该如何做对? (不使用 combine - 我可以使用 currentValueSubject 和 .onreceive 之类的方法 - 但这是额外的开销,我真的很想知道为什么上面的代码不起作用 - 显然我理解的不好)
【问题讨论】:
-
在 SwiftUI 中,视图不应该是长期存在的并且有生命周期——它们只是描述视图的结构。每当发生变化时,它们会根据需要由 SwiftUI 初始化和销毁。任何异步都应该存在于视图“观察”并做出反应的视图模型中
标签: swiftui