swift - 有一段代码涉及到Delegate Up,希望我理解正确

标签 swift class delegates initialization

委托(delegate)对我来说是一个新概念。据我了解,它要求别人为我做一些工作。然后我将一些任务委托(delegate)给他。

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()是类初始化中的一个向上委托(delegate)操作。子类初始化器首先调用父类(super class)的初始化器。父类(super class)的默认初始值设定项将整数 0 分配给变量 numberOfWheels。这是第一阶段初始化。之后,子类初始化程序的重写操作通过 numberOfWheels = 2 进一步自定义变量。

问题我的理解是否有错误?我希望我在这里使用的委托(delegate)描述是正确的。

请纠正我这里的任何错误和误解。谢谢

最佳答案

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

这就是委托(delegate)的作用:您对委托(delegate)的想法是正确的。它允许您将一些工作“外包”给另一个类(class)。这可以通过协议(protocol)来实现。委托(delegate)必须遵守委托(delegate)协议(protocol),以确保它具有您想要调用的方法。您在这里使用协议(protocol)而不是继承类,因为您不关心具体方法的实现,您只想告诉您的委托(delegate)来处理情况,由委托(delegate)知道该怎么做。

委托(delegate)最常用于 macOS 和 iOS 的 MVC 应用程序。您可以在Apple Documentation中阅读有关委托(delegate)的更多信息。 。还有几十个教程like this one在互联网上展示授权在实践中如何运作。

关于swift - 有一段代码涉及到Delegate Up,希望我理解正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132480/

相关文章:

iOS Swift : Closures (Callbacks) versus Delegates, 什么时候使用哪个?

iOS UiPickerView(-Helper) 应发送消息

iphone - 当存在委托(delegate)时,respondsToSelector 的行为如何?

ios - 如何在 Swift 中添加多个泛型类型约束?

java - 在 Java 的方法中使用类定义

python - 类变量和实例变量有什么区别?

c++ - 比较 C 和 C++ 中的结构

swift - 使用动画更改 rootViewController 时 viewWillAppear/DidAppear 被调用两次

json - 快速创建 JSON

ios - Firebase 存储如何在 Swift 中获取上传图片的进度