我一直在尝试掌握面向协议的编程,但我不明白以下两种情况之间的区别......
方案 1
我有两个类是UIViewControllers
. 这两个类都需要使用一些通用功能,所以我创建了一个协议和一个带有协议默认实现的扩展,然后视图控制器只需要在类行中有协议,它们将自动继承所需的功能。IE...
protocol SomeProtocol {
func foo()
}
extension SomeProtocol {
func foo(){
//execute
}
}
class FirstViewController: UIViewController, SomeProtocol {
...
func doSomething(){
foo()
}
}
class SecondViewController: UIViewController, SomeProtocol {
...
func doSomethingElse(){
foo()
}
}
场景 2
我有两个类是UIViewControllers
. 这两个类都需要使用一些通用功能,因此我创建了一个控制器类,并且这两个UIViewController
类都使用了控制器类的一个实例。IE...
class FirstViewController: UIViewController {
...
let controller = Controller()
func doSomething(){
controller.foo()
}
}
class SecondViewController: UIViewController {
...
let controller = Controller()
func doSomethingElse(){
controller.foo()
}
}
class Controller {
func foo(){
//execute...
}
}`
那么区别是什么呢?在我需要使用该foo()
功能的任何地方,我都可以获取Controller()
. foo()
通过将函数放在协议中然后拥有需要的类,我可以获得什么优势foo()
从协议继承