static func animate(_ duration: TimeInterval,
animations: (() -> Void)!,
delay: TimeInterval = 0,
options: UIViewAnimationOptions = [],
withComplection completion: (() -> Void)! = {}) {
UIView.animate(
withDuration: duration,
delay: delay,
options: options,
animations: {
animations()
}, completion: { finished in
completion()
})
}
在我的swift文件中使用上面的类并创建如下所示的函数
SPAnimation.animate(durationScalingRootView,
animations: {
rootViewController.view.transform = CGAffineTransform.identity
},
delay: delayScalingRootView,
options: UIViewAnimationOptions.curveEaseOut,
withComplection: {
finished in
//rootViewController.view.layer.mask = nil
})
获取此错误
上下文闭包类型'() - > Void'期望0个参数,但是1个 用于封闭体
答案 0 :(得分:6)
问题在于:
withComplection: {
finished in
//rootViewController.view.layer.mask = nil
}
如果查看方法声明,则完成处理程序的类型为(() -> Void)!
。它不需要任何论据。你上面的闭包只有一个参数 - finished
。结果,发生了错误。
从闭包中删除finished
参数:
withComplection: {
//rootViewController.view.layer.mask = nil
}
或者您编辑animate
方法以接受带有一个参数的闭包:
static func animate(_ duration: TimeInterval,
animations: (() -> Void)!,
delay: TimeInterval = 0,
options: UIViewAnimationOptions = [],
withComplection completion: ((Bool) -> Void)? = nil) {
UIView.animate(
withDuration: duration,
delay: delay,
options: options,
animations: {
animations()
}, completion: { finished in
completion?(finished)
})
}
答案 1 :(得分:1)
1。)你错误完成
2.)删除SPAnimation函数中的闭包参数finished in
这不起作用的原因是你创建的函数的闭包类型只是void。 UIView中包含的静态函数具有闭包类型((Bool) -> Void)?
,因此您必须将参数放在那里。
在SPAnimate中更改animate函数中的闭包类型,或者在闭包调用中删除完成的参数。