当前位置: 首页 > 面试题库 >

Swift常数:结构或枚举

姚乐家
2023-03-14
问题内容

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

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


问题答案:

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

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


 类似资料:
  • 问题内容: 我在Swift 2.0的几个函数中遇到了这个问题,想知道是否有解决方法。现在似乎无法在Swift 2.0中不指定枚举参数。例如,这两种方法似乎需要除传递之外的其他东西,或者可以传递这些东西。有没有解决的办法? 问题答案: 现在将选项指定为一个集合,因此只需传递一个空集合:即可。

  • Swift 4提供了一个灵活的构建块,它使用构造作为结构体。 通过利用这些结构,可以定义构造方法和属性。 与C语言和Objective C不同 结构体不需要实现文件和接口。 结构体允许创建单个文件并将接口自动扩展到其他块。 在结构体中,通过返回旧值的副本来复制变量值并在后续代码中传递,以便不能更改这些值。 语法 定义结构体 例如,假设必须访问包含三个科目分数的学生记录,并计算出三个科目的总分数。

  • Swift 结构体是构建代码所用的一种通用且灵活的构造体。 我们可以为结构体定义属性(常量、变量)和添加方法,从而扩展结构体的功能。 与 C 和 Objective C 不同的是: 结构体不需要包含实现文件和接口。 结构体允许我们创建一个单一文件,且系统会自动生成面向其它代码的外部接口。 结构体总是通过被复制的方式在代码中传递,因此它的值是不可修改的。 语法 我们通过关键字 struct 来定义结

  • 我目前使用的日志记录系统使用一个标记值来标识它将存储的参数。我们正在使用的格式如下:标签+时间+值。 不要忘记结构的每个字段可能具有不同的类型。

  • 枚举是用户定义的数据类型,由一组相关值组成。 关键字用于定义枚举数据类型。 枚举功能 Swift 4中的枚举也类似于C语言和Objective C的结构。 它在类中声明,并且通过该类的实例访问其值。 使用枚举初始化器定义初始成员值。 通过确保标准协议功能,还可以扩展其功能。 语法 使用关键字引入枚举,并将其整个定义放在一对括号中 - 例如,可以按如下方式定义星期几的枚举 - 示例代码 当使用pla

  • 枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。 Swift 的枚举类似于 Objective C 和 C 的结构,枚举的功能为: 它声明在类中,可以通过实例化类来访问它的值。 枚举也可以定义构造函数(initializers)来提供一个初始成员值;可以在原始的实现基础上扩展它们的功能。 可以遵守协议(protocols)来提供标准的功能。