实例方法窗体扩展的覆盖取决于不推荐使用的'@objc'推理

实例方法窗体扩展的覆盖取决于不推荐使用的'@objc'推理

问题描述:

我想将我的代码(写入Swift 3)转换为Swift 4,为此我在需要时添加@objc。 Xcode在自动修复它们方面做得相当不错,但我正在努力处理一些(全都使用相同的两种方法),Xcode无法提供帮助,它只是在我的代码中放置@objc实例方法窗体扩展的覆盖取决于不推荐使用的'@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 PBNavigationBarDelegate { 
    func navbarRightButtonAction(button:PBAdaptiveButton) 
} 

我加@objc protocol PBNavigationBarDelegate但它并没有帮助。
我没有其他想法如何解决弃用警告。

@objc@nonobjcextension的面前:

@objc extension PBViewController: PBNavigationBarDelegate 

Limiting @objc Inference, SE-0160看看雨燕进化的更多细节。它包含关于扩展下面的例子:

启用/分机内禁止@objc推断

有可能是代码的某些地区对所有的(或无)的入口点应该是暴露于Objective-C。允许在扩展名上指定@objc或@nonobjc。 @objc或@nonobjc将应用于该扩展没有自己的@objc或@nonobjc注释的任何成员。例如:

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 
} 
+0

感谢它的工作。我想我以前也试过这个,但是这次我清理了我的项目(cmd + shift + k),然后运行。 – Codey