繁体   English   中英

Swift:在协议扩展中初始化对象后调用某种方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM