关于动画:Swift Closure – 无法转换类型 (_) -> () 的值?到预期的参数类型(()->())?

 2022-02-13 

Swift Closure - Cannot convert value of type (_) -> ()? to expected argument type (() -> ())?

我在 Xcode 9、Swift 4 中使用 SideMenuController pod。试图让侧面板动画正常工作。无法弄清楚为什么它会抛出这个错误。如果您能提供帮助,请提前致谢!

1
2
3
4
5
6
7
8
9
UIView.panelAnimation( duration, animations: {
        self.centerPanel.frame = centerPanelFrame
        self.set(statusUnderlayAlpha: hidden ? 0 : 1)
    }) { _ in  // THROWS ERROR - CANNOT CONVERT VALUE OF TYPE (_) -> ()? TO EXPECTED ARGUMENT TYPE (() -> ())?
        if hidden {
            self.setSideShadow(hidden: hidden)
        }
        completion?(updated)
    }

这是该函数的定义:

1
class func panelAnimation(_ duration : TimeInterval, animations : @escaping (()->()), completion : (()->())? = nil)

如您所见,您不需要在完成闭包开始时使用 _ in 关键字。

改写如下:

1
2
3
4
5
6
7
8
9
UIView.panelAnimation( duration, animations: {
    self.centerPanel.frame = centerPanelFrame
    self.set(statusUnderlayAlpha: hidden ? 0 : 1)
}) {
    if hidden {
        self.setSideShadow(hidden: hidden)
    }
    completion?(updated)
}