【发布时间】:2016-02-26 17:18:25
【问题描述】:
我对 Swift 比较陌生,还没有掌握可选的安全方面。
我有一本[String: [SCNNode]] 类型的字典。给定的分子将具有多个组件作为[SCNNode] 中的元素。对于那个分子,我检索这个组件数组并将每个元素分配给本地 SCNNode 以进行显示、操作和动画处理。
let components = moleculeDictionary["aceticAcid"] // the array of components
// [baseMolecule, hydrogenCharge, oxygenCharge, ionizingH, ionizedBond, bonds]
atomsNode_1 = components![0] // baseMolecule
baseNode.addChildNode(atomsNode_1)
atomsNode_5 = components![3] // ionizingH
atomsNode_1.addChildNode(atomsNode_5)
// etc.
在尝试选择性地绑定 this 时,编译器似乎对此很满意。
if let node = components?[0] { // baseMolecule
baseNode.addChildNode(node)
}
我不清楚?我对此的阅读表明我们正在以一种我们不在乎是否有零的方式展开包装。但这是否使这个可选绑定比上面的强制展开更好?或者这是“可选链接”?我是否应该在分配components 时只进行检查?我应该担心这里的安全吗?我所做的唯一“升级”测试是在将字典存档分配给moleculeDictionary 之前是否存在。
我将有数百个这样的任务,所以我想把它做好。欢迎就处理此问题的最佳方法提出建议!
谢谢,伯恩
【问题讨论】:
-
强制展开会使您的应用程序崩溃。可选地展开只是意味着代码不会运行。
-
意思是 ?是这里使用的“可选解包”吗?
-
是的。基本上,如果值可以解包,则将其绑定到变量并执行大括号中的代码。
-
变量而不是常量?所以你认为我上一个代码 sn-p 的方法是合理的吗?谢谢!编辑:糟糕,错过了您在下面的回复...