码迷,mamicode.com
首页 > 其他好文 > 详细

类的初始化分析要点代码

时间:2015-11-09 22:20:27      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

分析要点:

1、初始化:类型(枚举,结构,类)的实例在构建过程中得一系列过程

2、初始化的主要目的:对内部的存储属性赋值

3、结构:如果不自觉添加初始化,会自动添加默认init和memberwise init

类的初始化:代码如下

class YY

{

 var i:int// 会报错,因为没有初始值(存储属性)

}

 

//NN没有构造器

class NN{

var i:int

init(a:int){i=1}

}

//黄金规则1:实例化之后所有的存储属性必须有值(两种赋值方法)

//专门(特定)的初始化器designated initiliazer

//作用:给本类的所有存储属性赋值

class AA{

var m:int()

var n:int

init(mm:int,nn:int)

{

 m=mm

 n=nn

}

init()

{

m=111

n=22

//这里会报错,表明特定的init之间不能相互调用

//所以建议:实际每个类只写一个特定的初始化器

//self.init(mm:111,nn:222)

}

//便利的初始化器需要调用专门的初始化器(直接或间接都可以)

convenience init (mm:int)

{

self.init(mm:mm,nn:1)

}

convenience init(nn: Int){
//self.init(mm:1,nn:2)
self.init(mm:nn)
}

}


//**************有了继承****
//class Parent {
// var i:Int = 1
// // var m: String? //只有可为nil的类型会有默认值
//
// var m: Int
// init(m: Int) {
// self.m = m
// }
//}
//
//class Child :Parent {
// var n: Int
// init(n: Int) {
// //阶段一
// self.n = n //先把自己的活干完
// super.init(m: 1)//在叫父类干
// //阶段二
// m = 2//不满意父类的,就自己干
//
// }
//
//}
/**
专门初始化器:
1.可以有多个
2.互相不能调用,每一个负责实现所有本类存储属性的初始化
3.负责处理继承过来的存储属性的初始化。
3.1 相信别人,所以表现就是调用父类的特定初始化器(不能
调用父类的便利初始化器)
便利的初始化器:
1.可以有多个
2.可以调用本来其它的便利初始化器,也可以调用本类的特定初始化器
3.最终一定是调用本类的特定初始化器
*/

//*******初始化器的继承***********

class P{
var m: Int
init(m: Int) {
self.m = m
}
init(m: Int,f: Bool) {
self.m = m
}
convenience init() {
self.init(m: 1)
}

}
class C: P{
var n: Int = 1
override init(m: Int) {
super.init(m: m)
}
override init(m: Int, f: Bool) {
super.init(m: m, f: f)
}

// init(n: Int) {
// self.n = n
// super.init(m: 1)
// }
}
/*默认情况下,子类不会继承父类的构造器
如果想让子类继承父类的构造器,有以下几个条件
1.自己的属性必须已经赋值(声明时)
2.会继承父类的特定初始化器
3.如果子类把父类所有的特定初始化器都实现了,
那么子类也会继承父类的所有便利初始化器


*/

//let ins = C(


//***********可失败的
class FailureClass {
var name:String
init?(name:String) {

self.name = name
if name.isEmpty { return nil}


}
}
//返回的是一个可为nil的类型
let ins = FailureClass(name: "dasf")
ins?.name
if let xx = ins {
xx.name
}
ins!.name

类的初始化分析要点代码

标签:

原文地址:http://www.cnblogs.com/tyty/p/4951079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!