重载: 函数名相同,函数的参数类型或者参数的个数不同,函数就形成了重载,任何函数都可以重载
init(name: String) {
self.name = name
super.init()
}
KVC是OC的机制,所以在使用的时候有一个特别需要注意的.
早Swift3里面在类里面使用KVC的时候,会定义属性: var name: String?
,系统会自动在前面加上@objc
前缀.
但是在Swift4里面系统不会自动添加,所以需要我们手动添加:
//nil 和 0的区别,nil是没有分配内存空间,'0'分配了内存空间
//在Swift中使用KVC的时候,基本数据类型不能够设置为可选类型
var age: Int = 0
var name: String?
var sid: String?
KVC使用方法:
在类里面代码:
//通过字典来实例化对象 ==> KVC
init(dict: [String : Any]) {
super.init()
//调用self的setValuesForKeys
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forKey key: String) {
if key == "id" {
setValue(value, forKey: "sid")
return
}
super.setValue(value, forKey: key)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
//空实现
}
调用:
func thirdDemo() {
let m = Man(dict: ["name" : "小明","age" : 14,"id" : "小明的爸爸"])
print(m.name,m.age,m.sid)
}
这个在开发中不常用
convenience init?(name: String,age: Int) {
if age < 0 || age > 190 {
return nil
}
//符合条件的就创建对象
self.init(dict: ["name" : name, "age" : age])
}
懒加载:使用的时候一定不为空,只会初始化一次
lazy var nameLabel = UILabel()
通过有返回值的闭包来实现懒加载
lazy var ageLabel: UILabel = {
let l = UILabel()
//设置
l.text = "哈哈哈"
return l
}()
didSet比较常用,别的set方法不经常用,在这里不介绍了
var title: String? {
//didSet 作用更大 能够获取新值和旧值
//在视图绑定模型数据的时候会使用didSet
//属性设置检查器
didSet {
}
willSet {
}
}
这篇文章还没有评论