快速切换时在两个变量之间来回切换的最佳方式
问题描述:
我有一个变量gameMode,我想在每次点击屏幕时在垂直和水平之间切换。我遇到的问题是只需要较低的变量,并且gameMode总是显示为水平。我该如何解决这个问题,以便在调用touchesBegan方法时进行切换?任何帮助表示赞赏!快速切换时在两个变量之间来回切换的最佳方式
这里是我有问题的代码:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if gameMode == "Horizontal" {
gameMode = "Vertical"
}
if gameMode == "Vertical" {
gameMode = "Horizontal"
}
print(gameMode) }
答
这是因为,如果gameMode
是"Horizontal"
,你设置gameMode
到"Vertical"
这gameMode == "Vertical"
回报true
后,让你设置gameMode
到"Horizontal"
。
试试这个代码:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if gameMode == "Horizontal" {
gameMode = "Vertical"
} else {
gameMode = "Horizontal"
}
print(gameMode)
}
您应该使用enum
而不是字符串。
实施例:
enum GameMode {
case horizontal
case vertical
mutating func toggle() {
self = self == .horizontal ? .vertical : .horizontal
}
}
var gameMode: GameMode = .horizontal
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
gameMode.toggle()
print(gameMode)
}
+0
为方便起见,您也可以在该枚举上做一个变异的func toggle()。 – Simon
答
可以与三元运算
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
gameMode = gameMode == "Horizontal" ? "Vertical" : "Horizontal"
print(gameMode)
}
切换两种状态只有两种状态可能是布尔变量比较适合。如果gameMode
是Bool
可以简单的写
gameMode = !gameMode
答
我将取代
if gameMode == "Horizontal" {
gameMode = "Vertical"
}
if gameMode == "Vertical" {
gameMode = "Horizontal"
}
与
if gameMode == "Horizontal" {
gameMode = "Vertical"
} else {
gameMode = "Horizontal"
}
有两个如果成一排,语句当您发送 “水平” 为,该值会将其切换到“垂直”。这也将使第二个声明起作用并将其切回。使用if/else将确保它只运行一次。
这可能是你要找的内容https://developer.apple.com/library/content/documentation/General/Conceptual/GameplayKit_Guide/StateMachine.html#//apple_ref/doc/uid/TP40015172-CH7- SW1 – 0x141E