不能在 inout 函数中使用 SKShapeNode

Can't use SKShapeNode in inout function

所以,就像我的 SKSpriteNode 一样,我正在尝试创建一个函数来使我成为默认物理体。

这是我创建的 DefaultBody.swift

import Foundation
import SpriteKit

enum Type {
    case rectangle
    case circle
}

// Create new default physics body
func createPhysicsBodySprite(for body: inout SKSpriteNode, type: Type) {

    // Create new physics body
    switch type {
    case .rectangle:
        body.physicsBody = SKPhysicsBody(edgeLoopFrom: body.frame)
    case .circle:
        body.physicsBody = SKPhysicsBody(circleOfRadius: body.frame.width / 2)
    }
    body.physicsBody?.isDynamic = false
    body.physicsBody?.allowsRotation = false
    body.physicsBody?.pinned = false
    body.physicsBody?.affectedByGravity = false
    body.physicsBody?.friction = 0
    body.physicsBody?.restitution = 0
    body.physicsBody?.linearDamping = 0
    body.physicsBody?.angularDamping = 0

}

func createPhysicsBodyShape(for body: inout SKShapeNode, type: Type) {

    // Create new physics body
    switch type {
    case .rectangle:
        body.physicsBody = SKPhysicsBody(edgeLoopFrom: body.frame)
    case .circle:
        body.physicsBody = SKPhysicsBody(circleOfRadius: body.frame.width / 2)
    }
    body.physicsBody?.isDynamic = false
    body.physicsBody?.allowsRotation = false
    body.physicsBody?.pinned = false
    body.physicsBody?.affectedByGravity = false
    body.physicsBody?.friction = 0
    body.physicsBody?.restitution = 0
    body.physicsBody?.linearDamping = 0
    body.physicsBody?.angularDamping = 0

}

这里我可以轻松调用精灵版:

然而,虽然我可以用 SKSpriteNode 做到这一点,但我的 SKShapeNode 函数不起作用,因为我得到这个错误:

这不起作用,所以如果我去掉函数中的 inout 并将其添加为 return,它现在可以工作(使用上图中注释掉的调用)

这有什么原因吗,我如何使用 inout 而不是 returning SKShapeNode

注:一个PhysicsBody可以设置为一个SKShapeNode

两者都是 var 而不是此处显示的 let,因此 应该 是可变的:

首先,要传递一个inout参数,你必须添加&:

createPhyscisBodyShape(for: &topBar, type: .rectangle)

您使用 &ball 完成了此操作。我不知道你为什么第二次忘记了&

无论如何,首先您不需要 inoutSKSpriteNodeSKShapeNode 是 类。这意味着只要您不使用赋值语句将 body 设置为其他内容,您对 body 所做的更改将反映在您传递的参数中。

删除输入输出,它应该可以正常工作。

将值传递给 inout params 的函数,我们应该使用 &

createPhyscisBodyShape(用于:&topBar,类型:.rectangle)

检查这个 link https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID545