Swift中Struct与Class的区别?
主要区别
1.struct是值类型,class是引用类型。
2.二者的本质区别:
struct是深拷贝,拷贝的是内容;class是浅拷贝,拷贝的是指针。
3.property的初始化不同:
class 在初始化时不能直接把 property 放在 默认的constructor 的参数里,而是需要自己创建一个带参数的constructor;而struct可以,把属性放在默认的constructor 的参数里。
4.变量赋值方式不同:
struct是值拷贝;class是引用拷贝
5.immutable变量:
swift的可变内容和不可变内容用var和let来甄别,如果初始为let的变量再去修改会发生编译错误。struct遵循这一特性;class不存在这样的问题
6.mutating function:
struct 和 class 的差別是 struct 的 function 要去改变 property 的值的时候要加上 mutating,而 class 不用。
7.继承:
struct不可以继承,class可以继承
8.struct比class更轻量:
struct分配在栈中,class分配在堆中
9.总结:
    static 可以在类、结构体、或者枚举中使用。而 class 只能在类中使用。
static 可以修饰存储属性,static 修饰的存储属性称为静态变量(常量)。而 class 不能修饰存储属性。
static 修饰的计算属性不能被重写。而 class 修饰的可以被重写。
static 修饰的静态方法不能被重写。而 class 修饰的类方法可以被重写。
class 修饰的计算属性被重写时,可以使用 static 让其变为静态属性。
class 修饰的类方法被重写时,可以使用 static 让方法变为静态方法
class关键字指定的类方法可以被子类重写,但是用static关键字指定的类方法是不能被子类重写的
使用场景
        在Swift中,结构体(Struct)和类(Class)都可以用来定义属性和方法来创建复杂的数据类型。但是,根据特定的场景和需求,选择使用结构体还是类有以下几个考虑点:
1、 当你需要一个轻量级的数据载体,并且数据的拷贝或值传递是可预期的行为时,应该优先考虑使用结构体。结构体实例在代码中传递时总是被拷贝,这有利于保证数据的不可变性和安全性。
2、 如果你要表示的数据结构需要利用继承来避免代码重复,或者需要在运行时检查和解释类型的实例,那么应该使用类。类支持继承,多态和类型转换,而结构体不支持。
3、 对于小型的数据结构,结构体由于其值类型的特性,在性能上通常优于类。在数组和字典这样的集合类型中使用结构体可以获得更好的性能。
4、 当你的数据结构需要通过网络传输或者需要与外部系统进行交互时,使用遵循Codable协议的结构体可以简化序列化和反序列化的过程。
5、 使用结构体可以避免内存泄漏和循环引用问题,这是因为结构体作为值类型,不会形成引用计数。
总的来说,如果数据结构比较简单,不需要用到继承,且期望通过值传递来确保数据安全,那么结构体是更好的选择。而对于需要利用面向对象特性的复杂数据模型,类则是更合适的选择。
————————————————
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/eastWind1101/article/details/149045343
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号