iOS 开发 -- Swift (九) 构造函数
来源:互联网 发布:davinci监控软件 编辑:程序博客网 时间:2024/04/27 16:57
构造函数基础
构造函数
是一种特殊的函数,主要用来在创建对象时初始化对象,为对象成员变量
设置初始值,在 OC 中的构造函数是 initWithXXX,在 Swift 中由于支持函数重载,所有的构造函数都是init
构造函数的作用
- 分配空间
alloc
- 设置初始值
init
必选属性
- 自定义
Person
对象
class Person: NSObject { /// 姓名 var name: String /// 年龄 var age: Int}
提示错误 Class 'Person' has no initializers
-> 'Person' 类没有实例化器s
原因:如果一个类中定义了必选属性,必须通过构造函数为这些必选属性分配空间并且设置初始值
重写
父类的构造函数
/// `重写`父类的构造函数override init() {}
提示错误 Property 'self.name' not initialized at implicitly generated super.init call
-> 属性 'self.name' 没有在隐式生成的 super.init 调用前被初始化
- 手动添加
super.init()
调用
/// `重写`父类的构造函数override init() { super.init()}
提示错误 Property 'self.name' not initialized at super.init call
-> 属性 'self.name' 没有在 super.init 调用前被初始化
- 为比选属性设置初始值
/// `重写`父类的构造函数override init() { name = "张三" age = 18 super.init()}
小结
非 Optional
属性,都必须在构造函数中设置初始值,从而保证对象在被实例化的时候,属性都被正确初始化- 在调用父类构造函数之前,必须保证本类的属性都已经完成初始化
- Swift 中的构造函数不用写
func
子类的构造函数
- 自定义子类时,需要在构造函数中,首先为本类定义的属性设置初始值
- 然后再调用父类的构造函数,初始化父类中定义的属性
/// 学生类class Student: Person { /// 学号 var no: String override init() { no = "001" super.init() }}
小结
- 先调用本类的构造函数初始化本类的属性
- 然后调用父类的构造函数初始化父类的属性
- Xcode 7 beta 5之后,父类的构造函数会被自动调用,强烈建议写
super.init()
,保持代码执行线索的可读性 super.init()
必须放在本类属性初始化的后面,保证本类属性全部初始化完成
Optional
属性
- 将对象属性类型设置为
Optional
class Person: NSObject { /// 姓名 var name: String? /// 年龄 var age: Int?}
可选属性
不需要设置初始值,默认初始值都是 nil可选属性
是在设置数值的时候才分配空间的,是延迟分配空间的,更加符合移动开发中延迟创建的原则
0 0
- iOS 开发 -- Swift (九) 构造函数
- iOS 开发 -- Swift (十) 重载构造函数
- iOS 开发 -- Swift (十一) 便利构造函数
- iOS 开发 -- Swift (七) 函数
- iOS开发Swift篇—(九)属性
- swift 构造函数
- Swift构造函数
- Swift基础 构造函数
- IOS开发语言Swift入门连载---函数
- 15、swift开发iOS——函数
- iOS开发 Swift常用的内置函数
- IOS开发语言Swift入门连载---构造过程
- 基于iOS开发对Swift构造方法的感悟
- 24、swift开发iOS——构造过程
- Swift 3.构造函数-重载构造函数
- swift 构造函数 与便利构造函数
- 【iOS】swift init构造器
- Swift之便利构造函数
- CSS【02】——css兼容性问题处理
- cocos2dx 3.0调用点击事件
- 基于改进卡方校验的特征选取方法
- unity 导出包后 xcode build 报错il2cpp_codegen_initialize_method
- Xcode 便捷插件
- iOS 开发 -- Swift (九) 构造函数
- MagicalRecord的简单使用
- mysql 开启log-bin 无效
- 【.Net码农】异步调用WebService访问数据小结
- 阿里云服务器Web项目配置发布全过程
- 初识J2EE
- [土狗之路]coursera C语言进阶习题 二维数组右上左下遍历
- UML用例图详解一
- 4.8.4 如何去掉Android 应用的actionbar