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