对使用 class 或结构作为静态变量的容器感到困惑 (Swift)

Confused by the usage of a class or a struct as container for static variables (Swift)

在我的应用程序中,我目前使用单独的 class 来存储一堆我想随时随地访问的静态变量。

class Sounds {
    static var soundInitial : Sound!
    static var soundThunder : Sound!
    static var soundWind    : Sound!
    // etc... (about 50 more)
}

这个Soundsclass从未被用作实例,而是作为所有音效的容器(属于Sound - 这是一个单独的 class)

我在 viewDidLoad 期间从主视图控制器初始化所有音效:

let urlPath1 = Bundle.main.url(forResource: "art.scnassets/sounds/my_sound_file", withExtension: "mp3")
Sounds.soundInitial = Sound(url: urlPath1!, volume: 1.0)
// etc...

然后我可以在任何给定时间使用它,就像这样:

Sounds.soundInitial.play(numberOfLoops: -1) // endless looping

我作为一个还不是很有经验的程序员的非常基本的问题:

是否有更通用的方法或更好的方法将我所有的声音变量集中存储在一起? (我不想在 View Controller 中定义它们,因为这会给我太多变量...)

我发现,我可以使用 struct 来达到相同的目的。但这是更好的方法吗?

Swift 中是否有专门为此目的设计的容器对象

您正在做的是将全局常量聚集到一个命名空间中。

Is there a special Container Object in Swift designed for such purposes?

是的,无大小写枚举是执行此操作的常规方法,因为它是最轻量级的并且不会被意外实例化;它是“纯”命名空间。

如果您观看一些 Apple 视频,您会发现他们就是这样做的。就个人而言,我曾经推荐一个结构,但由于给定的原因我已经改用枚举。