Как вы вызываете функцию делегата на подклассе в Swift? - PullRequest
0 голосов
/ 31 мая 2018

Класс А является делегатом.У класса B был протокол с методами, и я мог вызвать их, просто вызвав что-то вроде делегат? .MyFunc ()

protocol ClassBDelegate: class {
    func myFunc()
}

class Class B {
    weak var delegate: ClassBDelegate?
    delegate?.myFunc()
}

Но теперь myFunc () относится к другому классу (классу C), который использует класс A, но теперь я хочу, чтобы класс B вызывал функцию в экземпляре класса A класса C.

Как это сделать?Я знаю, что есть ответ, но, возможно, я не знаю, что искать?Я хотел бы написать что-то вроде делегат? .ClassC.myFunc () , но это не позволит мне сделать это.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Суть протокола в том, что он не требует указывать определенный класс , который предоставляет услугу.Вместо этого вы просто указываете, что какой-то объект, который соответствует протоколу, предоставляет услугу.

Вам просто нужно, чтобы и у ваших объектов ClassA и ClassB был один и тот же делегат.Затем каждый из них напрямую вызовет делегата.

0 голосов
/ 31 мая 2018

Класс B не знает, что его делегат делает для выполнения своих команд.Это точка шаблона протокола / делегата.Протокол скрывает реализацию - более того, сам идентификатор - делегата.

Именно класс А, выступающий в качестве делегата, будет отвечать на myFunc, общаясь сего помощник класса C в некотором роде.Может быть, это его делегат, я не знаю.Это не имеет значения.Но ничего не меняйте в знаниях класса B. о ситуации или о том, как она говорит.

Итак, вам нужно написать функцию в классе A , которая будет вызывать для вас класс C,Класс B не должен ничего знать о том, что происходит на дальнем конце, если класс A является делегатом.Это частная реализация.

...