构造函数 init


/* 构造函数 init

init函数,没有返回值,不能用func修饰,不能通过实例调用init,只能用init调用其他重载的init

✨关于override的特殊规定,普通方法必须override,指定构造必须override,便利构造不能写override修饰符。

当override一个required的构造函数时,不需要写override。override一个required的构造时,所有子类都需要加required。

required构造函数,可以通过继承获得,而不需要一定去重写。但是只要写了,必须加required。

另外,required只能用于init函数。

在定义了自己的指定init后,默认的init就没有啦


init函数结构体,枚举都可以有。但是deinit析构函数只能在类中才能有。

实例创建前,必须对所有的stored property进行初始化,这个可以在定义变量的时候赋初值

也可以在init函数中进行。


如果没有特殊需求,请在变量定义的时候初始化。在init中初始化的好处是,

1)可以在不同的重载函数init中初始化不同的值

2)在类继承的时候可以对初始化值进行修改。

3)另外,在定义时初始化 init中初始化都不会触发property observer

4)在初始化函数中可以对const的变量进行重新赋初值。


init中调用其他的self.init(必须加self)函数时,称为initializer delegation初始化代理

✨✨✨值类型的构造函数之间没有特殊规定。(结构体等),但是类中的init函数分为指定构造和便利构造。


类中因为多了继承的原因,为了保证所有的属性都被初始化,特做了如下规定:

构造其分为 Designated(指定,特定) initializerconvenience initializer:

1.若有父类,并且子类实现了指定构造器,必须在指定构造器中的初始化阶段1(所有子类属性初始化,见官网定义)最后调用super.init()

2.便利构造函数必须调用同一类中定义的其他构造器。包含指定构造器和便利构造器(该构造器调用了指定构造器)。

3.init函数可以调用instanceMethod,也可以对属性赋值,但是不可以在初始化阶段1(所有的变量都被初始化)之前。


✨✨总则:指定构造器必须向上代理。便利构造器必须横向代理(必须调用一个指定构造器结束)。


关于子类的继承(自己的理解):

1.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值