Swift学习之路-04
[toc]
Swift
( ) 相当于OC的 alloc / init
Swift 中对应一个函数 init( ) 构造函数
作用:给成员变量 分配空间,初始化成员变量
/*
在Swift中,默认同一个项目 所有的类都是共享的,可以直接访问,不需要 import 所有对象的属性 var 也可以直接访问到/
错误分析
//1.Class 'Person' has no initializers
person没有初始化器
//2. Overriding declaration requires an 'override' keyword
重写 -> 父类有这个方法,子类重新实现,需要override 关键字
//3. Property 'self.name' not initialized at implicitly generated super.init call
属性’self.name’没有被初始化,implicitly(隐式生成的构造函数之前,属性self.name没有被初始化)
//4. Property 'self.name' not initialized at super.init call
在调用父类方法时,没有给父类方法初始化
提示给 self.name 初始化 ->分配空间,设置初始值
总结
swift构造函数
- 给自己的属性分配空间,并且设置初始值
- 调用父类的构造函数,给父类的属性分配空间设置初始值
NSObject 没有属性,只有一个成员变量‘isa’ - 如果重载了构造函数,并且没有实现父类 init 方法,系统不再提供init()构造函数(默认是会有的!)
– 因为 默认的构造函数,不能给本类的属性分配空间
swift的构造函数和OC反过来的
oc要先初始化父类在初始化子类成员变量
而swift则是先初始化子类成员变量,在初始化父类,
1、非optional 属性,都必须在构造函数中设置初始值,从而保证对象在被实例化的时候,属性都被正确初始化
2、在调用父类构造函数之前,必选保证本类的属性都已经完成初始化
Swift中的 构造函数不用写 func
override 重写
- 父类存在相同的方法
- 子类重新编写父类方法的实现
这样就必须保证所有成员变量的属性都要有值
KVC
- 定义模型属性的时候,如果是对象,通常都是可选的
- 在需要的时候创建
- 避免写构造函数,可以简化代码