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

时间:2016-09-22 03:33:33

标签: swift swift3 scntranscaction

此函数在所有curses(也称为Swift 3)的诅咒之前工作。迁移到Swift 3之后,我的友好且可爱的IDE Xcode在行SCNTransaction.completionBlock上显示这个令人沮丧的错误:

  

无法调用非功能类型的值'(() - > 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 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:3)

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

SCNTransaction.completionBlock = {
    block.removeFromParentNode()
}

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