【问题标题】:Cannot invoke 'SKSpriteNode.init' with an argument list of type '(texture: SKTexture, color: UIColor, size: CGSize, () -> ())'无法使用类型为“(纹理:SKTexture,颜色:UIColor,大小:CGSize,()->())”的参数列表调用“SKSpriteNode.init”
【发布时间】:2018-01-11 13:27:56
【问题描述】:

谁能帮我解决这个问题?即使我正在使用指定的初始化程序,也会生成显示的错误。

class OtherOrb: SKSpriteNode {

override init() {

    let texture = SKTexture(imageNamed: "Orb")

    super.init(texture: texture, color: UIColor.clear, size: texture.size()){
        self.position = CGPoint(x: 0.0, y: 500.0)
        self.physicsBody = SKPhysicsBody(circleOfRadius: 20) 
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

【问题讨论】:

    标签: swift sprite-kit skspritenode


    【解决方案1】:

    您收到此错误是因为您的初始化程序后面有闭包。

    在 Swift 中,编译器在方法调用之后直接将闭包解释为所述方法调用的最后一个参数,因此您得到的错误实际上表明不存在包含该闭包参数的初始化程序。

    此外,您的代码看起来很不正常,我不相信它是有效的 Swift。你想完成什么?

    根据我的怀疑,我认为您的代码应该类似于以下内容:

    class OtherOrb: SKSpriteNode {
    
        init() {
    
            let texture = SKTexture(imageNamed: "Orb")
            super.init(texture: texture, color: UIColor.clear, size: texture.size())
    
            self.position = CGPoint(x: 0.0, y: 500.0)
            self.physicsBody = SKPhysicsBody(circleOfRadius: 20)
        }
    
        @available(*, unavailable)
        override init(texture: SKTexture?, color: UIColor, size: CGSize) {
            super.init(texture: texture, color: color, size: size)
        }
    
        @available(*, unavailable)
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    

    也就是说你想要一个没有参数的初始化器作为你指定的初始化器。

    【讨论】:

    • 谢谢你,雅各布。你能解释一下“@available”部分吗?在 Stack Overflow 上的任何示例或问题中,我从未见过这样的事情。
    • 当然,通过将方法标记为不可用,如果您尝试使用它,编译器会报错。此外,它不会被 Xcode 自动完成索引,所以它只是让开发体验更好一点。这完全是可选的,不是必须的,只是我个人的喜好。 :)
    • 使所需的初始化不可用不是一个好主意,“必需”的存在是有原因的,哈哈
    • 在大多数情况下我会同意,但要考虑这个特定场景的上下文。如果初始化程序被调用,应用程序将终止。 coder init 通常由 IB 或 NSKeyedArchiver 调用。鉴于此处均未使用它们,因此使该方法不可用是相当安全的。
    猜你喜欢
    • 2021-09-13
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多