1

我有一个使用 Viper 架构设计的应用程序。为了避免异常,每个模块都由一个符合 BaseFactory 协议的工厂类创建。

我的应用程序中一百个 (2%) 模块中的两个应该使用自定义工厂方法创建,该方法不是通过协议强制执行的,这是一种接受参数的工厂方法。

是否可以在 MemberProfileFactory 类中“隐藏/禁用”函数 createViperModule()?

protocol BaseFactory {

    static func createViperModule () -> UIViewController

}

class HelloFactory: BaseFactory {

    static func creatViperModule() -> UIViewController {

        let p = HelloPresenter()
        let storyboard = UIStoryboard.init(name: "Hello", bundle: nil)
        let vc = (storyboard.instantiateInitialViewController() as? HelloVC)!

        p.vc = vc        
        vc.p = p

        return vc
    }
}


class MemberProfileFactory: BaseFactory {

    static func createViperModule() -> UIViewController {

        return PublicProfileVC()
    }

    static func createViperModule(withMember member: MemberModel) -> UIViewController {

        let p = MemberProfilePresenter()
        let storyboard = UIStoryboard.init(name: "MemberProfile", bundle: nil)
        let vc = (storyboard.instantiateInitialViewController() as? MemberProfileVC)!

        p.vc = vc
        p.user = user
        vc.p = p

        return vc
    }
}
4

1 回答 1

1

由于在“BaseFactory”中声明为内部的“createViperModule”,您不能将“createViperModule”设为私有。但是你可以声明它是可选的,所以它不是强制实现的。

@objc protocol BaseFactory {
    @objc optional static func createViperModule () -> UIViewController
}
于 2017-12-04T14:08:08.650 回答