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

Posted

技术标签:

【中文标题】Swift 3:无法调用非函数类型“(()-> Void)的值?”【英文标题】:Swift 3: Cannot call value of non-function type '(() -> 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()

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

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

SCNTransaction.completionBlock = 
    block.removeFromParentNode()

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

【讨论】:

抱歉,kennytm 击败了你,但仍然支持 :) 错过了 8 秒 :) 抱歉,您看起来像是 Swift 3 专家,所以我会再为您发布一个。 :) 这里是 q:***.com/questions/39630247/…。如果您能提供帮助,谢谢!

以上是关于Swift 3:无法调用非函数类型“(()-> Void)的值?”的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 错误“无法调用非函数类型 'UITableView!' 的值” [关闭]

无法在 Swift 3 中调用非函数类型“UICollectionView”的值

无法调用非函数类型“HTTPURLResponse?”的值- 阿拉莫菲尔 4.0

Swift 3 [String: AnyObject]() 给出了不能调用非函数类型 UInt -> Data 的值

Swift 错误:无法调用非函数类型“SKSpriteNode”的值

无法调用非函数类型“任何?!”的值:- Firebase,Swift3