我正在尝试将我的代码(用Swift 3编写)转换为Swift 4,因为我@objc在需要的地方添加.Xcode已经做了相当不错的工作来自动修复它们,但我正在努力解决一些问题(所有使用相同的2种方法),Xcode无法帮助,它只是放在@objc我的代码中.
我navbarRightButtonAction(button:)在ViewController课堂上重写了一个这样的方法.
class ViewController: PBViewController {
override func navbarRightButtonAction(button: PBAdaptiveButton) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
这是我收到警告的地方:
Override of instance method 'navbarRightButtonAction(button:)' from extension of PBViewController depends on deprecated inference of '@objc'
Run Code Online (Sandbox Code Playgroud)
然后我认为问题是我们在PBViewController类中看起来像这样:
extension PBViewController: PBNavigationBarDelegate {
func navbarRightButtonAction(button: PBAdaptiveButton) {
print("Override this method")
}
}
Run Code Online (Sandbox Code Playgroud)
所以我补充说@objc func navbarRightButtonAction(button: PBAdaptiveButton)但没有帮助.
然后我查看了PBNavigationBarDelegate协议
protocol PBNavigationBarDelegate {
func navbarRightButtonAction(button:PBAdaptiveButton)
}
Run Code Online (Sandbox Code Playgroud)
我补充说,@objc protocol PBNavigationBarDelegate但它也没有帮助.
我不知道如何修复弃用警告.
放在@objc或@nonobjc在前面extension:
@objc extension PBViewController: PBNavigationBarDelegate
Run Code Online (Sandbox Code Playgroud)
看看限制@objc推理,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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1605 次 |
| 最近记录: |