2016-09-22 1 views
3

Cette fonction a travaillé avant la malédiction de toutes les malédictions, également connu sous le nom Swift 3. Après la migration vers Swift 3, Xcode, mon IDE amical et câline, affiche cette erreur frustrante contre la ligne SCNTransaction.completionBlock:Swift 3: Impossible d'appeler la valeur du type de non-fonction '(() -> Annulation)?'

ne peut pas appeler la valeur de type non-fonction '(() -> Annulation)?'

Plusieurs autres messages traitent d'erreurs similaires, mais aucune de ces solutions ne s'applique.

Quel est le problème avec la ligne ???

func test(_ block: SCNNode, animated: Bool) { 
    // Do stuff 
    SCNTransaction.begin() 
    SCNTransaction.animationDuration = animated ? AnimationDur : 0.0 
    SCNTransaction.completionBlock { 
     block.removeFromParentNode() 
    } 
    // Animate stuff 
    SCNTransaction.commit() 
} 

Répondre

11

SCNTransaction.completionBlock est une propriété de classe. Peut-être que vous voulez dire ça?

//        ↓ 
SCNTransaction.completionBlock = { 
    block.removeFromParentNode() 
} 
+0

Oui, merci! Frustrant combien changé dans Swift 3. – Crashalot

3

SCNTransaction.completionBlock n'est pas une fonction que vous pouvez appeler via la syntaxe de clôture, c'est une propriété. Vous devrez lui affecter la fermeture:

SCNTransaction.completionBlock = { 
    block.removeFromParentNode() 
} 

En d'autres termes, il vous suffit d'ajouter un signe égal.

+0

Désolé, kennytm vous a battu à la réponse mais upvoted néanmoins :) – Crashalot

+0

Je l'ai manqué par 8 secondes :) –

+0

Désolé, mais puisque vous semblez être un expert Swift 3, je vais poster un autre pour toi. :) – Crashalot