你基本上可以用 3 种相同的方式来编写它:
在闭包/代码块中写下正确的操作:
UIView.animateWithDuration(10.0) {
self.navigationController.toolbar.frame = CGRect(x:0.0, y:10.0, width:10.0, height:0.0)
}
这也称为尾随闭包(只有在闭包参数是last参数的情况下才能做尾随闭包)
这并不意味着不再写入参数“动画”。它是写的,但就像上面的格式一样。
准确地写在行内,大多数开发人员避免这样,因为用所有的括号和大括号来写有点麻烦。
UIView.animateWithDuration(10.0, animations: {
self.navigationController.toolbar.frame = CGRect(x:0.0, y:10.0, width:10.0, height:0.0)
})
(与尾随闭包相反,您写了名称,即“动画”)
这称为内联闭包
以更模块化的方式编写
UIView.animateWithDuration(duration: NSTimeInterval, animations: animatingFunc)
func animatingFunc() {
self.navigationController.toolbar.frame = CGRect(x:0.0, y:10.0, width:10.0, height:0.0)
}
记住参数“动画”的类型是() -> Void
正如我们所做的那样,animatingFunc 不接受任何参数,即 '()' 并且不返回任何参数,即 'void'
(在 Swift 中,函数是类型,可以作为参数传入)
有些人可能会说这更具可读性,有些人可能会说尾随闭包是......
旁注1
你也可以什么都不做(这真的没有意义,但在许多其他处理程序/动画/完成处理程序中你可能不想做任何事情)
UIView.animateWithDuration(duration: NSTimeInterval, animations: nil)
旁注2
当您必须捕获一个值时,闭包会变得更有趣。见this简单演示。
有关 Swift 闭包的更多信息,请参阅Apple's Documentation