ios - 不能在 inout 函数中使用 SKShapeNode

标签 ios swift return skshapenode inout

因此,就像我的 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

}

在这里我可以轻松调用 Sprite 版本:

enter image description here

但是,虽然我可以使用 SKSpriteNode 来做到这一点,但我的 SKShapeNode 函数不起作用,因为我收到此错误:

enter image description here

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

这有什么原因吗?如何使用 inout 而不是返回 SKShapeNode

注意: PhysicsBody 可以设置为 SKShapeNode

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

enter image description here

最佳答案

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

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

你用 &ball 做到了这一点。我想知道你为什么第二次忘记了 &

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

移除 inout,它应该可以正常工作。

关于ios - 不能在 inout 函数中使用 SKShapeNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50105732/

相关文章:

ios - Segue 没有被转入(swift 3)

C++ - 返回不同的变量类型

java - 如何在返回方法的循环内返回值?

IOS 为什么单元测试一个类调用 ViewController

iOS-通知中心addObserver "UIMenuControllerWillHideMenu"

ios - 将字符串转换为 `dd MMM yyy`格式的日期

Javascript 回调或返回字符串

objective-c - 旧版本 iOS 和 OS X 上的 ARC

ios - 使用完 NSString *objects 后是否必须释放它?

ios - 如何更新tableView中的数据?