无法在 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 }
这个错误是误导还是我只是忽略了什么?我已经尝试过使用和不使用 override
、public
作为一种方法等。没有运气。但是,如果它在 UIViewController 的子类上,而不是 UIViewController 本身,我可以覆盖它。
问题是你在扩展中有它。您不能从扩展覆盖 class 上定义的方法。基本上,扩展不是子 class,试图通过在扩展中实现新版本来重新定义存在于 class 上的方法将失败。
请注意,这有效:
class ViewController: UIViewController {
override var presentedViewController: UIViewController? {
return 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 }
这个错误是误导还是我只是忽略了什么?我已经尝试过使用和不使用 override
、public
作为一种方法等。没有运气。但是,如果它在 UIViewController 的子类上,而不是 UIViewController 本身,我可以覆盖它。
问题是你在扩展中有它。您不能从扩展覆盖 class 上定义的方法。基本上,扩展不是子 class,试图通过在扩展中实现新版本来重新定义存在于 class 上的方法将失败。
请注意,这有效:
class ViewController: UIViewController {
override var presentedViewController: UIViewController? {
return UIViewController()
}
}