Swift 4 构造方法init的理解

零,构造函数

1,一种特殊的函数
2,主要用来在创建对象是,初始化对象
3,给对象的成员变量设置初始值
4,Swift支持函数重载,所有构造函数都是init
5,作用是分配空间,设置初始值

注意:
1,oc的初始化是从类继承关系链,从父类开始逐级向子类初始化
2,swift的初始化,是先从子类开始,逐级向父类初始化
3,非optional属性,都必须要在构造器中设置初始值,从而保证对象在被实例化的时候,属性都被正确的初始化
4,在调用父类构造函数之前,必须保证本类的属性已经完成初始化
5,swift中的构造函数不用写func关键字
6,默认的构造函数不能给本类的属性分配空间
7,如果重载了构造函数,并且没有实现父类的init方法,系统不再提供init函数(默认会提供的)

一,构造器分两类:

1,指定构造器;
2,便利构造器;

二,每一个类至少有一个指定构造器(子类默认有一个)

1,指定构造器是类的主要构造器,初始化的所有属性,要在指定构造器赋值,并且要在当前构造器中,调用父类合适的指定构造器

三,便利构造器是类的次要构造器,你需要让便利构造器去调用同一个类中的指定构造器,并将这个指定构造器中的参数填上你想要的默认参数

Init 方法必须遵循几条规则:
1,指定构造器必须调用他直接父类的指定构造器;
2,便利构造器必须调用同一个类中的其它初始化方法;(初始化方法可以是便利构造器,也可以是指定构造器,归结是必须要调用到指定构造器);
3,便利构造器在最后必须调用本类的指定构造器;(如果本类没有指定构造器,那么就要调用本类的默认指定构造器)
4,只有指定构造器才可以调用父类指定构造器,而便利构造器是不可以的

init 机制:
1,第一阶段实例的所有属性被初始化;
2,第二阶段实例的所有属性可以再次调整以备之后使用
Swift 的编译器会对初始化的方法进行安全地检查以保证实例的初始化可以被安全正确的执行:
1,指定构造器必须确保所有被类中提到的属性在代理向上调用父类的指定构造器前被初始化,之后才能将其它构造任务代理给父类中的构造器
2,指定构造器必须先向上代理调用父类中的指定构造器,然后才能为任意属性赋值
3,便利构造器必须先调用一个类中的其它构造器,然后才可以为属性赋值
4,构造器在第一阶段构造完成之前,不能调用任何实例方法,不能读取任何实例属性的值,self不能被引用。

阶段一:简单说是,子类属性都已经赋值,完成内存的初始化,然后向上(父类—>子类链),重复子类的操作,直到构造器链的最顶部,所有的属性以及内存被完全初始化,才进入阶段二
阶段二:从顶部构造器链向下,每个构造器链中类的指定构造器都有机会进一步定制实例。构造器此时可以访问self,它的属性并调用实例方法等。。
简单的说是,代码里面,便利构造器调用父类指定构造器之前,不能使用self,属性及方法的调用,如果是本类的指定构造器,self和属性可以在调用父类指定构造器之前调用,但是实例方法,必须要在调用父类指定构造器之后才可以调用

Init 的继承与重载
Swift中子类不会继承来自父类的所有构造器,这样可以防止错误的继承并使用父类的构造器生成错误的实例

关于init的继承:
1,如果子类没有定义指定构造器,默认会继承父类所有的指定构造器
2,如果子类提供了所有父类指定构造器的实现,它将自动继承所有父类的便利构造器

参考:
1,重点在论述,比较全面:https://my.oschina.net/hejunbinlan/blog/470123
2,有代码演示:https://www.cnblogs.com/Alex-sk/p/5528760.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容