关于枚举和初始化它们我有点困惑。
下面是代码:enum WaveType {
case close
case far
}
class WaveNode: SKNode {
...
}
func addWave() -> WaveNode {
let wave = WaveNode()
...
return wave
}
var waves = [WaveType: WaveNode]()
waves[.far] = addWave()
var durations = [WaveType: TimeInterval]()
durations[.far] = 4
这里的"波"是什么?它是'WaveType' Enum的数组/字典吗?如果有,请解释一下waves[.far] = addWave()
和durations[.far] = 4
。为什么我认为应该是waves = [.far : addWave()]
或durations = [.far : 4]
之类的东西
如果太明显了,我很抱歉,谢谢。
我们在评论中讨论的内容:
我个人会把字典改成数组。如前所述:
下面是你的代码从Dictionary迁移到Array后的样子:现在,因为你正在使用字典,你所构建的只能处理2个波:一个近波,一个远波。我在想你可能想要两波以上的波浪?也许是5个紧密的波?
enum WaveType { case close, far }
class WaveNode: SKNode {}
func addWave() -> WaveNode {}
// I have taken the initiative to group these up into a tuple:
var waves = [(waveType: WaveType, waveNode: WaveNode, duration: TimeInterval)]()
// Here's what adding a wave to the list would look like:
waves.append((waveType: .far, waveNode: addWave(...), duration: 4))
// Here's an alternate but identical way to add a wave to your array:
waves += [(
waveType: .far,
waveNode: addWave(...),
duration: 4
)]
但是,当你说:
时,这感觉有点笨拙。想知道如何使
addWave
功能更短?因为它[有很多参数]
具体说明这些参数:
- 位置:CGPoint
- zPosition: CGFloat
- xScale: CGFloat
- 方向:WaveDirection
我认为可以缩短,我建议分三步完成。
步骤1让我们编辑你的WaveNode
类,以包含2个新属性:waveType
和duration
。就像位置、zPosition、xScale和方向都是WaveNode
的属性一样。
class WaveNode: SKNode {
// include these, as well as some default value
var duration: TimeInterval = 0
var waveType = .far
}
步骤2接下来,我们将编辑您的addWave()
方法。我用两种方式编辑过:
- 我在每个参数标签前添加了下划线
_
,以减少调用方法时的长度。 - 我添加
waveType
和duration
作为参数到您的方法,如下所示:
func addWave(_ position: CGPoint,_ zPosition: CGFloat,_ xScale: CGFloat,_ direction: WaveDirection,_ waveType: WaveType,_ duration: TimeInterval) -> WaveNode {
let wave = WaveNode()
// Keep all code that was in between
// Just add these 2 lines above the return line
wave.waveType = waveType
wave.duration = duration
return wave
}
步骤3将waveType
和duration
作为属性添加到WaveNode
,让我们不必再使用元组数组了。相反,它看起来像这样:
var waves = [WaveNode]()
// And adding waves will be easy and much shorter:
waves.append(waveNode(...))
如果你想用更短的方式重写这个,我很乐意帮忙。让我知道你的想法。