枚举可以包含类列表吗?
我有一个父类(super class) Activity:SKScene { },它有子私有(private)类 Activity01:Activity { },子私有(private)类 Activity02:Activity { } 和一个子私有(private)类 Activity03:Activity { }。 每个子私有(private)类(class)都包含一个定时事件。当计时器在用户解决事件之前用完时,会弹出一个 GameOver 场景(类 GameOver: Activity { })(带有文本“Bad luck try again”)。
我正在尝试在 GameOver 类中创建一个枚举,以在触摸开始时触发,使用户返回到他们的上一个事件,但我无法解决这个问题。点击时它总是返回到 Activity01。
这是我的尝试:
…} // Activity03 sub-private class closure
class GameOver: Activity {
enum classes {
case Activity01
case Activity02
case Activity03
}
var firstClass = classes.Activity01
var secondClass = classes.Activity02
var thirdClass = classes.Activity03
let restartGameText = SKLabelNode(fontNamed: "AvenirNext-HeavyItalic")
init(size: CGSize, won:Bool) {
super.init(size: size)
startGameText.removeFromParent()
restartGameText.text = "Bad luck try again"
restartGameText.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.center
restartGameText.verticalAlignmentMode = SKLabelVerticalAlignmentMode.center
restartGameText.fontSize = 60
restartGameText.fontColor = SKColor(red: 230/255, green: 60/255, blue: 70/255, alpha: 1)
restartGameText.position = CGPoint(x: scene!.size.width/2.0, y: scene!.size.height/2.0)
restartGameText.zPosition = 5
addChild(restartGameText)
let pulseAction = SKAction.sequence([SKAction.fadeAlpha(to: 1, duration: 1), SKAction.fadeAlpha(to: 0.7, duration: 1)])
restartGameText.run(SKAction.repeatForever(pulseAction))
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if firstClass == classes.Activity01 {
let transition = SKTransition.fade(withDuration: 2.0)
let activity01 = Activity01(size: size)
view?.presentScene(activity01, transition: transition)
} else if secondClass == classes.Activity02 {
let transition = SKTransition.fade(withDuration: 2.0)
let activity02 = Activity02(size: size)
view?.presentScene(activity02, transition: transition)
} else if thirdClass == classes.Activity03 {
let transition = SKTransition.fade(withDuration: 2.0)
let activity03 = Activity03(size: size)
view?.presentScene(activity03, transition: transition)
}
}
} //GameOver class closure
} // Activity Superclass closure
如果 Activity02 或 Activity03 是最后一个事件,是否有办法返回到它们?
最佳答案
下面的枚举声明非常好。但是这里没有枚举类型作为类。它只是一个没有任何类型的枚举,这在 Swift 中是允许的。
enum classes {
case Activity01
case Activity02
case Activity03
}
仅供引用 Enum来自 Apple 的“The Swift Programming Language”:
Swift enumeration cases don’t have an integer value set by default, unlike languages like C and Objective-C.....Instead, the different enumeration cases are values in their own right.
总是得到 Activity01
的原因是,您在代码中将 firstClass
分配为 Activity01
等等。
var firstClass = classes.Activity01
var secondClass = classes.Activity02
var thirdClass = classes.Activity03
因此,当 firstClass
与 touchesBegan
方法中的 classes.Activity01
进行比较时,它总是匹配的。这就是您始终获得“Activity01
”的原因。
你应该有实例成员来跟踪 enum classes
类型的 lastClass
并且它应该与 classes.Activity01/02/03
进行比较在 touchesBegan
方法中,而不是将其与 firstClass
和 classes.Activity01
等进行比较。应该是这样的。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if lastClass == classes.Activity01 {
let transition = SKTransition.fade(withDuration: 2.0)
let activity01 = Activity01(size: size)
view?.presentScene(activity01, transition: transition)
} else if lastClass == classes.Activity02 {
let transition = SKTransition.fade(withDuration: 2.0)
let activity02 = Activity02(size: size)
view?.presentScene(activity02, transition: transition)
} else if lastClass == classes.Activity03 {
let transition = SKTransition.fade(withDuration: 2.0)
let activity03 = Activity03(size: size)
view?.presentScene(activity03, transition: transition)
}
}
这样即使是Activity 02/03也能正确显示上一个Activity类。
关于swift - 枚举案例可以包含类列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55998229/