Blazej SLEBODA
Blazej SLEBODA

Reputation: 9915

Object conforming to a protocol should hide the protocol methods

I have an app designed with Viper architecture. To avoid exeptions, each module is created by a factory class which comply to BaseFactory protocol.

Two of one hundred (2%) modules in my app should be created with a custom factory method which is not enforced via protocol, a factory method which accept an argument.

Is it possible to "hide/disable" a function createViperModule() in the MemberProfileFactory class?

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
    }
}

Upvotes: 1

Views: 52

Answers (1)

tailor
tailor

Reputation: 665

You can't make 'createViperModule' private because of 'createViperModule' declared as internal in 'BaseFactory'. but you can declare it optional so it is not mandatory to implement.

@objc protocol BaseFactory {
    @objc optional static func createViperModule () -> UIViewController
}

Upvotes: 1

Related Questions