代表团对我来说是一个新概念。根据我的理解,它要求别人为我做一些工作。然后,我将一些任务委托给他。
class Vehicle {
var numberOfWheels = 0
var description: String {
return "\(numberOfWheels) wheel(s)"
}
}
class Bicycle: Vehicle {
override init() {
super.init() //# Delegate up
numberOfWheels = 2
}
}
代码super.init()
是类初始化中的委托向上操作。子类初始化程序首先调用超类的初始化程序。超类的默认初始值设定项将整数0
分配给变量numberOfWheels
。这是第一阶段初始化。之后,子类'初始值设定项的覆盖操作进一步通过numberOfWheels = 2
自定义变量。
问题我的理解是否有任何不正确之处?我希望我在这里使用的委托描述是正确的。
请更正我在此处提出的任何错误和误解。感谢
答案 0 :(得分:1)
你在这里所描述的与委托模式完全无关,它是继承的概念。你的自行车课继承自车辆。 Vehicle已经实现了一些代码,因此您可以使用超类的代码(继承自的类)而不是再次编写代码。你的超类没有定义的初始化程序,因此super.init()甚至不会做任何事情。您应该阅读inheritance并尝试更好地理解这个概念。
以下是代表团的做法:你对授权的想法是正确的。它允许您将一些工作“外包”到另一个类。这可以通过协议来实现。委托必须符合委托协议,以确保它具有您要在其上调用的方法。你在这里使用协议而不是继承类,因为你不关心特定方法的实现,你只想告诉你的委托处理一个情况,由代表知道该怎么做。
委托最常用于macOS和iOS的MVC应用程序。您可以在Apple Documentation中详细了解授权。互联网上还有数十个教程like this one,展示了授权如何在实践中发挥作用。