SwiftUI学习-2 Struct和Class

两者的区别


  • 1.Struct是数值类型,Class是引用类型

数值类型在传递过程中会被copy。当然,被拷贝的只是结构,而不是每一个片段,直到我们想要进行write操作,这时候才会真的做一个按位拷贝。

举例:每一天大家都在变老,时间把“这一天”的你交给“下一天“的时候,你已经不再是那个你了,而是变老了一天的你。
“今天的你”夜深人静中思考,为什么这道题现在感觉很容易,而昨天死活做不出来,白白丢了一道大题的15分,并试图通过平行时空告诉“昨天的你”其实会这道题时...
很遗憾的是,这俩人已经不是同一个时空的你了,即使修改了”现在的你“canDo属性为true,但是"昨天的你"canDo属性仍然是false

引用类型则存于堆内存中,是通过指针传递,内存地址相同。简单来说就是“还是那一个”

举例:在不支持不鼓励不赞同不反对中,几个人分享了同一个视频会员账号,账号被其中一个人修改了账号名称,但是账号还是那一个,所以每个人都看到账号名称变了。


  • 2.Struct是为了函数式编程(functional programming)而构建的,而Class是为了面向对象形式编程(Object-oriented programming)而构建。

函数式编程专注于事物的功能特性。大多数我们看到的都是Struct,比如说:Array、Dictionary、Int、Bool、Double等。
面向对象编程重点是封装数据,并将功能放到某个容器中,一个Object对象。
复制一个东西,还是使用一个指针,导致的行为是大为不同的。


  • 3.Struct不可继承,Class可以单继承

  • 4.Struct提供的init方法可初始化所有变量,而Class没有提供变量初始化方法,需自行实现。

  • 5.Struct需明确表达可变或不可变,Class则一直可变

Struct利用var表达可变,或者let表达不可变。
Class中不能控制可变性,只要有它的指针就可以改变它。


  • 6.Struct用于各种数据结构,而Class用于特殊环境

Swift中大多数我们能看到的都是Struct,除了View是一种协议(Protocol)。
MVVM结构中,ViewModel永远会选择用Class来实现,因为它需要被分享使用。

你可能感兴趣的:(SwiftUI学习-2 Struct和Class)