Swift4和Xcode9将在您现有的代码中向您发出新警告,并在附近弹出…

Swift4和Xcode9将在您现有的代码中向您发出新的警告,在您调用Swift函数Objective-C函数的区域附近弹出。 例如,当初始化UIBarButtonItem并包含#selector(swiftClassFunction)时

别担心! 这里发生的是,您正在调用的Swift方法对于Objective-C函数而言并不是自动可见的。 我在初始化UIBarButtonItem时发现了这一点。 Init方法是从Objective-C派生的,因此当您使用#selector添加新的Swift函数时,Xcode现在对我们大吼大叫。

这就是@objc@objcMembers起作用的地方……您可以同时使用两个选项,并且您决定要依赖于要设置的访问权限。

选项1)在您的Swift func()声明的开头添加@objc

@objc func rightBarButtonTapped(){}

这只会将此功能公开给Objective-C。 这可能是您根据自己的情况打开的所有内容。

选项2)@objcMembers添加到您的类定义中…

@objcMembers类ViewController:UIViewController {}

此选项将打开整个课程直至Objective-C。 如果您发现一些需要弥合的差距,这可能会更干净。

参考文献

问题明细-http://bit.ly/HackingWithSwiftWhatsNewInIOS11
隐藏警告-http://bit.ly/StackOverFlowHideWarning
Swift Evolution票证— http://bit.ly/SwiftEVO-LimitingObjcInference