static func animate(_ duration: TimeInterval, animations: (() - Void)!, delay: TimeInterval = 0, options: UIViewAnimationOptions = [], withComplection completion: (() - Void)! = {}) { UIView.animate( withDuration: duration, delay: delay, op
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() }) }
Using above class in my swift file and create function like below
SPAnimation.animate(durationScalingRootView, animations: { rootViewController.view.transform = CGAffineTransform.identity }, delay: delayScalingRootView, options: UIViewAnimationOptions.curveEaseOut, withComplection: { finished in //rootViewController.view.layer.mask = nil })
得到此错误
问题出在这里:Contextual closure type ‘() -> Void’ expects 0 arguments, but 1 was
used in closure body
withComplection: { finished in //rootViewController.view.layer.mask = nil }
如果查看方法声明,则完成处理程序的类型为(() – > Void)!.它不需要任何论据.上面的闭包需要一个参数 – 完成.结果,发生错误.
从闭包中删除完成的参数:
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) }) }