【发布时间】:2018-06-04 10:11:27
【问题描述】:
在 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 中只有两个值,所以没问题。但是对于前一个,我希望字典中的数组是动态更新的。任何关于如何实现这一目标的指示都会非常有帮助。
【问题讨论】:
-
确保在尝试追加元素之前使用空数组初始化
extentOfnodesAddedInScene[node]。它可能为零。 -
抱歉,它是extendOfNodes ...我已经将它初始化为空字典。你的意思是我应该在其中初始化 vector_float3 的数组吗?如:var extentOfnodesAddedInScene: [SCNNode: [vector_float3]] = [:[]] ?这不起作用。
-
我说用空数组初始化密钥
node -
再次道歉,如果我很痛苦。我理解将空字典初始化为 [:]。我确实理解将空字典初始化为 [[key: value]]()。但是,这是一个数组字典,而不是相反。我不确定如何以不同于代码中当前的方式初始化它。
-
试试
extentOfnodesAddedInScene[node, default: []]?.append(planeAnchor.center)
标签: arrays swift dictionary arkit