swift中构造函数 重写与重载
2017-03-19 本文已影响472人
翀鹰精灵
日常开发中,实际上这种构造函数写的很少,因为通常模型里面用字典转模型,但是这是作为OC程序员必须要知道的.所以记录下,以供自己学习.
import UIKit
构造函数写法
1.构造函数的目的:给自己的属性分配空间并设置初始值
2.调用父类的构造函数之前,需要先给本类的属性设置初始值
3.调用父类的'构造函数' 给父类的属性分配空间 设置初始值 NSObject没有属性,只有一个成员变量'isa'
4.如果重载了构造函数,并没有实现父类init方法,系统不再提供init() 构造函数(默认是会有的)
-因为默认的构造函数,不能给本类的属性分配空间
// 1.Class 'Person'has no initializers
//Person类没有'初始化器' 构造函数 可以有多个 默认的时候init
class Person: NSObject {
var name : String
//2. Overriding declaration requires an 'override' keyword
//3. 重'写' ->父类有这个方法,子类重新实现,需要override关键字
//Property 'self.name' not initialized at implicitly generated super.init call
//implicitly(隐式生成的super.init) 调用父类的构造函数 属性self.name没有被初始化
override init() {
//4. Property 'self.name' not initialized at super.init call
//提示给self.name初始化 -> 分配空间,设置初始值!
name = "Wang"
super.init()
}
}
//'重载'函数名相同,但是参数和个数不同
//重载可以给自己的属性从外部设置好初始值
//OC没有重载 都是initWith***
init(name:String) {
//使用参数的name设置给属性
self.name = name
//调用父类的构造函数
super.init()
}
注:
1.非Optional属性,都必须在构造函数中设置初始值,从而保证对象在被实例化的时候,属性都被正确实例化
2.调用父类构造函数前,必须保证本类的属性都已经完成初始化
3.swift中的构造函数不用写fun