函数
目的: 条件判断, 只有满足条件, 才能实例化出对象, 可以预防不必要的内存开销.
特点: convenience关键字修饰; 不能被重写或者super
下面通过一段代码来了解什么叫便利构造函数
import UIKit
@objcMembers
class Person: NSObject {
var name: String?
var age: Int = 0
// 这是 KVC构造函数 ->也就是 指定构造函数 ->也就代表, 肯定能创建出一个对象, 而且不为 nil
init(dict: [String: Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
/* 便利构造函数
写法:
- 先写init()方法
- 添加初始化需要的参数
- 因为可能初始化成功, 也可能初始化失败, 所以要添加? 使其结果为可选值 init?()
- 便利函数想要完成初始化, 必须使用自己的指定构造函数, 所以是self, 不是super
- 添加 convenience 关键字, 代表是一个便利构造函数
*/
convenience init?(name: String, age: Int) {
if(age < 0 || age > 200){
return nil
}
self.init(dict: ["name": name, "age": age])
}
}
外界使用时的一些疑问: image.png
网友评论