结构体与类

结构体与类_第1张图片

结构体与类_第2张图片

类和结构体的共同点:

///定义存储值的属性

///定义方法

///定义下标

///定义构造器

///使用extension拓展功能

///遵循协议

类和结构体的不同点:

///类有继承的特性,结构体没有

///类型转换可以在运行时检查和解释类实例的类型

///类有析构函数用来释放其分配的资源

///引用计数允许对一个类实例有多个引用

///类是引用类型,也就意味着一个类类型的变量不直接存储具体的实例对象,是对当前存储具体实例内存地址的引用。存储在堆上

///结构体是值类型,存储在栈上

swift中创建类和结构体的实例时,必须为所有的存储属性设置一个合适的初始值

///类编译器不会自动提供成员初始化器,但是结构体会

///类必须提供对应的指定构造器,也可以为当前类提供便利构造器(注意:便利构造器必须从相同的类里调用另外一个初始化器)

///指定初始化器必须保证在向上委托给父类初始化器之前,其所在类引入的属性都要初始化完成

///便利构造器必须先委托同类中的其他初始化器,然后再为任意属性赋值

///初始化器在第一阶段初始化完成之前,不能调用任何实例方法,不能读取任何实例属性的值,也不能引用self作为值

/// 地址中存储的是值

/// 值类型再传递的过程中,相当于传递了一个副本,也就是所谓的深拷贝

/// 值传递过程中,并不共享状态

///在类中,如果属性没有赋值,也不是可选型,编译会报错

///需要自己实现init方法

///引用类型地址中存储的是堆区地址,堆区地址中存储的是值

///结构体中的函数如果想要修改其中的属性,需要在函数前加上mutating,而类不需要

///mutating本质也是加一个inout修饰的self

///inout相当于取地址,可以理解为地址传递,即引用

///mutating修饰方法,而inout修饰参数

 

 

你可能感兴趣的:(Swift,iOS,swift)