我是Swift的新手,刚刚遇到swift的枚举功能,它可以有计算属性但不存储属性 为什么枚举在swift中没有存储属性?
答案 0 :(得分:2)
枚举是结构化数据类型。它们可以存储value type
属性(例如static
属性),但它们不能具有对象所具有的实例属性。计算属性也允许为枚举的每个case
返回不同的值,这通常会有所不同。
来自apple docs
值类型是一种类型,其值在分配给a时被复制 变量或常量,或传递给函数时。
所有结构和枚举都是Swift中的值类型。这意味着 您创建的任何结构和枚举实例 - 以及任何值 它们作为属性的类型 - 在传递时始终被复制 在你的代码中。
因为枚举在每次分配时都被复制,所以它们不能包含reference type
等实例变量。不同之处在于引用类型引用相同的实例而不是被复制。枚举按定义,因此它们的值将始终相同。
编辑:
结构和枚举之间的一个重要区别是结构可以存储属性。枚举中的每个案例都可以具有不同的关联值,但枚举类型的每个值表示由枚举定义的单个案例。因此,根据定义,枚举案例永远不应更改值。
结构:值类型,可以有存储属性
枚举:值类型,不能存储属性
类:引用类型,具有存储属性