为什么UIView动画闭包中的弱自引用会导致Swift中的编译错误

Cor*_*les 1 closures weak-references swift

尝试在UIView动画闭包中使用弱引用时出现编译错误。根据其他教程和Apple的文档,这应该是有效的。

片段

                UIView.animateKeyframesWithDuration(0.35, delay: 0.5, options: UIViewKeyframeAnimationOptions.CalculationModeCubicPaced, animations:{ [weak self] in

                    UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0, animations:{

                        if let actualSelf = self {
                            actualSelf.noPlayListsView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.5, 1.5)
                        }
                    })

                    UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0, animations:{

                        if let actualSelf = self {
                            actualSelf.noPlayListsView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9)
                        }
                    })

                    UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0, animations:{

                        if let actualSelf = self {
                            actualSelf.noPlayListsView.transform = CGAffineTransformIdentity
                        }
                    })
                }, completion:nil)
Run Code Online (Sandbox Code Playgroud)

小智 5

您根本不需要在静态函数UIView.animate()中使用[弱自我]

静态(全局)函数不会增加引用计数器

苹果关闭文档

正如Function中介绍的那样,全局和嵌套函数实际上是闭包的特殊情况。闭包采用以下三种形式之一:

全局函数是具有名称且不捕获任何值的闭包。