Как использовать enum вне класса вложенности - PullRequest
0 голосов
/ 18 сентября 2018

В моем приложении я использую класс под названием BaseNavigator.Это выглядит так:

class BaseNavigator {
    enum Destination {

    }

    weak var navigationController: UINavigationController?

    func navigate(to destination: Destination, completion:((Bool) -> ())? = nil) {
        let viewController = makeViewController(for: destination)
        navigationController?.pushViewController(viewController, animated: true)

        completion?(true)
    }
}

Теперь я хотел бы расширить этот класс, чтобы я мог, например, создать PreferencesNavigator.

class PreferencesNavigator: BaseNavigator {
    enum Destination {
        case general
        case about
    }
}

.позвольте мне использовать это так:

let navigator = PreferencesNavigator()
navigator.navigate(to: .general)

Однако, когда я пытаюсь скомпилировать это, XCode начинает жаловаться на неоднозначность Destination.Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

короткий ответ (IMO): вы не можете сделать это, не сделав этот enum приватным, что, я подозреваю, нарушит ваш подход.Вы можете прочитать больше о расширениях здесь .

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

protocol BaseNavigator {
    func getDestination()
}

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

0 голосов
/ 18 сентября 2018

Вы делаете неправильно, поскольку у вас нет navigate(to: в PreferencesNavigator классе, поэтому, пожалуйста, сделайте это:

Напишите Enum за пределами PreferencesNavigator:

enum Destination {
   case general
   case about
}

инаследовать BaseNavigator, как это

class PreferencesNavigator: BaseNavigator {

}

Тогда ваш код будет работать

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