2017-12-04 6 views
0

Viper 아키텍처로 설계된 앱이 있습니다. Exeptions을 피하기 위해 각 모듈은 BaseFactory 프로토콜을 준수하는 팩토리 클래스에 의해 생성됩니다.프로토콜을 준수하는 객체가 프로토콜 메소드를 숨겨야합니다.

내 응용 프로그램에서 두 (100 %) 모듈 중 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'개인 때문에 'createViperModule'의이 'BaseFactory'내부로 선언 할 수 없습니다. 그러나 선택적으로 선언하여 구현할 필요는 없습니다.

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