Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 重写UIViewConrtoller扩展中的preferredStatusBarStyle_Ios_Swift_Uiviewcontroller - Fatal编程技术网

Ios 重写UIViewConrtoller扩展中的preferredStatusBarStyle

Ios 重写UIViewConrtoller扩展中的preferredStatusBarStyle,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我想在UIViewController的扩展中覆盖preferredStatusBarStyle,如下所示: extension UIViewController { open override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } } 编译器使用Objective-C选择器“preferredStatusBarStyle”为“preferredStatusBar

我想在
UIViewController
的扩展中覆盖
preferredStatusBarStyle
,如下所示:

extension UIViewController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
      return .lightContent
    }
}
编译器使用Objective-C选择器“preferredStatusBarStyle”为“preferredStatusBarStyle”抛出此错误
Getter与使用相同Objective-C选择器的方法“preferredStatusBarStyle()”冲突

将相同的覆盖应用于
UINavigationController
,而不是
UIViewController
;但preferredStatusBarStyle是UIViewController继承的变量

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

您不能通过引入属性的类上的Swift扩展以这种方式重写(重新声明实现)已经实现的属性

您应该创建一个
UIViewController
子类,并在应用程序范围内使用它


不过,还有一个选择。您可以使用Objective-C通过提供扩展类别来覆盖这一点,类似于应用于
UIFont
此处回答的内容:。然而,这样做并不完全安全,你应该期待独角兽在不够小心的情况下出现。

谢谢你,米奇。我不喜欢我的自定义基类UIViewController,因此我必须在每个UIViewController类中一次又一次地实现它…不,你不会,您只需从
MyBaseViewController
而不是
UIViewController
继承所有其他控制器,并在
MyBaseViewController
中实现通用功能。这可能是一种推荐的方法。这正是我在说“我不喜欢使用UIViewController的自定义基类”时的想法