Ios 使用Swift为所有UIViewController实现功能

Ios 使用Swift为所有UIViewController实现功能,ios,swift,swift4,Ios,Swift,Swift4,是否有办法实现所有UIViewController的功能 我试图扩展所有UIViewController的特定行为,这是非常标准的 例如: MyBaseClass class MyBaseClass { public func load(viewController:UIViewController){ print("The size of the view is \(viewController.view.size.width)") } } 我必须在100个U

是否有办法实现所有
UIViewController
的功能

我试图扩展所有UIViewController的特定行为,这是非常标准的

例如:

MyBaseClass

class MyBaseClass {
    public func load(viewController:UIViewController){
        print("The size of the view is \(viewController.view.size.width)")
    }
}

我必须在100个
UIViewController

中实现类似的行为,一种方法是将协议与
UIViewController
的扩展结合使用

将您的行为定义为协议,并扩展
UIViewController
以实现它:

protocol WidthProtocol {

    func showWidth()

}

extension UIViewController: WidthProtocol {

    func showWidth() {
        print("The width of the view is \(self.view.frame.size.width)")
    }

}
设置好后,可以从
UIViewController
的任何子类调用函数,例如:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Show the width
        showWidth()
    }

}

或者,如果您不想在所有视图控制器中调用相同的函数,您可以将其子类化:

class YourCustomViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        print("The size of the view is \(view.frame.width)")
    }

}
然后将
UIViewController
替换为
YourCustomViewController

class oneOfYour100Controler : UIViewController {
对这样的事情:

class oneOfYour100Controler : YourCustomViewController {

然后您无需执行任何操作,消息将自动打印。

子类化UIViewController是个坏主意。使用协议扩展或创建一个简单的助手类。一般情况下还是那样?在这种情况下,这确实是个坏主意(我觉得这是出于调试原因)。一般来说,这实际上取决于为什么要子类化。