使用swiftui进行异步初始化

时间:2020-08-13 00:40:46

标签: swiftui

基本上-我遇到了很多问题-我不明白您如何通过回调快速正确地进行异步初始化。 (结合使用-我可以做到)。特别是-我有以下代码:

<select id="my-select" onchange="changeFunc(this.value)">
  <option selected disabled>Choose</option>
  <option value="A">A</option>
  <option value="B">B</option>
  <option value="C">C</option>
  <option value="E">E</option>
  <option value="F">F</option>
  <option value="G">G</option>
</select>

<div id="record_select"></div>

当我运行它时-我将打印输出-但文本从未更改-它始终保持为“ nope”。我在做什么错,我该怎么做正确呢? (无需使用合并-我可以像currentValueSubject和.onreceive一样来完成它-但这是额外的开销,我真的很想知道为什么上面的代码不起作用-显然我理解不好)

1 个答案:

答案 0 :(得分:1)

状态尚未在init中准备好,因此您无处可去。此外,init中的此类活动并不好,因为在渲染期间可以多次创建视图。更合适的地方是.onAppear

struct MyView : View {
   @State var initialised : Bool = false

   var body : some View {
     VStack {
       if (initialised) {
           Text("yep")
       } else {
           Text("nope")
       } 
    }.onAppear {
       Photos.PHPhotoLibrary.RequestAuthorization {
          status in 
          if (status == Photos.PHAuthorizationStatus.authorized) {
              print("here I am")
              self.initialised = true
          }
      }
    } 
  }
}