你其實不是調用函數,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