swift - 当我必须在 Swift 中的类、结构和枚举之间进行选择时,我应该如何推理?

标签 swift

既然类、结构和枚举都有构造函数、属性和计算属性,那么在它们之间进行选择时我应该如何推理?

最佳答案

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

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

Swift 枚举可以完成上述工作,但它们可以做的更多。当然语言指南有一个很好的 barcode modelling example但我所知道的最好的例子是 Scott Wlaschin 的演讲:http://www.slideshare.net/ScottWlaschin/ddd-with-fsharptypesystemlondonndc2013

您可能会从整个演示文稿中受益,但真正要“理解”要点,您只需要看幻灯片 60,他在幻灯片中展示了如何在典型的业务线应用程序中为“支付方式”建模。

演示文稿中的示例是使用 F# 编写的,但 F# 与 Swift 相差不远,您可以很容易地在它们之间进行映射。例如,Swift 中的付款方式枚举如下所示:

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

上面的重点是每个订单的付款方式只能是以上三种方式中的一种。编译器将不允许任何其他内容。这是构建整个类层次结构来模拟这些几乎微不足道的事情的一种非常简洁的替代方法。

演示文稿真正从那里起飞,最好的部分是 Swift 几乎可以做 F# 在数据建模、使用可选类型等方面的所有事情。

关于swift - 当我必须在 Swift 中的类、结构和枚举之间进行选择时,我应该如何推理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24025940/

相关文章:

swift - 在 Swift 中以编程方式将富文本转换为纯文本

ios - .Natural 的 NSTextAlignment 逆

ios - News Feed 上的 Firebase Swift 分页

ios - 聊天应用程序中彩色背景的奇怪形状

Swift 2.1 - 如何更改 uidatepicker 以便它只允许时间而不是日期?

ios - DispatchQueue main 未被调用

ios - 使用 init 作为闭包

swift - 无法识别的选择器发送到实例,通知中心获取键盘大小

swift - 静态类函数: Instance member cannot be used on type

iOS/Swift : Use UIView. animate 动画文本从 UITextView 添加/删除