Делегировать или закрывать несколько событий в одном объекте - PullRequest
0 голосов
/ 20 февраля 2019

Существует

var tableView: MyTableView?
tableView?.onGoToA = {
    self.goToA()
}
tableView?.onGoToB = {
    self.goToB()
}
tableView?.onGoToC = {
    self.goToC()
}

Есть ли лучший способ для этого случая или лучше просто использовать делегат?

1 Ответ

0 голосов
/ 20 февраля 2019

Если у вас есть ограниченные возможные случаи, у меня будет одно закрытие, которое принимает в качестве аргумента перечисление и будет иметь регистр переключения, чтобы решить, какой метод вызвать

Если каждое событие имеет значение, связанное с ним, вытакже может использовать перечисления со связанными значениями :)

Пример:

enum EventType {
    case toA
    case toB
    case toC
}

Объявить ваше закрытие как

var routerBlock: ((EventType) -> ())? = nil

Наконец, блок маршрутизатора реализован как

tableView?.routerBlock = {[weak self] (eventType) in
            switch eventType {
            case .toA:
                self?.gotoA()
            case .toB:
                self?.goToB()
            case .toC:
                self?.goToC()
            }
        }

Вы можете использовать аналогичный подход и с делегатами.Вместо того, чтобы иметь 3 метода делегата, вы можете иметь один метод, который принимает EventType и иметь тот же блок переключателей, чтобы решить, какой метод вызвать

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...