【发布时间】:2017-08-16 09:30:46
【问题描述】:
是的,这是另一个可选问题... :(
每次我认为我开始很好地掌握可选选项时,Xcode 都会向我抛出一个错误修复建议,用于展开。以下代码块使用了所有 Xcodes 错误修复。但我不认为这是这样做的正确方法。
var btAdd = [SKSpriteNode]()
var btLose = [SKSpriteNode]()
...
let touchedNodes = self.nodes(at: pos)
for node in touchedNodes{
if btAdd.contains((node as? SKSpriteNode)!) {
let index = Int(String(describing: node.name?[(node.name?.endIndex)!]))
node.isHidden = true
btLose[index!].isHidden = false
var dogTeam = defaults.array(forKey: "dogTeam") as! [Int]
dogTeam.append(index!)
defaults.set(dogTeam,forKey: "dogTeam")
}
}
我开始做...
if let node as? SKSpriteNode{
if btAdd.contains(node){
...
}
}
但我也不确定。
我正在寻找有关执行此代码块的绝对“正确”方法的一些指导。不仅是 .contains 部分,还有 index 和 UserDefaults 数组的展开。
【问题讨论】:
-
btAdd是什么类型的? -
[SKSpriteNode],坏名声,我知道。我将添加声明。 -
这很简单,如果您 100% 确定 optional 具有其基础值,那么您可以使用强制解包(由您自己负责),否则您应该安全地解包 optional(例如使用 if let 语法)。没有“正确的方法”,您有责任确定如何使用可选项。
标签: xcode swift3 sprite-kit optional