Swift 4.0学习之:构造方法
2018-03-15 09:14
246 查看
构造方法
知识点:Swift中,如果定义属性的时候没有初始化,那么必须在后面加上 “ ?”。但是只要在构造方法中,对属性进行了初始化,那么就不用写“ ?”了。Swift中,有方法重载的概念,这种方式比较优雅,可惜OC里没有,因为OC不允许方法名相同,在Swift里,允许有同名的方法,只要形参或返回值不一样即可。
注意点: 如果自定义了构造方法,并且没有重写父类的构造方法,那么实例化的时候,只能用自定义的方法,父类的方法就用不了了。
再来一个注意点: Swift中,如果想在构造方法中,用KVC给属性赋值,那么必须在赋值之前先调用super.init() 。目的是为了在KVC给属性赋值之前,先给属性分配储存空间。有了这个前提,就引出了一个坑在下面的注意点
想不到还有一个注意点吧: 在声明属性的时候,如果是定义一个“对象属性”,那么后面可以直接跟上“ ?”。但是如果是定义一个“基本数据类型属性”,那么建议直接赋值为0,不要跟“ ?”。因为super.init() 方法在分配储存空间的时候,发现属性是一个对象,并且是一个可选类型,那么会给这个属性分配储存空间,但是如果属性是一个基本数据类型,并且是可选类型,那么super.init()就不会给它分配存储空间!!这个很关键,如果一不小心犯了这样的错误,编译是success的,但是一run就崩!
相关文章推荐
- Swift学习记录 -- 13.类的构造方法及属性监听
- Swift 基础学习(指定构造方法和便利构造方法)
- Swift 系统学习 19 结构体的默认构造方法和自定义构造方法
- Swift 基础学习(构造方法初印象)
- swift学习笔记之构造方法和析构方法
- IOS学习笔记05_1-Swift-如何定义类和类的构造方法、重载方法
- Swift 系统学习 20 结构体 添加可失败的构造方法
- Swift 4.0学习之:setter--getter--方法
- Java学习之面向对象(方法的重写 overwrite,super的使用,继承中的构造方法)
- java学习:构造方法、static、final
- 我的Java学习之路方法重载与构造方法
- 学习笔记之C#类的构造方法
- Android学习 - 4.0以上的系统,对话框界面一碰屏幕,对话框就消失了解决方法
- C#语言学习--基础部分(八) --类->构造方法续,静态类,静态方法
- 学习PHP面向对象(二)构造方法与析构方法
- JAVA学习笔记(五)继承时的构造方法、多态、接口、汉诺塔
- 继承中的构造方法的学习 super在继承中的应用
- 我的java学习之路之构造方法和new关键字
- php学习笔记 面向对象的构造与析构方法
- <转载学习>子类对父类构造方法调用小结