无法在 UIViewController 上实现计算 属性 覆盖

Unable to implement computed property override on UIViewController

尝试实现时:

extension UIViewController {
    public var presentedViewController: UIViewController? {
        return UIViewController()
    }
}

我收到以下错误: .../ExampleApp/ExampleAppTests/SpecExtensions.swift:41:59: Getter for 'presentedViewController' with Objective-C selector 'presentedViewController' conflicts with method 'presentedViewController()' with the same Objective-C selector

我使用的是 UIViewController.h 定义的相同选择器: public var presentedViewController: UIViewController? { get }

这个错误是误导还是我只是忽略了什么?我已经尝试过使用和不使用 overridepublic 作为一种方法等。没有运气。但是,如果它在 UIViewController 的子类上,而不是 UIViewController 本身,我可以覆盖它。

问题是你在扩展中有它。您不能从扩展覆盖 class 上定义的方法。基本上,扩展不是子 class,试图通过在扩展中实现新版本来重新定义存在于 class 上的方法将失败。

请注意,这有效:

class ViewController: UIViewController {

    override var presentedViewController: UIViewController? {
        return UIViewController()
    }

}