一次添加一个值作为数组的字典保持为空
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)
在 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)