Swift 3:无法调用非函数类型的值 '(() -> Void)?'

5

在所有祸害之咒,也称为Swift 3出现之前,此函数是有效的。在迁移到Swift 3之后,我的友好而可爱的IDE Xcode针对该行代码SCNTransaction.completionBlock显示了以下令人沮丧的错误:

Cannot call value of non-function type '(() -> Void)?'

有多篇帖子处理类似的错误,但这些解决方案都不适用。

该行代码有什么问题吗?

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

18

SCNTransaction.completionBlock 是一个类属性。也许您是指这个?

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

1
是的,谢谢!Swift 3 中有很多变化,让人感到沮丧。 - Crashalot

4

SCNTransaction.completionBlock不是一个可以通过尾随闭包语法调用的函数,它是一个属性。你需要将闭包赋值给它:

SCNTransaction.completionBlock = {
    block.removeFromParentNode()
}

换句话说,你只需要添加一个等号。

抱歉,kennytm 比你先回答了,但仍然点赞了 :) - Crashalot
只差8秒钟就错过了 :) - Jack Lawrence
抱歉,看起来你是一位Swift 3专家,所以我会再发布一个问题给你。 :) - Crashalot
这是问题链接:https://dev59.com/ZlkS5IYBdhLWcg3wl36I。如果您能帮助的话,感谢! - Crashalot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接