【问题标题】:Swift 3: Cannot call value of non-function type '(() -> Void)?'Swift 3:无法调用非函数类型“(()-> Void)的值?”
【发布时间】:2016-09-22 03:33:33
【问题描述】:

这个函数在所有诅咒的诅咒之前工作,也被称为 Swift 3。在迁移到 Swift 3 之后,Xcode,我友好而可爱的 IDE,在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()
}

【问题讨论】:

    标签: swift swift3 scntranscaction


    【解决方案1】:

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

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

    【讨论】:

    • 好的,谢谢!令人沮丧的是 Swift 3 发生了多大的变化。
    【解决方案2】:

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

    SCNTransaction.completionBlock = {
        block.removeFromParentNode()
    }
    

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

    【讨论】:

    • 抱歉,kennytm 击败了你,但仍然支持 :)
    • 错过了 8 秒 :)
    • 抱歉,您看起来像是 Swift 3 专家,所以我会再为您发布一个。 :)
    • 这里是 q:stackoverflow.com/questions/39630247/…。如果您能提供帮助,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多