我试图允许玩家从UIViewController中选择一个皮肤,而不是在调用精灵时加载它们所选择的皮肤。
ball.swift
var skin : Skins!
init(ballName name : String?, ballColor color : UIColor, ballMass mass : CGFloat, ballPosition pos : CGPoint) {
if skin.dogSkin == true{
super.init(texture: SKTexture(imageNamed: "doge"), color: color, size: CGSize(width: radius * 2, height: radius * 2))
print("was called here too")
}
else{
super.init(texture: SKTexture(imageNamed: "circle"), color: color, size: CGSize(width: radius * 2, height: radius * 2))
}
Skins.swift
var dogSkin = false
@IBAction func backbutton(sender: AnyObject) {
}
@IBAction func dogPressed(sender: AnyObject) {
dogSkin = true
print("I hit it")
}
现在出现致命错误:在展开可选值时意外发现nil,当触发if语句时,不能使用保护语句。
将其更改为
var skin = Skins()
工作 - 不会崩溃。但这不会创建一个新的皮肤实例吗?让BOOL再次出错?
虽然在控制台中获取此信息?和皮肤不会改变。
<xxxx.Skins: 0x7fa59d825b30>
<xxxx.Skins: 0x7fa59d828500>
<xxxx.Skins: 0x7fa59d82a7a0>
<xxxx.Skins: 0x7fa59d82c970>
<xxxx.Skins: 0x7fa59d82e960>
<xxxx.Skinss: 0x7fa59d90d7b0>
<xxxx.Skins: 0x7fa59d90ffb0>
<xxxx.Skins: 0x7fa59d912000>
<xxxx.Skins: 0x7fa59d914060>
...
答案 0 :(得分:2)
您使变量外观成为隐式展开的可选变量。这意味着无论何时引用它,它都会假定变量包含有效值,如果不包含则会崩溃。
在尝试引用皮肤之前,您不会为皮肤指定值,因此会崩溃。
忘了你在Swift编程的头两个月里就知道强制解包操作符!
。对于新手来说,它是崩溃操作员。