#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
и classPreferencesCoordinator
. Как они оба предоставляют свои собственные варианты дляMyEnum
?