一、Swift的类class
作为一门面向对象语言,类也是Swift的非常重要的类型,我们先来看下一个简单的类
二、属性
Swift中淡化了成员属性的概念,把属性分为两种:
-
存储属性:
无论从概念上还是定义方式上来看,存储属性更像其他语言中的成员变量,但是不同的是:
- 可以控制读写操作(
var 表示可读可写,let 表示只读)
- 通过属性监视器来属性的变化(
willSet 、didSet )
- 快速实现懒加载功能(
lazy 修饰)
-
计算属性:
计算属性并不直接存储一个值,而是提供getter 来获取一个值,或者利用setter 来间接设置其他属性。
下面是对象属性使用实例:
class Account {
- 计算属性并不直接存储一个值,而是提供
getter 来获取一个值,或者利用setter 来间接设置其他属性;
-
lazy 属性必须有初始值,必须是变量不能是常量,因为常量在构造完成之前就已经确定了值;
- 在构造对象方法之前存储属性必须有值(可选类型除外),无论是变量属性还是常量属性,这个值既可以在属性创建时指定,也可以在构造方法内指定;
- 存储属性的默认值设置不会引起属性监视器的调用(另外在构造方法中赋值也不会引起属性监视器调用),只有在外部设置存储属性才会引起属性监视器调用;
除了上面的对象属性外,我们还可以定义类的属性:
class Student {
三、方法
Swift的类中的方法可分为以下几个类别:
- 构造器方法
- 默认构造器方法(当存在有参数的指定构造器方法,被覆盖)
- 指定构造器方法
- 便利构造器方法
- 析构器方法
- 对象方法
- 类方法
以下是方法使用实例:
class Person {
- 除构造方法、析构方法外,其他方法的参数默认除了第一个参数是局部参数,从第二个参数开始既是局部参数又是外部参数。但是,对于函数,默认情况下只有默认参数既是局部参数又是外部参数,其他参数都是局部参数。
- 构造方法的所有参数默认情况下既是外部参数又是局部参数
- 只有便利构造器方法才能调用当前类的指定构造方法
- 有参数的指定构造器方法会覆盖调用默认的无参构造器方法
- 一个对象被释放前,先自动调用自己的析构方法,然后一层一层往上调用父类的析构方法
四、下标脚本
下标脚本是一种访问集合的快捷方式,如果我们自定义的类具有集合类型的功能,我们可以定义下标脚本来快捷访问该类属性,定义下标脚本是通过关键字subscript 进行的。
class Record {
五、继承
和ObjC一样,Swift也是单继承的(可以实现多个协议,此时协议放在后面),子类可以调用父类的属性、方法,重写父类的方法,添加属性监视器,甚至可以将只读属性重写成读写属性。
- 只有指定构造方法才能调用父类的构造方法。
- 如果父类中存在有参数的指定构造方法,子类的指定构造方法不会自动调用父类无参的指定构造方法。
- 如果父类仅有一个无参构造方法(不管是否包含便利构造方法),子类的构造方法默认就会自动调用父类的无参构造方法(这种情况下可以不用手动调用)。
- 常量属性只能在定义它的类的构造方法中初始化,不能在子类中初始化
- 一个对象被释放前,先自动调用自己的析构方法,然后一层一层往上调用父类的析构方法。
- 便利构造方法必须调用同一个类中的其他指定构造方法(可以是指定构造方法或者便利构造方法),不能直接调用父类构造方法。
|
请发表评论