如何在嵌套类之外使用枚举

时间:2018-09-18 13:57:32

标签: swift enums

在我的应用中,我使用的是名为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 :(得分:0)

简短的回答(IMO)是,如果不将该枚举设为私有,那么您将无法做到这一点,我怀疑这会破坏您的方法。您可以阅读有关扩展here的更多信息。

我不知道您要解决的问题,但是对于我的初步印象,我建议您通过协议进行操作。

protocol BaseNavigator {
    func getDestination()
}

然后,只要您拥有一个符合该协议的类,就可以调用该方法,该方法可以根据需要在协议定义中调整返回类型。

答案 1 :(得分:-2)

您做错了,因为您没有navigate(to:类的PreferencesNavigator,因此请执行以下操作:

PreferencesNavigator之外写枚举:

enum Destination {
   case general
   case about
}

并像这样继承BaseNavigator

class PreferencesNavigator: BaseNavigator {

}

然后您的代码将起作用