类和结构体

类和结构体是Swift语言的核心内容之一。在Swift语言中,类和结构体有很多相同的特性,比如都有属性、方法、下标、构造器、扩展和协议等特性,同时,类又有结构体所不具有的一些特性,例如继承、类型转换、析构和引用计数等。与Objective-C相比,Swift中的类没有.h头文件。

 

类和结构体的基本用法

类和结构体的定义语法相似,通过关键词class来引入一个类,通过struct关键词来引入一个结构体,两者的定义都在一对花括号中。

使用类或者结构体名后面加上括号“()”,就可以调用它们的构造函数来对类或者结构体进行实例化,并且可以通过在实例后面加上“.”语法来访问类和结构体的属性。所有结构体都有一个自动生成的成员构造器(memberwise initializer),可以用来初始化新的结构体实例的成员属性。新实例的初始值可以通过名称传递给成员构造器。

 

结构体和枚举是值类型

Swift中所有的基础类型,比如整数、浮点数、布尔值、字符串、数组和字典的类型都是值类型,所有的结构体和枚举也都是值类型,也就是说在代码中进行赋值传递的时候,结构体和枚举实例以及它们的值类型属性都会被复制。

运行结果如下所示。

 

类是引用类型

跟Objective-C中的类一样,Swift中的类是引用类型。比较两个引用类型是否相等的运算符是恒等”===“和不恒等”!==“。

运行结果如下所示。

 

如何选择类和结构体

类和结构体在使用过程中有诸多相似之处,因此在实际开发过程中究竟选择使用类,还是结构体通常需要综合考虑。一般来说,在满足如下的一个或几个条件的情况下推荐使用结构体:

(1)封装一些相关的简单数据值。

(2)需要通过副本而非引用来赋值或者传递。

(3)所有属性本身是值类型,并且需要用来复制而非引用。

(4)不需要从已有类型继承属性或者行为。

除以上几种情况外,基本上都建议选择类来构建数据类型。

 

集合类型的赋值和复制行为

Swift语言中,数组Array和字典Dictionary类型是基于结构体实现的,即当把数组和字典赋值给常量或者变量,或者传递给函数以及方法时,会发生值复制的行为。这个特性与Foundation框架中的NSArray以及NSDictionary不一样(它们是类实现),NSArray和NSDictionary实例始终是按照引用赋值和传递的,而不是值复制。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值