使用Swift实现所有UIViewControllers的功能

时间:2018-04-18 22:42:39

标签: ios swift swift4

有没有办法为所有UIViewControllers实现功能?

我试图扩展所有UIViewControllers的特定行为,非常标准。

例如:

MyBaseClass

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

我必须在100 UIViewController

中实施类似的行为

2 个答案:

答案 0 :(得分:1)

一种方法是将协议与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()
    }

}

答案 1 :(得分:1)

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

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 {

然后您不需要做任何事情,邮件将自动打印。