作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让玩家从 UIViewController 选择皮肤,而不是在调用 sprite 时加载他们选择的皮肤。
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")
现在出现 fatal error :在展开可选值时意外发现 nil,当 if 语句被触发时,不能对其使用保护语句。
改为
var skin = Skins()
有效——不会崩溃。但这不会创建一个新的 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>
...
最佳答案
您使变量 skin 成为隐式展开的可选变量。这意味着无论何时您引用它,它都会假定该变量包含有效值,如果不包含则崩溃。
在尝试引用皮肤之前没有给皮肤赋值,所以会崩溃。
在你使用 Swift 编程的前 2 个月,忘记你曾经知道的 force-unwrap 运算符 !
。对于新手,它是崩溃运算符。
关于ios - 允许用户在 if 语句中选择 Player Skin Found nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38276847/
我是一名优秀的程序员,十分优秀!