Swift -如何初始化变量与Enum的字典?



关于枚举和初始化它们我有点困惑。

下面是代码:
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]之类的东西

如果太明显了,我很抱歉,谢谢。

我们在评论中讨论的内容:

我个人会把字典改成数组。如前所述:

现在,因为你正在使用字典,你所构建的只能处理2个波:一个近波,一个远波。我在想你可能想要两波以上的波浪?也许是5个紧密的波?

下面是你的代码从Dictionary迁移到Array后的样子:
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个新属性:waveTypeduration。就像位置、zPosition、xScale和方向都是WaveNode的属性一样。

class WaveNode: SKNode {
// include these, as well as some default value
var duration: TimeInterval = 0
var waveType = .far
}
步骤2

接下来,我们将编辑您的addWave()方法。我用两种方式编辑过:

  1. 我在每个参数标签前添加了下划线_,以减少调用方法时的长度。
  2. 我添加waveTypeduration作为参数到您的方法,如下所示:
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

waveTypeduration作为属性添加到WaveNode,让我们不必再使用元组数组了。相反,它看起来像这样:

var waves = [WaveNode]()
// And adding waves will be easy and much shorter:
waves.append(waveNode(...))

如果你想用更短的方式重写这个,我很乐意帮忙。让我知道你的想法。

相关内容

  • 没有找到相关文章

最新更新