假设我有结构:
class A: UIViewController {
}
class C {
}
class B: A, P {
typealias T = C
}
protocol P: class {
typealias T
}
extension P {
func initP() {
print("test")
}
}
是否可以在不修改B的情况下调用initP?其他任何东西都可以修改。 我正在尝试创建类似通用抽象类的东西。系统(A,P)是Base。 (B,C) - 具体实施。方法initP对于所有实现都完全相同。这就是我试图避免在植入中调用它的原因。另一方面,它使用来自P的方法和类型。这就是为什么我不能简单地在A中调用它。 首先,我尝试制作A泛型,但在这种情况下,如果B作为故事板中场景的类传递,App会在运行时崩溃
答案 0 :(得分:0)
为什么这不适合你:
extension P {
init() { // Or initWithCoder since it's a ViewController?
print("test")
self.init()
}
}
答案 1 :(得分:0)
由于您已使用协议扩展来定义initP
,因此只要知道对象实现协议,该函数就可用。
B().initP()
let b:B
b.initP()
class C : P {
init() {
initP()
}
}
class B: A, P {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
initP()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initP()
}
}
都有效。