允许用户在if语句中选择Player Skin Found nil

时间:2016-07-08 23:43:32

标签: ios swift sprite-kit

我试图允许玩家从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>

...

1 个答案:

答案 0 :(得分:2)

您使变量外观成为隐式展开的可选变量。这意味着无论何时引用它,它都会假定变量包含有效值,如果不包含则会崩溃。

在尝试引用皮肤之前,您不会为皮肤指定值,因此会崩溃。

忘了你在Swift编程的头两个月里就知道强制解包操作符!。对于新手来说,它是崩溃操作员。