有一个代码涉及Delegate Up,我希望我理解正确

时间:2016-06-30 20:16:48

标签: swift class delegates initialization

代表团对我来说是一个新概念。根据我的理解,它要求别人为我做一些工作。然后,我将一些任务委托给他。

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自定义变量。

问题我的理解是否有任何不正确之处?我希望我在这里使用的委托描述是正确的。

请更正我在此处提出的任何错误和误解。感谢

1 个答案:

答案 0 :(得分:1)

你在这里所描述的与委托模式完全无关,它是继承的概念。你的自行车课继承自车辆。 Vehicle已经实现了一些代码,因此您可以使用超类的代码(继承自的类)而不是再次编写代码。你的超类没有定义的初始化程序,因此super.init()甚至不会做任何事情。您应该阅读inheritance并尝试更好地理解这个概念。

以下是代表团的做法:你对授权的想法是正确的。它允许您将一些工作“外包”到另一个类。这可以通过协议来实现。委托必须符合委托协议,以确保它具有您要在其上调用的方法。你在这里使用协议而不是继承类,因为你不关心特定方法的实现,你只想告诉你的委托处理一个情况,由代表知道该怎么做。

委托最常用于macOS和iOS的MVC应用程序。您可以在Apple Documentation中详细了解授权。互联网上还有数十个教程like this one,展示了授权如何在实践中发挥作用。