Итак, первая ошибка в том, что вы пытаетесь вызвать делегатскую функцию вне того места, где она может быть выполнена. Вам нужно создать функцию, которая вызывает эту функцию, или вызвать ее в 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()