为什么我不能将我的组件添加到 GKComponentSystem?

Why can't I add my component to a GKComponentSystem?

我的代码:

bunnyE = MyEntity()
var wsc : WrappableSpriteComponent = WrappableSpriteComponent()
wsc.setSprite(sprite: bunny!)
bunnyE?.addComponent(wsc)
wrappableComponentSystem = GKComponentSystem<WrappableSpriteComponent>()
wrappableComponentSystem!.addComponent(foundIn: bunnyE!)

self.lastUpdateTime = 0 //Break point here

当我单步执行我的代码到断点时,我发现在 Xcode 中如果我执行命令:

po bunnyE?.components 

然后可以看到bunnyE里面有我添加的组件

但如果我这样做:

 po self.wrappableComponentSystem?.components

那么wrappableComponentSystem好像没有组件。

我检查了我的场景更新功能,发现了相同的结果:

override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered

    // Initialize _lastUpdateTime if it has not already been
    if (self.lastUpdateTime == 0) {
        self.lastUpdateTime = currentTime
    }

    // Calculate time since last update
    let dt = currentTime - self.lastUpdateTime

    // Update entities
    for entity in self.entities {
        entity.update(deltaTime: dt)
    }

    self.lastUpdateTime = currentTime
    self.wrappableComponentSystem?.update(deltaTime: currentTime) // Breakpoint
}

同样在这个断点处,我可以看到我的 bunnyE 实体有组件,但我的 wrappableComponentSystem 没有。 我已验证我的 wrappableComponentSystem 不为零。

我用的是swift5, Xcode 11.4, iOS 13.4

我犯了什么错误?

我发现这一行有问题:

wrappableComponentSystem = GKComponentSystem<WrappableSpriteComponent>()

如果我把它改成:

wrappableComponentSystem = GKComponentSystem(componentClass: WrappableSpriteComponent.self)

然后在同一块中,当我添加组件并执行 po wrappableComponentSystem 时,我可以看到已添加单个元素。

问题是,当我的场景的更新方法被触发时,我的 wrappableComponentSystem 似乎不再包含任何组件。

然后我将 class 中的声明行从:

更改为
private var wrappableComponentSystem : GKComponentSystem<WrappableSpriteComponent>?

其中WrappableSpriteComponent继承自GKComponent,为:

private var wrappableComponentSystem : GKComponentSystem<GKComponent>?

现在当我添加一个组件时,它仍然存在。