我正在尝试将我的代码(用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/

10-12 04:20