我该如何写一个简单的示例,说明如何在Swift 5中使用委托

马克·博纳

我想写一个简单的示例,说明委托在Swift中的工作方式。我已经建立了一个类,一个协议和另一个遵守该协议的类。但是我在两个不同的地方遇到相同的错误。我在xcode中创建了一个简单的swift命令行工具,所有代码都位于main.swift中。除了学习委托的工作方式之外,该代码没有实际功能。

这是错误消息:

行上的连续声明必须以';'分隔
插入 ';'
函数声明的参数列表中应为'('。函数声明的
主体中应为'{'。
实例方法声明中的期望为'func'关键字。
插入'func'
期望的声明
'delegate()' //或中的任何内容的无效重新声明。其他错误

这是代码:

class MainClass {

    var delegate: MyProtocol? = nil

    delegate.doAnything() //getting 1st error here
}


protocol MyProtocol {
    func doAnything()
}


class OtherClass: MyProtocol {

    let anything = MainClass()

    anything?.delegate = self //getting 2nd error here

    func doAnything() {
        print("text")
    }
}
加布·庞德

因此,第一个错误是因为您试图在可以执行的任何位置之外调用委托函数。您需要创建一个调用该函数或在init中调用它的函数。制作示例时,请尝试使用现实世界中的概念为示例建模。您可以做一些类似指挥班和训练班的事情。售票员可以实施一些控制协议来控制火车的速度。

无论如何,您的第二个错误是因为self尚未初始化。要将变量分配给self,您必须先初始化该类,这样您就可以

init() {
   anything?.delegate = self
}

DM欢迎您进一步了解此概念,我将在此处稍作完整的示例。

编辑:完整的例子,随时问问题

import Foundation

enum Direction {
    case north
    case east
    case south
    case west
}

protocol VehicleControls {
    var speed: Float {get set}
    var direction: Direction {get set}
    var numPassengers: Int {get}

    func change(newSpeed: Float)

    func change(newDirection: Direction)

    func createNoise()
}

class Conductor {
    var vehicle: VehicleControls

    init() {
        vehicle = Train(s: 1.5, d: .west, nP: 50)
    }

    func controlVehicle() {
        vehicle.change(newSpeed: 2.5)
        vehicle.change(newDirection: .east)
        vehicle.createNoise()
        print("\n")
    }
}

class Train: VehicleControls {
    var speed: Float
    var direction: Direction
    var numPassengers: Int

    init() {
        self.speed = 0
        self.direction = .north
        self.numPassengers = 0
    }

    init(s: Float, d: Direction, nP: Int) {
        self.speed = s
        self.direction = d
        self.numPassengers = nP
    }

    func change(newSpeed: Float) {
        print("changing speed from \(speed), to \(newSpeed)")
        self.speed = newSpeed
    }

    func change(newDirection: Direction) {
        print("changing direction from \(direction) to \(newDirection)")
        self.direction = newDirection
    }

    func createNoise() {
        print("Chugga, Chugga... Chugga, Chugga... CHOO CHOO")
    }
}

class Car: VehicleControls {
    var speed: Float
    var direction: Direction
    var numPassengers: Int

    init() {
        self.speed = 0
        self.direction = .north
        self.numPassengers = 0
    }

    init(s: Float, d: Direction, nP: Int) {
        self.speed = s
        self.direction = d
        self.numPassengers = nP
    }

    func change(newSpeed: Float) {
        print("changing speed from \(speed), to \(newSpeed)")
        self.speed = newSpeed
    }

    func change(newDirection: Direction) {
        print("changing direction from \(direction) to \(newDirection)")
        self.direction = newDirection
    }

    func createNoise() {
        print("HONK HONK, BEEP BEEP")
    }
}

let newConductor = Conductor()

newConductor.controlVehicle()

newConductor.vehicle = Car(s: 60.56, d: .north, nP: 2)

newConductor.controlVehicle()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我该如何写一个函数来填充文件中的向量

来自分类Dev

我该如何写一个正确的路径来将文件保存在Java中?

来自分类Dev

如何在 swift 中使用委托通知 UIViewController 在 xib 文件中单击了一个按钮?

来自分类Dev

如果元素的第一个子代不是javascript中的标记,该如何写?

来自分类Dev

如何在Swift中写一个空的案例?

来自分类Dev

我该如何写一些正则表达式来查找子域并替换Swift中的值

来自分类Dev

如何在可可中使用Swift委托

来自分类Dev

如何在可可中使用Swift委托

