我正在尝试将我的代码(用Swift 3编写)转换为Swift 4,为此我在需要的地方添加了@objc
。 Xcode在自动修复它们方面做得非常出色,但是我在一些方面(都使用相同的2种方法)苦苦挣扎,而Xcode却无能为力,它只是将@objc
放在我的代码中。
我在navbarRightButtonAction(button:)
类中重写了一种称为ViewController
的方法。
class ViewController: PBViewController {
override func navbarRightButtonAction(button: PBAdaptiveButton) {
...
}
}
这是我收到警告的地方:
Override of instance method 'navbarRightButtonAction(button:)' from extension of PBViewController depends on deprecated inference of '@objc'
然后我认为问题出在
PBViewController
类中,它看起来像这样:extension PBViewController: PBNavigationBarDelegate {
func navbarRightButtonAction(button: PBAdaptiveButton) {
print("Override this method")
}
}
所以我添加了
@objc func navbarRightButtonAction(button: PBAdaptiveButton)
,但没有帮助。然后我研究了
PBNavigationBarDelegate
协议(protocol)protocol PBNavigationBarDelegate {
func navbarRightButtonAction(button:PBAdaptiveButton)
}
我添加了
@objc protocol PBNavigationBarDelegate
,但也没有帮助。我不知道该怎么办才能解决过时警告。
最佳答案
将@objc
或@nonobjc
放在extension
前面:
@objc extension PBViewController: PBNavigationBarDelegate
有关更多详细信息,请查看Swift Evolution上的Limiting @objc
Inference, SE-0160。它包含以下有关扩展的示例:class SwiftClass { }
@objc extension SwiftClass {
func foo() { } // implicitly @objc
func bar() -> (Int, Int) // error: tuple type (Int, Int) not
// expressible in @objc. add @nonobjc or move this method to fix the issue
}
@objcMembers
class MyClass : NSObject {
func wibble() { } // implicitly @objc
}
@nonobjc extension MyClass {
func wobble() { } // not @objc, despite @objcMembers
}
关于ios - 实例方法形式扩展的覆盖取决于 '@objc'的弃用推断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46819723/