Внедрить некоторую форму перечислений в протокол

#swift #enums

#swift #перечисления

Вопрос:

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

 public protocol Coordinator: class {
    /// The array containing any child Coordinators
    var childCoordinators: [Coordinator] { get set }

    func start()
    func show()
}

public extension Coordinator {

    /// Add a child coordinator to the parent
    public func addChildCoordinator(_ childCoordinator: Coordinator) {
        self.childCoordinators.append(childCoordinator)
    }

    /// Remove a child coordinator from the parent
    public func removeChildCoordinator(_ childCoordinator: Coordinator) {
        self.childCoordinators = self.childCoordinators.filter { $0 !== childCoordinator }
    }

}
  

Что мне понравилось в моей реализации навигаторов, так это то, что с помощью перечисления я мог перейти к представлению. Например, я мог бы сделать это:

 navigator.navigate(to: .preferences)
  

Есть ли способ, которым я мог бы включить это в свой координатор? Я знаю, что не могу добавить перечисление к протоколу, которое классы, реализующие протокол, могли бы изменить. Кроме того, как вы можете видеть, я уже добавил show() функцию в протокол. Есть ли способ, которым я мог бы добавить enum или typealias или что-то еще в качестве параметра к этой функции?

Комментарии:

1. В чем проблема с использованием func show(parameter: MyEnum) ?

2. Тогда случаи MyEnum не могут быть определены в классе, реализующем протокол.

3. очевидно, вы можете определить это вне протокола

4. Не по теме childCoordinators не должно быть частью протокола, это следует оставить как деталь реализации.

Ответ №1:

 protocol Coordinator: class {

    func show(param: MyEnum)
}

enum MyEnum {
case first
}
  

Имхо, этого достаточно

Комментарии:

1. Проблема, о которой я только что рассказал, по-прежнему существует. Допустим, у меня есть класс AppCoordinator и class PreferencesCoordinator . Как они оба предоставляют свои собственные варианты для MyEnum ?