来自分类Dev

如何写别名以使用第一个参数或*如果参数为空?

来自分类Dev

如何写一个条件,当一个日期字段应按轨道中的日期过滤器排序?

来自分类Dev

我需要一个特定的示例,说明如何在不可变的_case_类的主构造函数中定义局部参数

来自分类Dev

我需要一个示例,说明如何使用 EasyNetQ 库向多个接收器广播相同的消息

来自分类Dev

如何在循环中使用匿名方法实例化唯一委托(在C#中)?

来自分类Dev

如何在另一个类中使用此扩展委托更新我的 ViewController UI

来自分类Dev

我如何在Swift中打印一个整数

来自分类Dev

我如何在PowerShell中写一个-replace,其中数字跟随一个序列

来自分类Dev

如何从Android中的URL解析多个JSON对象和数组?我正在使用一个示例,在该示例中,我想要它,

来自分类Dev

在一个简单的RxJS示例中,如何在不使用主题或命令式操纵的情况下管理状态?

来自分类Dev

如何在ed中写一个文字点?

来自分类Dev

Visual Studio中是否有一个选项可以提供一个简单视图,说明如何在不构建的情况下将文件包含在我的C ++代码中?

来自分类Dev

谁能举一个简短的示例,说明如何使用c ++开发Windows窗体应用程序以及如何在cpp文件中编写代码。

来自分类Dev

我如何在C ++中声明一个不可变的类(Java示例)

来自分类Dev

如果这样的条件在宏中该如何写?

来自分类Dev

如果使用Jquery条件该如何写呢?

来自分类Dev

如何使用 swift 为我的 iOS 应用程序创建一个简单的导航视图

来自分类Dev

我该如何在R中添加一个空的“”字符串?

来自分类Dev

我该如何在其他部分中做一个部分?

来自分类Dev

如何在Swift中创建一个简单的UIViewController并将其设置为起始视图

来自分类Dev

我如何在SQL Server中做一个简单的枢轴

Related 相关文章

  1. 1

    我该如何写一个函数来填充文件中的向量

  2. 2

    我该如何写一个正确的路径来将文件保存在Java中?

  3. 3

    如何在 swift 中使用委托通知 UIViewController 在 xib 文件中单击了一个按钮?

  4. 4

    如果元素的第一个子代不是javascript中的标记,该如何写?

  5. 5

    如何在Swift中写一个空的案例?

  6. 6

    我该如何写一些正则表达式来查找子域并替换Swift中的值

  7. 7

    如何在可可中使用Swift委托

  8. 8

    如何在可可中使用Swift委托

  9. 9

    如何写别名以使用第一个参数或*如果参数为空?

  10. 10

    如何写一个条件,当一个日期字段应按轨道中的日期过滤器排序?

  11. 11

    我需要一个特定的示例,说明如何在不可变的_case_类的主构造函数中定义局部参数

  12. 12

    我需要一个示例,说明如何使用 EasyNetQ 库向多个接收器广播相同的消息

  13. 13

    如何在循环中使用匿名方法实例化唯一委托(在C#中)?

  14. 14

    如何在另一个类中使用此扩展委托更新我的 ViewController UI

  15. 15

    我如何在Swift中打印一个整数

  16. 16

    我如何在PowerShell中写一个-replace,其中数字跟随一个序列

  17. 17

    如何从Android中的URL解析多个JSON对象和数组?我正在使用一个示例,在该示例中,我想要它,

  18. 18

    在一个简单的RxJS示例中,如何在不使用主题或命令式操纵的情况下管理状态?

  19. 19

    如何在ed中写一个文字点?

  20. 20

    Visual Studio中是否有一个选项可以提供一个简单视图,说明如何在不构建的情况下将文件包含在我的C ++代码中?

  21. 21

    谁能举一个简短的示例,说明如何使用c ++开发Windows窗体应用程序以及如何在cpp文件中编写代码。

  22. 22

    我如何在C ++中声明一个不可变的类(Java示例)

  23. 23

    如果这样的条件在宏中该如何写?

  24. 24

    如果使用Jquery条件该如何写呢?

  25. 25

    如何使用 swift 为我的 iOS 应用程序创建一个简单的导航视图

  26. 26

    我该如何在R中添加一个空的“”字符串?

  27. 27

    我该如何在其他部分中做一个部分?

  28. 28

    如何在Swift中创建一个简单的UIViewController并将其设置为起始视图

  29. 29

    我如何在SQL Server中做一个简单的枢轴

热门标签

归档