Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-如何使用枚举字典初始化变量?_Swift_Dictionary_Enums_Initialization - Fatal编程技术网

Swift-如何使用枚举字典初始化变量?

Swift-如何使用枚举字典初始化变量?,swift,dictionary,enums,initialization,Swift,Dictionary,Enums,Initialization,我在这里对枚举和初始化它们有点困惑 代码如下: enum WaveType { case close case far } class WaveNode: SKNode { ... } func addWave() -> WaveNode { let wave = WaveNode() ... return wave } var waves = [WaveType: WaveNode]() waves[.far] = addWave(

我在这里对枚举和初始化它们有点困惑

代码如下:

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”枚举的数组/字典吗?如果是这样的话,请你解释一下波浪[.far]=addWave和持续时间[.far]=4好吗?为什么我认为它应该像waves=[.far:addWave]或durations=[.far:4]

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

我们在评论中讨论的内容: 就我个人而言,我会将字典更改为数组。正如我以前所说:


现在,由于您使用的是字典,您所构建的只能处理两种波:一种是近波,另一种是远波。我想你可能想要两个以上的波浪?也许是5个近距离的波浪

以下是从字典迁移到数组后代码的外观:

枚举波类型{case close,far} 类WaveNode:SKNode{} func addWave->WaveNode{} //我已主动将这些元素组合成一个元组: var waves=[waveType:waveType,waveNode:waveNode,持续时间:时间间隔] //下面是将波浪添加到列表中的效果: waves.appendwaveType:。远,waveNode:addWave…,持续时间:4 //这里有一种替代但相同的方法可以向阵列中添加波浪: 波浪+=[ 波型:,远, waveNode:addWave。。。, 持续时间:4 ] 不过,正如你所说,这感觉有点笨拙:

想知道如何使addWave函数变短吗?因为它[有很多参数]

具体而言,您可以声明以下参数:

位置:CGPoint zPosition:CGFloat xScale:CGFloat 方向:波方向 我认为可以缩短,我建议可以分三步完成

第一步 让我们编辑WaveNode类以包含两个新属性:waveType和duration。正如position、zPosition、xScale和direction都是WaveNode的属性一样

类WaveNode:SKNode{ //包括这些,以及一些默认值 变量持续时间:时间间隔=0 var waveType=.far } 步骤2 接下来,我们将编辑addWave方法。我以两种方式对其进行了编辑:

我在每个参数标记前面添加了下划线。 我在方法中添加了waveType和duration作为参数,如下所示: func addWave_uuu位置:CGPoint,z位置:CGFloat,xScale:CGFloat,uux方向:WaveDirection,uuwavetype:waveType,uuu持续时间:时间间隔->WaveNode{ 让波=波节点 //保留中间的所有代码 //只需在返回线上方添加这两条线 wave.waveType=waveType wave.duration=持续时间 返回波 } 步骤3 将waveType和duration作为属性添加到WaveNode中,使我们不再需要使用元组数组。相反,它将如下所示:

var waves=[WaveNode] //添加波浪将变得简单且短得多: waves.appendwaveNode。。。
如果你想用更短的方式来重写,我很乐意。让我知道你的想法。

挥动[远]=。。。。为现有字典的key WaveType.far指定一个值。在您的情况下,此作业之前字典是空的。持续时间[.far]=4时相同。waves=[.far:addWave]使用单个键值对初始化字典。最终的结果是sameThank you@NewDev现在有了意义。要明确的是,如果我们想让waves字典有2个键值对,我们该怎么做?这是正确的waves=[.close:addWave,.far:addWave]?是的,这是正确的。现在,由于您使用的是字典,您所构建的只能处理两个wave:一个close wave和一个far wave。我想你可能想要两个以上的波浪?也许是5个近距离的波浪?您可以不这样做,但如果这样做,您可以尝试:var waves=[waveType:waveType,waveNode:waveNode,duration:TimeInterval]这是一个数组或所有现有wave的列表,您将不限于使用2。我使用了一个元组,这样您就不需要像使用var waves和var durations那样需要多个值。您不会喜欢KeyValuePairs。阵列要好得多。让我知道你的想法。非常感谢@0-1,这样我可以在以后制造更多的波浪。想知道如何使addWave函数变短吗?因为它是func addWaveat位置:CGPoint,zPosition:CGFloat,xScale:CGFloat,direction:WaveDirection->WaveNode。在元组中这样使用它不太可读。谢谢你@0-1,谢谢你的详细解释。现在干净多了:干杯