![](/img/trans.png)
[英]Swift protocol and extension, I need to call instance method if it present
[英]Swift: Call some method after object initialized in protocol extension
假设我有结构:
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会在运行时崩溃
为什么这不适合你:
extension P {
init() { // Or initWithCoder since it's a ViewController?
print("test")
self.init()
}
}
由于您已使用协议扩展来定义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()
}
}
都是有效的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.