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

Do methods such as viewWillDisappear() require the override keyword?

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

在 ViewController 中,我添加:

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

... 和 XCode(令人惊讶?)不 complain/warn.

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

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

...然后 XCode 说:

Argument names for method 'viewWillAppear(animated:)' do not match those of overridden method 'viewWillAppear' ... insert '_'

... 如果我修复了,那么一切都很好, 但我只是好奇它是否被考虑过可以让它保持原样吗?

我原以为只有一个选项有效,而不是两个都有效。

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

签字,

一个糊涂的傻逼。

Xcode没有投诉的原因是你的viewWillAppearUIViewController中的viewWillAppear有不同的签名。你版本的签名是

viewWillAppear(animated:)

而在 UIViewController 中声明的是:

viewWillAppear(_:)

所以最后你创建了一个全新的方法。这与任何UIViewController方法都不冲突,所以即使你不写override,Xcode也不会报错。

回答你是否是 "okay" 的问题:如果你希望你的代码在视图出现时是 运行 是不行的。如果您不关心 viewWillAppear.

中的代码也没关系

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

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

    cameraSessionController.startCamera()
}