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 的值?