一尘不染

Swift常数:结构或枚举

swift

我不确定两者中哪个最好定义常量。结构或枚举。每次我使用或不使用结构都会被复制吗?当我想到带有static let常量的结构时,我认为它会一直复制是没有意义的。但是,如果它不会被复制,那我拿走什么都没关系?

选择结构或枚举有什么优势?


阅读 267

收藏
2020-07-07

共1个答案

一尘不染

结构和枚举均起作用。例如,两者

struct PhysicalConstants {
    static let speedOfLight = 299_792_458
    // ...
}

enum PhysicalConstants {
    static let speedOfLight = 299_792_458
    // ...
}

工作并定义静态属性PhysicalConstants.speedOfLight

回复:每次我使用与否,都会复制一个结构吗?

这两个structenum是值类型,以便将适用于枚举为好。但这 无关紧要 ,因为您根本不必创建值:静态属性(也称为 类型
属性)是类型本身的属性,而不是该类型的实例。

回复:选择结构或枚举有什么优势?

链接文章所述

使用不区分大小写的枚举的优点是它不会被意外实例化并且可以用作纯名称空间。

所以对于一个结构,

let foo = PhysicalConstants()

创建一个类型的(无用)值PhysicalConstants,但是对于一个不区分大小写的枚举,它将无法编译:

let foo = PhysicalConstants()
// error: 'PhysicalConstants' cannot be constructed because it has no accessible initializers
2020-07-07