SwiftUI 闭包更新 @State init

Posted

技术标签:

【中文标题】SwiftUI 闭包更新 @State init【英文标题】:SwiftUI closure update @State inside init 【发布时间】:2020-11-30 20:23:51 【问题描述】:

当我创建一个视图时,我希望用户登录,当登录完成时,视图会改变。

由于我对 SwiftUI 很陌生,因此我尝试的方式似乎行不通。 (我确实知道这与 SwiftUI 结构有关)

    我有一个状态变量来知道 progressView 是否应该动画
@State private var isLoading: Bool = true
    我对登录用户有一个转义闭包
init() 
    userService.login  (didError, msg) in
    

    进度视图(尚未测试)
ProgressView().disabled(isLoading).frame(alignment: .center)

当我尝试这样做时:

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

Xcode 返回:转义闭包捕获变异的 'self' 参数。

有谁知道我怎样才能做出这样的事情?

【问题讨论】:

结构中不允许使用这种类型的功能。创建一个视图模型作为一个类。然后把这段代码放到类中 【参考方案1】:

而不是init.onAppear 内部的某个地方调用它body,就像

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

【讨论】:

以上是关于SwiftUI 闭包更新 @State init的主要内容,如果未能解决你的问题,请参考以下文章

在 init() 构造函数中初始化的带有 @State 的 SwiftUI 视图

Init State var 来自另一个视图,swiftui [重复]

深度解析:为何在 SwiftUI 视图的 init 初始化器里无法更改 @State 的值?

深度解析:为何在 SwiftUI 视图的 init 初始化器里无法更改 @State 的值?

SwiftUI - 更新@State 不会改变视图

SwiftUI,为啥部分视图没有刷新? @State 变量未更新