既然类、 struct 和枚举都有构造函数、属性和计算(computed)属性,我在 Select 它们时应该如何推理?
既然类、 struct 和枚举都有构造函数、属性和计算(computed)属性,我在 Select 它们时应该如何推理?
ChristopheD和Jack Wu的答案很好,但我觉得他们没有触及枚举,或者忽略了它们的重要性.Swift枚举是(意味着)代数数据类型的完整实现.在面向对象的语言中,类和 struct 传统上用于为数据建模,但枚举通常仅限于作为一种方便的方式,将变量的值限制在有限的可能性范围内.例如(C++):
enum MaritalStatus { Unmarried, Married, Divorced, WidowedOrWidowered };
MaritalStatus m = Unmarried;
Swift Enum可以做到以上几点,但可以做得更多.当然,《语言指南》有一个非常好的barcode modelling example个,但我所知道的用代数数据类型建模数据的最好例子是Scott Wlaschin的演示:http://www.slideshare.net/ScottWlaschin/ddd-with-fsharptypesystemlondonndc2013
你可能会从整个演示中受益,但要真正"理解"这一点,你需要看到的是幻灯片60,其中他展示了如何在典型的业务线应用程序中模拟"支付方法".
演示中的例子都是F#的,但F#离Swift不远,你可以很容易地在它们之间绘制 map .例如,Swift中的付款方式枚举如下所示:
enum PaymentMethod {
case cash // No extra data needed.
case cheque(Int) // Cheque #.
case card(CardType, CardNumber) // 2 pieces of extra data.
}
上述要点是,每个订单的付款方式只能是上述三种方式中的一种.编译器将不允许任何其他操作.这是一个非常简洁的替代方案,可以用来构建整个类层次 struct 来对这些几乎微不足道的事情进行建模.
演示真正从这里开始,最好的部分是Swift 可以在数据建模、使用可选类型等方面做F#能做的几乎所有事情.