一次添加一个值作为数组的字典保持为空

Dictionary with values as array on appending one at a time, remains empty

在 ARKit 中,我想做的是收集场景中节点的一堆位置,然后将它们平均化,这样节点移动就不会像使用 ARKit 时那样抖动。因此,我有一个变量声明并初始化为字典,其值为 vector_float3 的数组。 (我认为这更像是 Swift 问题而不是 ARKit 问题,是吗?)

var extentOfnodesAddedInScene: [SCNNode: [vector_float3]] = [:] 

这与 SceneKit/ARKit 有关。在不断检测和更新水平面的渲染器函数中,我想在其中附加 vector_float3 的数组。

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
    guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
    ...
    extentOfnodesAddedInScene[node]?.append(planeAnchor.center)

但是在打印出来时,我得到了一个空字典,即 [:]

另一种类似的 var var nodesAddedInScene: [SCNNode: [vector_float3]] = [:],我在更新整个数组时声明并初始化了它,它工作正常。

nodesAddedInScene[node] = [planeAnchor.center, planeAnchor.extent]

因为在最后一个var中只有两个值,没关系。但是对于前者,我希望字典中的数组是一个动态更新的数组。任何关于如何实现这一目标的指示都会非常有帮助。

您可以使用 Swift 4 Dictionary Key-based subscript with default value 来使用空数组初始化您的数组,以便能够追加到它,即使它的键还没有定义值。只需确保您的字典值类型是数组 [SCNNode: [vector_float3]]:

extentOfnodesAddedInScene[node, default: []].append(planeAnchor.center)