Swift ——协议
1. 协议与继承
为两个类创建一个 debug 函数来打印当前类的基本信息。从继承的⻆度来说,我们可能会想到抽取一个公共的基类,当然大家都是动物,人也是动 物。从业务逻辑上来说,这么处理不太合理。可能最直观的办法是对于每一个类都写一个单独的 方法函数。
如果我们对当前代码中的每个类都需要 debug ,那上面这种方法显然是行不通的,于是我们有 了下面的代码
func debug(subject: Any){ print(.....)
}
当然看到这里可能大家也会觉得没有问题,如果我们要具体的描述当前类的具体信息,这个时候 我们还需要引入一个公共的基类,同时我们还需要有一个公共的属性 description 来让子类重 载,这无疑对我们的代码是很强的入侵。
所以这个时候我们通过一个协议来描述当前类的共同行为,并通过 extension 的方式来对我们 的类进行扩展,这样无疑是很棒的
extension LGTeacher : CustomStringConvertible {
var description : String { get { return "LGTeacher: \(age)\(name)" } }
}
extension Dog : CustomStringConvertible {
var description : String { get { return "Dog: \(age)\(name)" } }
}
func print(subject: CustomStringConvertible) { let string = data.description
//to do....
}
这里我们可以稍微的总结一下:
- class 本质上定义了一个对象是什么