2016-07-28 11 views
1

)SKAction.runBlock(と引数を受け取る関数を呼び出して、私は引数を期待する関数を実行するためにSKAction.runBlock()を使用したい:私はスウィフトとSpriteKitベース</p> <p>で働いている

class Tile : SKShapeNode 
{ 
} 

override func didMoveToView() 
{ 
    let tile = Tile() 
    tile.runAction(SKAction.runBlock(myFunc(tile))) 
} 

func myFunc(tile: Tile) 
{ 
} 
期待される引数の型 へ

型の値を変換できません「()」 ':

私は任意の引数を期待していない関数を作成しようとすると、すべてが正常に動作しますが、戻って上記のコードは、これがディスパッチ_block_t '(別名@convention(block)() - >()')

私は何を理解していませんか?

答えて

3

を表現のこの種の書き込みと:

SKAction.runBlock(myFunc(tile)) 

あなたはmyFunc(tile)を呼び出した結果を渡しています。

(私はあなたがこのコードを考えていないと考えている:。SKAction.runBlock(sin(0))runBlockに閉鎖のいくつかの並べ替えを渡す)

そしてmyFuncは何も返さないように宣言されたようmyFunc(tile)から返される値は、無効値です。空値は()と表すこともできます。エラーメッセージ()は、@convention(block)() ->()のクロージャに変換できません。

したがって、タイプ@convention(block)() ->()のクロージャを作成する必要があります。要するに

tile.runAction(SKAction.runBlock({()->() in myFunc(tile)})) 

:この明確な説明のための

tile.runAction(SKAction.runBlock({myFunc(tile)})) 
+0

感謝。だから、なぜ{{} "を置かなくても期待される引数を持たない関数を呼び出すことができますか? – Drakalex

+1

@Drakalex、Swiftでは、メソッド参照は自動的に同じ関数型のクロージャに変換されます。したがって、 'myFunc'を書くだけで、'(Tile) - > Void'型のクロージャを作成しています。したがって、 'anotherFunc'が' func anotherFunc(){} 'として宣言されている場合、' anotherFunc'を書くと型 '() - > Void'('() - > ')と同じ型のクロージャが作成されます。以前に見たことがある。 – OOPer

+0

関数はクロージャーで、特殊なクロージャーなので、変換は行われません(最後のコメントは無視されます) – Knight0fDragon

1

あなただけ} {不足している:

tile.runAction(SKAction.runBlock({ 
    myFunc(tile)})) 
関連する問題