Swift -- 类与结构体区别

Swift中类和结构体有很多共同点。共同处在于:

  • 定义属性用于存储值
  • 定义方法用于提供功能
  • 定义下标操作使得可以通过下标语法来访问实例所包含的值
  • 定义构造器用于生成初始化值
  • 通过扩展以增加默认实现的功能
  • 实现协议以提供某种标准功能

与结构体相比,类还有如下的附加功能:

  • 继承允许一个类继承另一个类的特征
  • 类型转换允许在运行时检查和解释一个类实例的类型
  • 析构器允许一个类实例释放任何其所被分配的资源
  • 引用计数允许对一个类的多次引用
定义语法与实例化

类和结构体有着类似的定义方式。通过classstruct来分别表示类和结构体,并在一对大括号中定义他们的具体内容

class myClass{
    //类的定义
    var width = 0;
    var height = 0;
}
let  myclass = myClass();//实例化

struct myStruct{
    //结构体的定义
    var width = 0;
    var height = 0;
}
let mystruct = myStruct();//实例化
结构体类型的成员逐一构造器

所有结构体都有一个自动生成的成员逐一构造器,用于初始化新结构体实例中成员的属性。新实例中各个属性的初始化可以通过属性的名称传递到成员逐一构造器之中;

let mystruct = myStruct(width : 100, height : 100);

与结构体不同,类实例没有默认的成员逐一构造器。

类与结构体的类型
  • 结构体是值类型
    值类型被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝。
let mystruct = myStruct(width : 100, height : 100);
var newstruct = mystruct;
newstruct.width = 500;
print(newstruct.width);//此时的值为500
print(mystruct.width);//值仍然为100
  • 类是引用类型
    与值类型不同,引用类型在被赋予一个变量、常量或者被传递到一个函数时,其值不会被拷贝。因此,引用的是已存在的实例本身而不是其拷贝。
class myClass{
    var widht = 10;
    var height = 10;
}
let myclass = myClass();
var newclass = myclass;
newclass.widht = 50;
print(myclass.widht);//值为50
print(newclass.widht);//值为50
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容