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

在Swift中必须在类,结构和枚举之间进行选择时,我应该怎么推理?

戴化
2023-03-14
问题内容

由于类,结构和枚举都具有构造函数,属性和计算属性,因此在它们之间进行选择时应如何推理?


问题答案:

ChristopheD和Jack
Jack的回答很好,但是我觉得他们没有触及枚举,或者错过了它们的重要性。Swift枚举(即将)是代数数据类型的完整实现。传统上,类和结构用于以面向对象的语言对数据进行建模,但是枚举通常仅限于用作将变量的值限制为有限可能性的便捷方法。例如(C
++):

enum MaritalStatus { Unmarried, Married, Divorced, WidowedOrWidowered };
MaritalStatus m = Unmarried;

Swift枚举可以完成上述任务,但可以做更多的事情。当然,《语言指南》中有一个非常不错的条形码建模示例,但是我所知道的最好的示例确实推动了使用代数数据类型进行数据建模的观点是Scott
Wlaschin的演示文稿:http ://www.slideshare.net/ScottWlaschin/ddd -with-
fsharptypesystemlondonndc2013

您可能会从整个演示文稿中受益,但实际上要“理解”要点,就是幻灯片60,其中他展示了如何在典型的业务应用程序中建模“付款方式”。

在演示文稿中的例子是F#中,但F#是不是 那个 遥远的斯威夫特,你可以在它们之间很容易映射。例如,Swift中的付款方式枚举如下所示:

enum PaymentMethod {
    case cash // No extra data needed.
    case cheque(Int) // Cheque #.
    case card(CardType, CardNumber) // 2 pieces of extra data.
}

上面的要点是,每个订单的付款方式只能是以上三种方式之一。编译器将不允许任何其他操作。这是构建整个类层次结构以对这些几乎琐碎的事物进行建模的非常简洁的替代方法。

演示实际上是从那里开始的,最好的部分是Swift可以执行F#在数据建模,使用可选类型等方面几乎可以完成的所有工作。



 类似资料:
  • 当我在Exception中使用transaction时,我使用@Transactional(rollbackFor=Exception.class)。

  • 问题内容: 我在这里找到执行跟踪任务的最惯用的方法。 任务 : 将数据从通道写入文件。 问题 : 我有一个频道 我需要从通道读取并将从通道读取的值写入文件。我的问题基本上是鉴于 如果通道已满,请立即写入值 如果通道未满,则每5s写一次。 因此,从本质上讲,至少需要每5s将数据写入文件一次(假设至少每5s将数据填充到通道中一次) 请告诉我用最好的方式,并做到我上面的任务吗? 谢谢! 问题答案: 没有

  • 我有这个枚举(我使用的是TypeScript): 我想在我的表单中构建一个select,每个选项的值为enum整数值,标签为enum文本,如下所示: 我该怎么做?

  • 问题内容: 我不确定两者中哪个最好定义常量。结构或枚举。每次我使用或不使用结构都会被复制吗?当我想到带有常量的结构时,我认为它会一直复制是没有意义的。但是,如果它不会被复制,那我拿走什么都没关系? 选择结构或枚举有什么优势? 问题答案: 结构和枚举均起作用。例如,两者 和 工作并定义静态属性。 回复:每次我使用与否,都会复制一个结构吗? 这两个和是值类型,以便将适用于枚举为好。但这 无关紧要 ,因

  • 谁能解释一下 和 我经常使用前一个示例(可能太频繁了,没有足够的封装),但我从未使用过第二个示例。 谢啦 枚举

  • 问题内容: Enumeration <有区别吗?扩展ZipEntry>和Enumeration ?如果是这样,有什么区别? 问题答案: 拥有其中一种后,您在做什么上没有实际差异,因为type参数仅在“输出”位置使用。另一方面,在您可以 用作 其中一个的方面有很大的不同。 假设您有一个-您无法将其传递给作为其参数之一的方法。您 可以 将其传递给采用方法。 当您有一个在输入和输出位置都使用type参数