一尘不染

每次将值附加为数组的字典,保持空白

swift

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

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 nodesAddedInScene: [SCNNode: [vector_float3]] = [:]我在用整个数组同时更新时声明和初始化的另一种类似的var 可以正常工作。

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

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


阅读 180

收藏
2020-07-07

共1个答案

一尘不染

您可以使用具有默认值的基于Swift
4字典键的下标将您的数组初始化为一个空数组,以便即使在其键上还没有定义值时也可以追加到该数组。只要确保您的字典值类型是一个数组即可[SCNNode: [vector_float3]]

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