Swift 错误:转义闭包捕获变异';自我';参数
我已经回顾了关于这个主题的其他问题(有很多),但是没有一个解决与Swift 错误:转义闭包捕获变异';自我';参数,swift,swiftui,closures,self,Swift,Swiftui,Closures,Self,我已经回顾了关于这个主题的其他问题(有很多),但是没有一个解决与@状态相关的错误。我认为这正是@State解决的问题 这是相关代码 struct ViewA: View { @State private var startAnimation = false let width: CGFloat let height: CGFloat init(width: CGFloat, height: CGFloat) { self.wi
@状态相关的错误。我认为这正是@State
解决的问题
这是相关代码
struct ViewA: View {
@State private var startAnimation = false
let width: CGFloat
let height: CGFloat
init(width: CGFloat, height: CGFloat) {
self.width = width
self.height = height
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
startAnimation = true //<--- The error is on this line
}
}
var body: some View {
Circle()
.frame(width: width, height: height)
.scaleEffect(CGSize(width: startAnimation ? 5.0 : 1.0 , height: startAnimation ? 5.0 : 1.0))
}
}
结构视图A:视图{
@国家私有变量startAnimation=false
让宽度:CGFloat
让高度:CGFloat
初始(宽度:CGFloat,高度:CGFloat){
self.width=宽度
自我高度=高度
DispatchQueue.main.asyncAfter(截止日期:.now()+1.0){
startAnimation=true/我认为这与@State属性无关,但与您正在使用@escaping闭包这一事实有关。如果您在闭包中使用self,则转义闭包可能会导致一个强引用循环。有关解释@escaping闭包的文章,请参阅
亲切问候,,
MacUserT为什么不使用.onAppear()??.onAppear(){DispatchQueue.main.asyncAfter(截止日期:.now()+1.0){self.startAnimation=true}}}
好的……现在为什么它在.onAppear()内部工作而不是在init()内部?init用于初始化变量,而不是在某些时间段更改变量值。正确,它用于初始化结构。每次需要重新绘制屏幕时,都会丢弃当前视图并创建一个新的结构,然后调用init来初始化自身。OnAppear应该被调用一次。也可能是更多延迟动画的快捷方式可以是:withAnimation(animation.linear(持续时间:0.5)。delay(1)){startAnimation=true}