你其实不是调用函数,createMyNode
将被称为内SKAction.runBlock
,你只是把它当作一个论据。
看看SKAction.runBlock
接受的类型,从SKAction
documentation:
class func runBlock(_ block: dispatch_block_t) -> SKAction
而且从GCD documentation:
typealias dispatch_block_t =() -> Void
因此,SKAction.runBlock
接受一个函数(或关闭,他们是同样的东西),它不需要参数并返回Void
;这正是你用createMyNode
补充的东西。
有了这个信息很清楚的看到你为什么不createMyNode
后加括号 - 因为这会调用该函数,从而传递到Void
SKAction.runBlock
,(的createMyNode
返回类型),这SKAction.runBlock
不会接受。
为了澄清,下面是另一个例子。假设你有这个功能:
func takesAFunc(c: (Int, Int) -> Int) -> Void {
print(c(1, 2))
}
而你想传递一个函数来添加这两个数字。您可能写:
takesAFunc { num1, num2 in
num1 + num2
}
// Prints: 3
但或者,你可以只通过在+
运营商接受Int
秒 - 这是一个功能了。看看定义:
func +(lhs: Int, rhs: Int) -> Int
这由takesAFunc
所需的类型相匹配,因此,你可以这样写:
takesAFunc(+) // Prints: 3