SwiftUI闭包:在init中更新@State

4

当我创建一个视图时,我希望能够登录用户,并在登录完成后更改视图。

由于我对SwiftUI相当新,所以似乎我尝试做到这一点的方式并不起作用。(我知道它与SwiftUI结构有关)

  1. 我有一个状态变量来确定progressView是否应该动画。
@State private var isLoading: Bool = true
  1. 我有一个逃逸闭包用于登录用户
init() {
    userService.login { (didError, msg) in
    }
}
  1. 进度视图(尚未测试)
ProgressView().disabled(isLoading).frame(alignment: .center)

当我尝试执行以下操作时:

userService.login { (didError, msg) in
    isLoading.toggle() or self.isLoading.toggle()
}

Xcode返回:逃逸闭包捕获可变的“self”参数。

有人知道我该如何使类似这样的东西工作吗?


这种功能不允许在结构体中使用。将其创建为类的视图模型。然后将此代码放入该类中。 - AAV
1个回答

7

init替换为在.onAppear中调用它,此方法需放入body中:

var body: some View {
   VStack {
      // .. some content
   }
   .onAppear {
      userService.login { (didError, msg) in
         self.isLoading.toggle()
      }
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接