符合协议的对象应该隐藏协议方法
Object conforming to a protocol should hide the protocol methods
我有一个使用 Viper 架构设计的应用程序。为避免异常,每个模块都由符合 BaseFactory 协议的工厂 class 创建。
我的应用程序中的一百个 (2%) 模块中的两个应该使用不通过协议强制执行的自定义工厂方法创建,这是一个接受参数的工厂方法。
是否可以"hide/disable" MemberProfileFactory class 中的函数 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
}
}
您不能将 'createViperModule' 设为私有,因为 'createViperModule' 在 'BaseFactory' 中声明为内部。但您可以将其声明为可选的,因此它不是强制实施的。
@objc protocol BaseFactory {
@objc optional static func createViperModule () -> UIViewController
}
我有一个使用 Viper 架构设计的应用程序。为避免异常,每个模块都由符合 BaseFactory 协议的工厂 class 创建。
我的应用程序中的一百个 (2%) 模块中的两个应该使用不通过协议强制执行的自定义工厂方法创建,这是一个接受参数的工厂方法。
是否可以"hide/disable" MemberProfileFactory class 中的函数 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
}
}
您不能将 'createViperModule' 设为私有,因为 'createViperModule' 在 'BaseFactory' 中声明为内部。但您可以将其声明为可选的,因此它不是强制实施的。
@objc protocol BaseFactory {
@objc optional static func createViperModule () -> UIViewController
}