您的位置:首页 > 移动开发 > Swift

iOS 开发 -- Swift (十一) 便利构造函数

2016-02-26 19:13 399 查看


convenience 便利构造函数

目的

条件判断,只有满足条件,才实例化对象,可以防治造成不必要的内存开销
简化对象的创建
本身不负责属性的创建和初始化工作

特点

默认情况下,所有的构造方法都是指定构造函数
Designated

convenience
关键字修饰的构造方法就是便利构造函数
便利构造函数具有以下特点:

可以返回
nil

只有便利构造函数中可以调用
self.init()

便利构造函数不能被
重载
或者
super

便利构造函数主要用于条件监测或者简化对象创建

/**
便利构造函数的目的:

1. 条件判断
2. 简化对象的创建
3. 本身不负责属性的创建和初始化工作
*/
convenience init?(dict: [String: AnyObject]) {

// 判断是否包含姓名
guard let _ = dict["name"] as? String else {
printLog("没有指定姓名")
return nil
}
guard let age = dict["age"] as? Int else {
printLog("没有指定年龄")
return nil
}

if age > 100 || age < 0 {
printLog("年龄不正确")
return nil
}

// Convenience initializer for 'Person' must delegate (with 'self.init') rather than chaining to a superclass initializer (with 'super.init')
// 遍历构造函数必须调用本类的 self.init,而不能调用父类的 super.init
self.init()

printLog(self.classForCoder)

// Use of 'self' in method call 'setValuesForKeysWithDictionary' before super.init initializes self
// 使用 self 调用 setValuesForKeysWithDictionary 之前需要调用 super.init 方法
// 只有确保对象已经被正确的实例化之后,才能向对象发送消息
setValuesForKeysWithDictionary(dict)
}


便利构造函数应用场景

根据给定参数判断是否创建对象,而不像指定构造函数那样必须要实例化一个对象出来
在实际开发中,可以对已有类的构造函数进行扩展,利用便利构造函数,简化对象的创建

构造函数小结

指定构造函数必须调用其直接父类的的指定构造函数(除非没有父类)
便利构造函数必须调用同一类中定义的其他
指定构造函数
或者用
self.
的方式调用
父类的便利构造函数

便利构造函数可以返回
nil

便利构造函数不能被重载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: