您基本上可以用 3 种相同的方式编写它:
在闭包/代码块中写下正确的操作:
UIView.animateWithDuration(10.0) {
self.navigationController.toolbar.frame = CGRect(x:0.0, y:10.0, width:10.0, height:0.0)
}
这也称为尾随闭包(如果闭包参数是最后一个参数,则只能进行尾随闭包)
这并不意味着不再写入参数“动画”。它是写的,但就像上面的格式一样。
准确地写在行内,大多数开发人员避免这样,因为用所有的括号和大括号来写有点麻烦。
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
当您必须捕获一个值时,闭包变得更加有趣。看这个简单的演示。有关 Swift 闭包的更多信息,请参阅 Apple 文档