2017-12-04 9 views
0

私はViperアーキテクチャで設計されたアプリケーションを持っています。例外を避けるために、各モジュールはBaseFactoryプロトコルに準拠するファクトリクラスによって作成されます。プロトコルに準拠したオブジェクトはプロトコルメソッドを隠すべきです

私のアプリでは、2つのモジュール(2%)のうち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 
    } 
} 

答えて

0

'createViperModule'が 'BaseFactory'の内部として宣言されているため、非公開にすることはできません。オプションで宣言して実装する必要はありません。

@objc protocol BaseFactory { 
    @objc optional static func createViperModule() -> UIViewController 
} 
関連する問題