【Swift大法好:昨天看博客的时候看到,有说Swift之后有可能开发安卓软件了。cool。。。】ide
默认状况下,全部的构造方法都是指定构造函数 Designated
函数
convenience
关键字修饰的构造方法就是便利构造函数this
便利构造函数具备如下特色:spa
能够返回 nil
code
只有便利构造函数中能够调用 self.init()
对象
便利构造函数不能被重写
或者 super
ip
根据给定参数判断是否建立对象,而不像指定构造函数那样必需要实例化一个对象出来内存
在实际开发中,能够对已有类的构造函数进行扩展,利用便利构造函数,简化对象的建立开发
指定构造函数必须调用其直接父类的的指定构造函数(除非没有父类)博客
便利构造函数必须调用同一类中定义的其余指定构造函数
或者用 self.
的方式调用父类的便利构造函数
便利构造函数能够返回 nil、
import UIKit
/* -- KVC构造函数
KVC属性赋值的原理 -- 系统会给 实例化对象动态的发送 setValue(value: AnyObject?, forKey key: String) ,来给属性赋值
1.这个实例化对象 必须存在, 内存分配
2.属性分配内存
*/
class Person: NSObject {
// 可选项,在初始化的时候会分配内存空间,默认值为nil
//姓名
var name: String?
// this class is not key value coding-compliant for the key age
// 年龄
// age 基本数据类型 -- 在Swift 里与 KVC不兼容
// age的默认值为nil, KVC找不这个属性
// 默认给这个 age = 0
var age: Int = 0
var sex: Int = 0
/*
便利构造 -- 能够根据 咱们的属性来动态的判断是否会返回值
1. 有可能找不到对象, 返回 nil
2. 便利构造须要借助其余的构造函数
3. 便利构造函数的关键字-- convenience
*/
//person 便利构造方法
convenience init?(name: String,age: Int,sex:Int) {
// 找对象的条件 -- 小于 18的 不行, 大于 25的不行, 我是男的,我得找女的
if age < 18 || age > 25 || sex == 1 {
return nil
}
// 必须初始化
self.init(dic:["name":name,"age":age,"sex":sex])
}
//kvc构造方法
init(dic: [String:AnyObject]) {
// 报错问题一: 调用 setValuesForKeysWithDictionary方法以前,必须调用 super.init
// 1. 完成本类的初始化
// 2. 父类也会初始化
// 3. 须要给 本类属性,进行初始化操做,进行初始化操做能够 在这个init里完成,name = "老王"
// 咱们想经过 KVC动态给属性赋值, 咱们就须要把 属性设置成 可选项
super.init()
// 实例化对象已经建立完成,而后再调用 setValuesForKeysWithDictionary
// 调用 setValuesForKeysWithDictionary -- 调用 setValue for key 来给属性赋值
setValuesForKeysWithDictionary(dic)
}
//重写descriotion
override var description: String {
// 注意 keys
let keys = ["sex","name","age"]
return dictionaryWithValuesForKeys(keys).description
}
}