代码之家  ›  专栏  ›  技术社区  ›  User45i6h45ih3455

ViewWillEnglishe()等方法是否需要override关键字?

  •  -1
  • User45i6h45ih3455  · 技术社区  · 6 年前

    向ViewController添加viewWillAppear()等方法时,是否需要在该方法上使用override关键字?

    在ViewController中,我添加:

    func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        NotificationCenter.default.addObserver(self, selector: #selector(doStuff), name: .UIApplicationWillResignActive, object: nil)
    }
    

    ... 和XCode(令人惊讶?)不投诉/警告。

    但是,如果我将其更改为:

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        NotificationCenter.default.addObserver(self, selector: #selector(doStuff), name: .UIApplicationWillResignActive, object: nil)
    }
    

    ...然后XCode说:

    方法“viewWillAppear(动画:)”的参数名称与重写的方法“viewWillAppear”的参数名称不匹配。。。插入“\u”

    ... 如果我修好了一切都会好的, 但我只是好奇,如果一开始就保持原样,会不会被认为是可以的?

    我本以为只有一种选择可行,而不是两种都可行。

    你能解释一下吗?因为据我所知,文档并没有解释这一点。

    签字,

    一个糊涂的鼻涕虫。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Sweeper    6 年前

    Xcode没有抱怨的原因是 viewWillAppear 签名与 视图将出现 在里面 UIViewController . 您的版本签名为

    viewWillAppear(animated:)
    

    而在 UIViewController 是:

    viewWillAppear(_:)
    

    因此,最终你正在创造一种全新的方法。这与 UIViewController 方法,所以即使您不编写 override .

    回答您关于是否“正常”的问题:如果您希望在视图出现时运行代码,那么这是不正常的。如果您不关心 视图将出现 .

        2
  •  0
  •   Jarda Pavlíček    5 年前

    只需添加下划线,在我的示例中,这是最终更新的方法:

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        cameraSessionController.startCamera()
    }