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

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

此功能在所有诅咒的诅咒之前有效,也称为Swift 3.迁移到Swift 3后,Xcode,我的友好和可爱IDE , 在 SCNTransaction.completionBlock:

行显示这个令人沮丧的错误

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

其他几个帖子处理类似的错误,但 none 这些解决方案适用。

线路有什么问题???

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

SCNTransaction.completionBlock 是一个 class 属性。也许你是这个意思?

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

SCNTransaction.completionBlock 不是可以通过尾随闭包语法调用的函数,它是 属性。您需要为其分配闭包:

SCNTransaction.completionBlock = {
    block.removeFromParentNode()
}

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