覆盖UIViewConrtoller扩展中的preferredStatusBarStyle

ben*_*art 2 uiviewcontroller ios swift

我想覆盖这样preferredStatusBarStyle的扩展名UIViewController

extension UIViewController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
      return .lightContent
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抛出此错误 Getter for 'preferredStatusBarStyle' with Objective-C selector 'preferredStatusBarStyle' conflicts with method 'preferredStatusBarStyle()' with the same Objective-C selector

将相同的替代应用于UINavigationController而非UIViewController工程;但是preferredStatusBarStyle是UIViewController继承的var。

->为什么可以将此扩展名应用于UINavigationController但不能应用于UIViewController

Mic*_*chi 5

您不能通过Swift中引入该属性的类的扩展来覆盖(重新声明实现)已经实现的属性。

您绝对应该创建一个UIViewController子类,并在整个应用程序中使用它。

但是有一个选择。您可以使用Objective-C通过提供扩展类别来覆盖此内容UIFont此处适用于类似的回答:是否可以更改应用程序的默认字体。但是,这样做并不完全安全,如果没有足够的谨慎,您应该期待独角兽的到来。

  • 这正是我在说“我不喜欢拥有 UIViewController 的自定义基类的想法”时所想到的 (2认同)